## Saturday, March 19, 2011

### [jrtrjwzi] Errors in the Bubble Babble specification

The bubblebabble binary data encoding specification by Antti Huima has a few errors.

```--- /tmp/original 2011-03-19 02:03:44.550808780 -0400
+++ draft-huima-01.txt 2011-03-18 20:32:15.000000000 -0400
@@ -53,7 +53,7 @@

Let the data to be encoded be D[1] ... D[K] where K is the length
of the data in bytes; every D[i] is an integer from 0 to 2^8 - 1.
-   First define the checksum series C[1] ... C[_|K/2|_] where
+   First define the checksum series C[1] ... C[_|K/2|_ + 1] where

C[1] = 1

@@ -66,11 +66,11 @@

where

-     a = (((D[i * 2 - 3] >> 6) & 3) + C[i]) mod 6
-     b = (D[i * 2 - 3] >> 2) & 15
-     c = (((D[i * 2 - 3]) & 3) + _|C[i] / 6|_) mod 6
-     d = (D[i * 2 - 2] >> 4) & 15; and
-     e = (D[i * 2 - 3]) & 15.
+     a = (((D[i * 2 - 1] >> 6) & 3) + C[i]) mod 6
+     b =   (D[i * 2 - 1] >> 2) & 15
+     c = (((D[i * 2 - 1]) & 3) + _|C[i] / 6|_) mod 6
+     d = (D[i * 2] >> 4) & 15; and
+     e = (D[i * 2]) & 15.

The partial tuple P is

@@ -78,15 +78,15 @@

where if K is even then

-     a = (C[i]) mod 6
+     a = (C[K/2 + 1]) mod 6
b = 16
-     c = _|C[i] / 6|_
+     c = _|C[K/2 + 1] / 6|_

but if it is odd then

-     a = (((D[K] >> 6) & 3) + C[i]) mod 6
+     a = (((D[K] >> 6) & 3) + C[_|K/2|_ + 1]) mod 6
b = (D[K] >> 2) & 15
-     c = (((D[K]) & 3) + _|C[i] / 6|_) mod 6
+     c = (((D[K]) & 3) + _|C[_|K/2|_ + 1] / 6|_) mod 6

The `vowel table' V maps integers between 0 and 5 to vowels as

@@ -117,6 +117,9 @@
14 - v
15 - z
16 - x
+
+   Note well that the vowel and consonant tables are indexed from 0, while
+   the data and checksum series are indexed from 1.

The encoding E(T) of a tuple T = <a, b, c, d, e> is then the string

```

Without the correction in the definition of `a b c d e`, the array indices will be negative for `i`=1.

Here is the updated version. The RCS file gives a record of my changes.

#### 1 comment:

cdslashetc said...

Interesting, I wonder if this is patched in jacksum, I must download the java source and check it out.