# 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)