Skip to content

SCALE Examples

A byte array A is defined as a set of bytes (b1,...,bn) st. n < 2^536.

Let LS(x, n) be the least significant n bits of x

We encode a mode as the least significant two bits of the first byte of each encoding.

We use | to mean append. LE means little endian format

n < 2^6; mode = 0

Enc(A) := l_1 | b_1 |...| b_n when n < 2^6

l_1 is the encoding of n. Since n < 2^6 we know n is at most 6 bits. We take these 6 bits and append 00 to indicate the 'mode' we are using.

eg. n = 0x4 = 00000100

=> LS(n, 6) = 000100

=> Enc(A) := 000100| 00 | b_1 | ... | b_4 (ie. LS(n,6) | mode | bytes)

2^6 <= n < 2^14; mode = 1

Enc(A) := i_1 | i_2 | b_1 |...| b_n when 2^6 <= n < 2^14

i_1,i_2 are the encoding of n. Since 2^6 <= n < 2^14 we know n is between 7 and 14 bits. We truncate n to 14 bits (removing leading zeros or padding to 14 bits) and append 01 to indicate the 'mode'.

eg. n = 0x1000 = 00010000,00000000

=> LS(n, 14) = 010000,00000000

=> 01000000,00000001 # Append mode bits, will store in LE in next step

=> Enc(A) := 00000001 | 01000000 | b_1 | ... | b_4096 (ie. LS(n,14) | mode | bytes)

2^14 <= n < 2^30; mode = 2

Enc(A) := i_1 | i_2 | i_3 | i_4 | b_1 |...| b_n when 2^14 <= n < 2^30

This is the same as the previous case, but now n occupies 30 bits and the mode is 2.

eg. n = 0x240FF80 = 00000010,01000000,11111111,10000000

=> LS(n, 30) = 000010,01000000,11111111,10000000

=> 00001001,00000011,11111110,00000010 # Append mode bits, will store in LE in next step

=> Enc(A) := 00000010 | 11111110 | 00000011 | 00001001 | b_1 | ... | b_37814144 (ie. LS(n,30) | mode | bytes)

2^30 <= n < 2^536

Enc(A) := k_1 | k_2 | k_3 | k_4 | k_5 | b_1 |...| b_n when 2^30 <= n < 2^536

In this case we define m to be the number of bytes used to store n. We then assign k_1 := m - 4 to indicate how many bytes to read for the size of n.

eg. n = 0x100000000 = 00000001 | 0...0 | 0...0 | 0...0 | 0...0

=> m = 5

=> k_1 = m - 4 = 1

=> 000001 | 11 | 0...0 | 0...0 | 0...0 | 0...0 | b_1 | ... | b_4294967296 (ie. m - 4 | mode | n | bytes)