Skip to content

Commit

Permalink
Fleshed out README.md with BNF grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
abiggerhammer committed Jun 9, 2011
1 parent e131a5b commit 02e6bbc
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 1 deletion.
85 changes: 85 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# otr-message #

otr-message is a Javascript parser for the message format used in the [Off-the-Record Messaging](http://www.cypherpunks.ca/otr/) instant messaging encryption system, [version 2](http://www.cypherpunks.ca/otr/Protocol-v2-3.0.0.html).

## Installation ##

Coming soon. FIXME

### Dependencies ###
ReParse. Or possibly the Javascript port of Parsec. Watch this space for updates.

## API ##

Coming soon. FIXME

## Grammar ##

otr-message uses the following (incomplete!) grammar to describe the format of OTR messages:

```
otr ::= query | error | encoded | tagged_plaintext | plaintext
query ::= query_prefix versions '?'
query_prefix ::= '?OTR'
versions ::= v1_p vN_p
v1_p ::= '?' | /* empty */
vN_p ::= 'v' version*
tagged_plaintext ::= opt_string whitespace_tag opt_string
opt_string ::= string | /* empty */
whitespace_tag ::= mandatory_tag opt_v1_tag opt_v2_tag
mandatory_tag ::= 'x20\x09\x20\x20\x09\x09\x09\x09\x20\x09\x20\x09\x20\x09\x20\x20'
opt_v1_tag ::= '\x20\x09\x20\x09\x20\x20\x09\x20' | /* empty */
opt_v2_tag ::= '\x20\x20\x09\x09\x20\x20\x09\x20' | /* empty */
error ::= error_prefix string
error_prefix ::= '?OTR Error:'
plaintext ::= string
encoded ::= otr_prefix (dh_commit | dh_key | reveal_signature | signature | v1_kem | data) '.'
otr_prefix ::= '?OTR:'
otr_byte ::= char
otr_short ::= byte{2}
otr_int ::= byte{4}
otr_mpi ::= otr_int [^\x00]{otr_int_val}
otr_data ::= otr_int byte{otr_int_val}
otr_ctr ::= byte{8}
otr_mac ::= byte{20}
otr_pubkey ::= otr_short otr_mpi{4}
otr_sig ::= /* difficult, since this depends on an outside parameter... FIXME */
dh_commit ::= otr_short otr_byte otr_data otr_data
dh_key ::= otr_short otr_byte otr_mpi
reveal_signature ::= otr_short otr_byte otr_data otr_data otr_mac
signature ::= otr_short otr_byte otr_data otr_mac
v1_kem ::= FIXME
data ::= otr_short otr_byte otr_int otr_int otr_int otr_ctr otr_data otr_mac otr_data
```

## License ##

Copyright (c) 2011, Meredith L. Patterson <clonearmy@gmail.com>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

* Neither the name of the <organization> nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT
HOLDER> BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3 changes: 2 additions & 1 deletion lib/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,12 @@ define(["require", "exports", "module"], function(require, exports. module) {

function otr_mpi() {
var len = this.produce(otr_int);
/* need to make sure that no leading zeroes, so otr_byte here is wrong. FIXME. */
return this.count(otr_byte, len);
}

function otr_data() {
var len = this.produce(otr_len);
var len = this.produce(otr_int);
return this.count(otr_byte, len);
}

Expand Down

0 comments on commit 02e6bbc

Please sign in to comment.