Project

General

Profile

Huffman Codes for BLISS Signatures » History » Version 5

Andreas Steffen, 13.12.2014 17:23

1 1 Andreas Steffen
h1. Huffman Codes for BLISS Signatures
2 1 Andreas Steffen
3 2 Andreas Steffen
{{>toc}}
4 2 Andreas Steffen
5 5 Andreas Steffen
All Huffman codes were generated automatically using the "bliss_huffman":https://wiki.strongswan.org/projects/strongswan/repository/revisions/master/entry/src/libstrongswan/plugins/bliss/bliss_huffman.c utility.
6 2 Andreas Steffen
7 2 Andreas Steffen
The data structures used are defined in "bliss_huffman_code.h":https://wiki.strongswan.org/projects/strongswan/repository/revisions/master/entry/src/libstrongswan/plugins/bliss/bliss_huffman_code.h
8 2 Andreas Steffen
9 1 Andreas Steffen
h2. BLISS-I Signature Encoding
10 1 Andreas Steffen
11 4 Andreas Steffen
h3. Design Parameters
12 1 Andreas Steffen
<pre>
13 2 Andreas Steffen
/*
14 2 Andreas Steffen
 * Design: sigma = 215
15 2 Andreas Steffen
 *
16 2 Andreas Steffen
 *   i  p_z1[i]
17 2 Andreas Steffen
 *   0  0.7662277087816564         0 ..  256
18 2 Andreas Steffen
 *   1  0.2165251006508514       256 ..  512
19 2 Andreas Steffen
 *   2  0.0168930510015114       512 ..  768
20 2 Andreas Steffen
 *   3  0.0003522302274478       768 .. 1024
21 2 Andreas Steffen
 *   4  0.0000019067136680      1024 .. 1280
22 2 Andreas Steffen
 *   5  0.0000000026239598      1280 .. 1536
23 2 Andreas Steffen
 *   6  0.0000000000009052      1536 .. 1792
24 2 Andreas Steffen
 *   7  0.0000000000000001      1792 .. 2047
25 2 Andreas Steffen
 *
26 2 Andreas Steffen
 *   k  p_z2[k]  dx = 1024
27 2 Andreas Steffen
 *  -1  0.0086781953089156   -1535.5 .. -511.5
28 2 Andreas Steffen
 *   0  0.9826436093821688    -511.5 ..  511.5
29 2 Andreas Steffen
 *   1  0.0086781953089156     511.5 .. 1535.5
30 2 Andreas Steffen
 *
31 2 Andreas Steffen
 *  (i, k)  p
32 2 Andreas Steffen
 *  (0,-1)  0.0066494737079101
33 2 Andreas Steffen
 *  (0, 0)  0.7529287613658361
34 2 Andreas Steffen
 *  (0, 1)  0.0066494737079101
35 2 Andreas Steffen
 *
36 2 Andreas Steffen
 *  (1,-1)  0.0018790471127307
37 2 Andreas Steffen
 *  (1, 0)  0.2127670064253900
38 2 Andreas Steffen
 *  (1, 1)  0.0018790471127307
39 2 Andreas Steffen
 *
40 2 Andreas Steffen
 *  (2,-1)  0.0001466011959546
41 2 Andreas Steffen
 *  (2, 0)  0.0165998486096022
42 2 Andreas Steffen
 *  (2, 1)  0.0001466011959546
43 2 Andreas Steffen
 *
44 2 Andreas Steffen
 *  (3,-1)  0.0000030567227075
45 2 Andreas Steffen
 *  (3, 0)  0.0003461167820328
46 2 Andreas Steffen
 *  (3, 1)  0.0000030567227075
47 2 Andreas Steffen
 *
48 2 Andreas Steffen
 *  (4,-1)  0.0000000165468336
49 2 Andreas Steffen
 *  (4, 0)  0.0000018736200007
50 2 Andreas Steffen
 *  (4, 1)  0.0000000165468336
51 2 Andreas Steffen
 *
52 2 Andreas Steffen
 *  (5,-1)  0.0000000000227712
53 2 Andreas Steffen
 *  (5, 0)  0.0000000025784174
54 2 Andreas Steffen
 *  (5, 1)  0.0000000000227712
55 2 Andreas Steffen
 *
56 2 Andreas Steffen
 *  (6,-1)  0.0000000000000079
57 2 Andreas Steffen
 *  (6, 0)  0.0000000000008895
58 2 Andreas Steffen
 *  (6, 1)  0.0000000000000079
59 2 Andreas Steffen
 *
60 2 Andreas Steffen
 *  (7,-1)  0.0000000000000000
61 2 Andreas Steffen
 *  (7, 0)  0.0000000000000001
62 2 Andreas Steffen
 *  (7, 1)  0.0000000000000000
63 2 Andreas Steffen
 *
64 2 Andreas Steffen
 *  p_sum   0.9999999999999998
65 2 Andreas Steffen
 *
66 2 Andreas Steffen
 * entropy = 1.0195 bits/tuple (521 bits)
67 2 Andreas Steffen
 */
68 2 Andreas Steffen
</pre>
69 1 Andreas Steffen
70 4 Andreas Steffen
h3. Decoding Tree
71 2 Andreas Steffen
<pre>
72 2 Andreas Steffen
#include "bliss_huffman_code.h"
73 2 Andreas Steffen
74 2 Andreas Steffen
static bliss_huffman_code_node_t nodes[] = {
75 2 Andreas Steffen
    {   1,   2,  -1 },  /*   0: */
76 2 Andreas Steffen
    {  -1,  -1,   1 },  /*   1: (0, 0)  1 bit  */
77 2 Andreas Steffen
    {   3,   4,  -1 },  /*   2: */
78 2 Andreas Steffen
    {  -1,  -1,   4 },  /*   3: (1, 0)  2 bits */
79 2 Andreas Steffen
    {   5,  46,  -1 },  /*   4: */
80 2 Andreas Steffen
    {   6,  45,  -1 },  /*   5: */
81 2 Andreas Steffen
    {   7,   8,  -1 },  /*   6: */
82 2 Andreas Steffen
    {  -1,  -1,   0 },  /*   7: (0,-1)  5 bits */
83 2 Andreas Steffen
    {   9,  44,  -1 },  /*   8: */
84 2 Andreas Steffen
    {  10,  11,  -1 },  /*   9: */
85 2 Andreas Steffen
    {  -1,  -1,   3 },  /*  10: (1,-1)  7 bits */
86 2 Andreas Steffen
    {  12,  13,  -1 },  /*  11: */
87 2 Andreas Steffen
    {  -1,  -1,  10 },  /*  12: (3, 0)  8 bits */
88 2 Andreas Steffen
    {  14,  29,  -1 },  /*  13: */
89 2 Andreas Steffen
    {  15,  22,  -1 },  /*  14: */
90 2 Andreas Steffen
    {  16,  19,  -1 },  /*  15: */
91 2 Andreas Steffen
    {  17,  18,  -1 },  /*  16: */
92 2 Andreas Steffen
    {  -1,  -1,   8 },  /*  17: (2, 1) 12 bits */
93 2 Andreas Steffen
    {  -1,  -1,   6 },  /*  18: (2,-1) 12 bits */
94 2 Andreas Steffen
    {  20,  21,  -1 },  /*  19: */
95 2 Andreas Steffen
    {  -1,  -1,  11 },  /*  20: (3, 1) 12 bits */
96 2 Andreas Steffen
    {  -1,  -1,   9 },  /*  21: (3,-1) 12 bits */
97 2 Andreas Steffen
    {  23,  26,  -1 },  /*  22: */
98 2 Andreas Steffen
    {  24,  25,  -1 },  /*  23: */
99 2 Andreas Steffen
    {  -1,  -1,  13 },  /*  24: (4, 0) 12 bits */
100 2 Andreas Steffen
    {  -1,  -1,  14 },  /*  25: (4, 1) 12 bits */
101 2 Andreas Steffen
	{  27,  28,  -1 },  /*  26: */
102 2 Andreas Steffen
	{  -1,  -1,  12 },  /*  27: (4,-1) 12 bits */
103 2 Andreas Steffen
	{  -1,  -1,  16 },  /*  28: (5, 0) 12 bits */
104 2 Andreas Steffen
	{  30,  37,  -1 },  /*  29: */
105 2 Andreas Steffen
	{  31,  34,  -1 },  /*  30: */
106 2 Andreas Steffen
	{  32,  33,  -1 },  /*  31: */
107 2 Andreas Steffen
	{  -1,  -1,  17 },  /*  32: (5, 1) 12 bits */
108 2 Andreas Steffen
	{  -1,  -1,  15 },  /*  33: (5,-1) 12 bits */
109 2 Andreas Steffen
	{  35,  36,  -1 },  /*  34: */
110 2 Andreas Steffen
	{  -1,  -1,  19 },  /*  35: (6, 0) 12 bits */
111 2 Andreas Steffen
	{  -1,  -1,  20 },  /*  36: (6, 1) 12 bits */
112 2 Andreas Steffen
	{  38,  41,  -1 },  /*  37: */
113 2 Andreas Steffen
	{  39,  40,  -1 },  /*  38: */
114 2 Andreas Steffen
	{  -1,  -1,  18 },  /*  39: (6,-1) 12 bits */
115 2 Andreas Steffen
	{  -1,  -1,  22 },  /*  40: (7, 0) 12 bits */
116 2 Andreas Steffen
	{  42,  43,  -1 },  /*  41: */
117 2 Andreas Steffen
	{  -1,  -1,  23 },  /*  42: (7, 1) 12 bits */
118 2 Andreas Steffen
	{  -1,  -1,  21 },  /*  43: (7,-1) 12 bits */
119 2 Andreas Steffen
	{  -1,  -1,   5 },  /*  44: (1, 1)  6 bits */
120 2 Andreas Steffen
	{  -1,  -1,   2 },  /*  45: (0, 1)  4 bits */
121 2 Andreas Steffen
	{  -1,  -1,   7 },  /*  46: (2, 0)  3 bits */
122 2 Andreas Steffen
};
123 1 Andreas Steffen
</pre>
124 1 Andreas Steffen
125 4 Andreas Steffen
h3. Encoding Table
126 2 Andreas Steffen
<pre>
127 2 Andreas Steffen
static bliss_huffman_code_tuple_t tuples[] = {
128 2 Andreas Steffen
    {    24,  5 },  /*   0: (0,-1) 11000 */
129 2 Andreas Steffen
    {     0,  1 },  /*   1: (0, 0) 0 */
130 2 Andreas Steffen
	{    13,  4 },  /*   2: (0, 1) 1101 */
131 2 Andreas Steffen
132 2 Andreas Steffen
	{   100,  7 },  /*   3: (1,-1) 1100100 */
133 2 Andreas Steffen
	{     2,  2 },  /*   4: (1, 0) 10 */
134 2 Andreas Steffen
	{    51,  6 },  /*   5: (1, 1) 110011 */
135 2 Andreas Steffen
136 2 Andreas Steffen
	{  3249, 12 },  /*   6: (2,-1) 110010110001 */
137 2 Andreas Steffen
	{     7,  3 },  /*   7: (2, 0) 111 */
138 2 Andreas Steffen
	{  3248, 12 },  /*   8: (2, 1) 110010110000 */
139 2 Andreas Steffen
140 2 Andreas Steffen
	{  3251, 12 },  /*   9: (3,-1) 110010110011 */
141 2 Andreas Steffen
	{   202,  8 },  /*  10: (3, 0) 11001010 */
142 2 Andreas Steffen
	{  3250, 12 },  /*  11: (3, 1) 110010110010 */
143 2 Andreas Steffen
144 2 Andreas Steffen
	{  3254, 12 },  /*  12: (4,-1) 110010110110 */
145 2 Andreas Steffen
	{  3252, 12 },  /*  13: (4, 0) 110010110100 */
146 2 Andreas Steffen
	{  3253, 12 },  /*  14: (4, 1) 110010110101 */
147 2 Andreas Steffen
148 2 Andreas Steffen
	{  3257, 12 },  /*  15: (5,-1) 110010111001 */
149 2 Andreas Steffen
	{  3255, 12 },  /*  16: (5, 0) 110010110111 */
150 2 Andreas Steffen
	{  3256, 12 },  /*  17: (5, 1) 110010111000 */
151 2 Andreas Steffen
152 2 Andreas Steffen
	{  3260, 12 },  /*  18: (6,-1) 110010111100 */
153 2 Andreas Steffen
	{  3258, 12 },  /*  19: (6, 0) 110010111010 */
154 2 Andreas Steffen
	{  3259, 12 },  /*  20: (6, 1) 110010111011 */
155 2 Andreas Steffen
156 2 Andreas Steffen
	{  3263, 12 },  /*  21: (7,-1) 110010111111 */
157 2 Andreas Steffen
	{  3261, 12 },  /*  22: (7, 0) 110010111101 */
158 2 Andreas Steffen
	{  3262, 12 },  /*  23: (7, 1) 110010111110 */
159 2 Andreas Steffen
};
160 2 Andreas Steffen
161 2 Andreas Steffen
/* code_length = 1.3189 bits/tuple (676 bits) */
162 2 Andreas Steffen
</pre>
163 2 Andreas Steffen
164 4 Andreas Steffen
h3. Parameter Set
165 2 Andreas Steffen
<pre>
166 2 Andreas Steffen
bliss_huffman_code_t bliss_huffman_code_1 = {
167 2 Andreas Steffen
	.n_z1 = 8,
168 2 Andreas Steffen
	.n_z2 = 2,
169 2 Andreas Steffen
	.tuples = tuples,
170 2 Andreas Steffen
	.nodes  = nodes
171 2 Andreas Steffen
};
172 2 Andreas Steffen
</pre>
173 2 Andreas Steffen
174 1 Andreas Steffen
h2. BLISS-III Signature Encoding
175 1 Andreas Steffen
176 4 Andreas Steffen
h3. Design Parameters
177 1 Andreas Steffen
<pre>
178 2 Andreas Steffen
/*
179 2 Andreas Steffen
 * Design: sigma = 250
180 2 Andreas Steffen
 *
181 2 Andreas Steffen
 *   i  p_z1[i]
182 2 Andreas Steffen
 *   0  0.6941647250930416         0 ..  256
183 2 Andreas Steffen
 *   1  0.2652752755116807       256 ..  512
184 2 Andreas Steffen
 *   2  0.0384337021454129       512 ..  768
185 2 Andreas Steffen
 *   3  0.0020842622589255       768 .. 1024
186 2 Andreas Steffen
 *   4  0.0000417294572050      1024 .. 1280
187 2 Andreas Steffen
 *   5  0.0000003047309681      1280 .. 1536
188 2 Andreas Steffen
 *   6  0.0000000008027661      1536 .. 1760
189 2 Andreas Steffen
 *
190 2 Andreas Steffen
 *   k  p_z2[k]  dx = 512
191 2 Andreas Steffen
 *  -3  0.0000001543959154   -1791.5 ..-1279.5
192 2 Andreas Steffen
 *  -2  0.0010701394583782   -1279.5 .. -767.5
193 2 Andreas Steffen
 *  -1  0.1523201563502276    -767.5 .. -255.5
194 2 Andreas Steffen
 *   0  0.6932190995909575    -255.5 ..  255.5
195 2 Andreas Steffen
 *   1  0.1523201563502276     255.5 ..  767.5
196 2 Andreas Steffen
 *   2  0.0010701394583782     767.5 .. 1279.5
197 2 Andreas Steffen
 *   3  0.0000001543959154    1279.5 .. 1791.5
198 2 Andreas Steffen
 *
199 2 Andreas Steffen
 *  (i, k)  p
200 2 Andreas Steffen
 *  (0,-3)  0.0000001071761982
201 2 Andreas Steffen
 *  (0,-2)  0.0007428530629363
202 2 Andreas Steffen
 *  (0,-1)  0.1057352794589848
203 2 Andreas Steffen
 *  (0, 0)  0.4812082456968029
204 2 Andreas Steffen
 *  (0, 1)  0.1057352794589848
205 2 Andreas Steffen
 *  (0, 2)  0.0007428530629363
206 2 Andreas Steffen
 *  (0, 3)  0.0000001071761982
207 2 Andreas Steffen
 *
208 2 Andreas Steffen
 *  (1,-3)  0.0000000409574190
209 2 Andreas Steffen
 *  (1,-2)  0.0002838815396572
210 2 Andreas Steffen
 *  (1,-1)  0.0404067714417889
211 2 Andreas Steffen
 *  (1, 0)  0.1838938876339505
212 2 Andreas Steffen
 *  (1, 1)  0.0404067714417889
213 2 Andreas Steffen
 *  (1, 2)  0.0002838815396572
214 2 Andreas Steffen
 *  (1, 3)  0.0000000409574190
215 2 Andreas Steffen
 *
216 2 Andreas Steffen
 *  (2,-3)  0.0000000059340066
217 2 Andreas Steffen
 *  (2,-2)  0.0000411294211974
218 2 Andreas Steffen
 *  (2,-1)  0.0058542275199074
219 2 Andreas Steffen
 *  (2, 0)  0.0266429763951902
220 2 Andreas Steffen
 *  (2, 1)  0.0058542275199074
221 2 Andreas Steffen
 *  (2, 2)  0.0000411294211974
222 2 Andreas Steffen
 *  (2, 3)  0.0000000059340066
223 2 Andreas Steffen
 *
224 2 Andreas Steffen
 *  (3,-3)  0.0000000003218016
225 2 Andreas Steffen
 *  (3,-2)  0.0000022304512849
226 2 Andreas Steffen
 *  (3,-1)  0.0003174751531544
227 2 Andreas Steffen
 *  (3, 0)  0.0014448504064437
228 2 Andreas Steffen
 *  (3, 1)  0.0003174751531544
229 2 Andreas Steffen
 *  (3, 2)  0.0000022304512849
230 2 Andreas Steffen
 *  (3, 3)  0.0000000003218016
231 2 Andreas Steffen
 *
232 2 Andreas Steffen
 *  (4,-3)  0.0000000000064429
233 2 Andreas Steffen
 *  (4,-2)  0.0000000446563387
234 2 Andreas Steffen
 *  (4,-1)  0.0000063562374459
235 2 Andreas Steffen
 *  (4, 0)  0.0000289276567501
236 2 Andreas Steffen
 *  (4, 1)  0.0000063562374459
237 2 Andreas Steffen
 *  (4, 2)  0.0000000446563387
238 2 Andreas Steffen
 *  (4, 3)  0.0000000000064429
239 2 Andreas Steffen
 *
240 2 Andreas Steffen
 *  (5,-3)  0.0000000000000470
241 2 Andreas Steffen
 *  (5,-2)  0.0000000003261046
242 2 Andreas Steffen
 *  (5,-1)  0.0000000464166687
243 2 Andreas Steffen
 *  (5, 0)  0.0000002112453273
244 2 Andreas Steffen
 *  (5, 1)  0.0000000464166687
245 2 Andreas Steffen
 *  (5, 2)  0.0000000003261046
246 2 Andreas Steffen
 *  (5, 3)  0.0000000000000470
247 2 Andreas Steffen
 *
248 2 Andreas Steffen
 *  (6,-3)  0.0000000000000001
249 2 Andreas Steffen
 *  (6,-2)  0.0000000000008591
250 2 Andreas Steffen
 *  (6,-1)  0.0000000001222775
251 2 Andreas Steffen
 *  (6, 0)  0.0000000005564928
252 2 Andreas Steffen
 *  (6, 1)  0.0000000001222775
253 2 Andreas Steffen
 *  (6, 2)  0.0000000000008591
254 2 Andreas Steffen
 *  (6, 3)  0.0000000000000001
255 2 Andreas Steffen
 *
256 2 Andreas Steffen
 *  p_sum   0.9999999999999999
257 2 Andreas Steffen
 *
258 2 Andreas Steffen
 * entropy = 2.2879 bits/tuple (1171 bits)
259 2 Andreas Steffen
 */
260 2 Andreas Steffen
</pre>
261 1 Andreas Steffen
262 4 Andreas Steffen
h3. Decoding Tree
263 2 Andreas Steffen
<pre>
264 2 Andreas Steffen
#include "bliss_huffman_code.h"
265 2 Andreas Steffen
266 2 Andreas Steffen
static bliss_huffman_code_node_t nodes[] = {
267 2 Andreas Steffen
	{   1,  96,  -1 },  /*   0: */
268 2 Andreas Steffen
	{   2,  93,  -1 },  /*   1: */
269 2 Andreas Steffen
	{   3,   4,  -1 },  /*   2: */
270 2 Andreas Steffen
	{  -1,  -1,  10 },  /*   3: (1, 0)  3 bits */
271 2 Andreas Steffen
	{   5,   8,  -1 },  /*   4: */
272 2 Andreas Steffen
	{   6,   7,  -1 },  /*   5: */
273 2 Andreas Steffen
	{  -1,  -1,  11 },  /*   6: (1, 1)  5 bits */
274 2 Andreas Steffen
	{  -1,  -1,   9 },  /*   7: (1,-1)  5 bits */
275 2 Andreas Steffen
	{   9,  10,  -1 },  /*   8: */
276 2 Andreas Steffen
	{  -1,  -1,  17 },  /*   9: (2, 0)  5 bits */
277 2 Andreas Steffen
	{  11,  92,  -1 },  /*  10: */
278 2 Andreas Steffen
	{  12,  13,  -1 },  /*  11: */
279 2 Andreas Steffen
	{  -1,  -1,  16 },  /*  12: (2,-1)  7 bits */
280 2 Andreas Steffen
	{  14,  89,  -1 },  /*  13: */
281 2 Andreas Steffen
	{  15,  16,  -1 },  /*  14: */
282 2 Andreas Steffen
	{  -1,  -1,  24 },  /*  15: (3, 0)  9 bits */
283 2 Andreas Steffen
	{  17,  86,  -1 },  /*  16: */
284 2 Andreas Steffen
	{  18,  85,  -1 },  /*  17: */
285 2 Andreas Steffen
	{  19,  20,  -1 },  /*  18: */
286 2 Andreas Steffen
	{  -1,  -1,   8 },  /*  19: (1,-2) 12 bits */
287 2 Andreas Steffen
	{  21,  84,  -1 },  /*  20: */
288 2 Andreas Steffen
	{  22,  53,  -1 },  /*  21: */
289 2 Andreas Steffen
	{  23,  38,  -1 },  /*  22: */
290 2 Andreas Steffen
	{  24,  31,  -1 },  /*  23: */
291 2 Andreas Steffen
	{  25,  28,  -1 },  /*  24: */
292 2 Andreas Steffen
	{  26,  27,  -1 },  /*  25: */
293 2 Andreas Steffen
	{  -1,  -1,  15 },  /*  26: (2,-2) 18 bits */
294 2 Andreas Steffen
	{  -1,  -1,  31 },  /*  27: (4, 0) 18 bits */
295 2 Andreas Steffen
	{  29,  30,  -1 },  /*  28: */
296 2 Andreas Steffen
	{  -1,  -1,  32 },  /*  29: (4, 1) 18 bits */
297 2 Andreas Steffen
	{  -1,  -1,  30 },  /*  30: (4,-1) 18 bits */
298 2 Andreas Steffen
	{  32,  35,  -1 },  /*  31: */
299 2 Andreas Steffen
	{  33,  34,  -1 },  /*  32: */
300 2 Andreas Steffen
	{  -1,  -1,  26 },  /*  33: (3, 2) 18 bits */
301 2 Andreas Steffen
	{  -1,  -1,  22 },  /*  34: (3,-2) 18 bits */
302 2 Andreas Steffen
	{  36,  37,  -1 },  /*  35: */
303 2 Andreas Steffen
	{  -1,  -1,  38 },  /*  36: (5, 0) 18 bits */
304 2 Andreas Steffen
	{  -1,  -1,   6 },  /*  37: (0, 3) 18 bits */
305 2 Andreas Steffen
	{  39,  46,  -1 },  /*  38: */
306 2 Andreas Steffen
	{  40,  43,  -1 },  /*  39: */
307 2 Andreas Steffen
	{  41,  42,  -1 },  /*  40: */
308 2 Andreas Steffen
	{  -1,  -1,   0 },  /*  41: (0,-3) 18 bits */
309 2 Andreas Steffen
	{  -1,  -1,  39 },  /*  42: (5, 1) 18 bits */
310 2 Andreas Steffen
	{  44,  45,  -1 },  /*  43: */
311 2 Andreas Steffen
	{  -1,  -1,  37 },  /*  44: (5,-1) 18 bits */
312 2 Andreas Steffen
	{  -1,  -1,  33 },  /*  45: (4, 2) 18 bits */
313 2 Andreas Steffen
	{  47,  50,  -1 },  /*  46: */
314 2 Andreas Steffen
	{  48,  49,  -1 },  /*  47: */
315 2 Andreas Steffen
	{  -1,  -1,  29 },  /*  48: (4,-2) 18 bits */
316 2 Andreas Steffen
	{  -1,  -1,  13 },  /*  49: (1, 3) 18 bits */
317 2 Andreas Steffen
	{  51,  52,  -1 },  /*  50: */
318 2 Andreas Steffen
	{  -1,  -1,   7 },  /*  51: (1,-3) 18 bits */
319 2 Andreas Steffen
	{  -1,  -1,  20 },  /*  52: (2, 3) 18 bits */
320 2 Andreas Steffen
	{  54,  69,  -1 },  /*  53: */
321 2 Andreas Steffen
	{  55,  62,  -1 },  /*  54: */
322 2 Andreas Steffen
	{  56,  59,  -1 },  /*  55: */
323 2 Andreas Steffen
	{  57,  58,  -1 },  /*  56: */
324 2 Andreas Steffen
	{  -1,  -1,  14 },  /*  57: (2,-3) 18 bits */
325 2 Andreas Steffen
	{  -1,  -1,  45 },  /*  58: (6, 0) 18 bits */
326 2 Andreas Steffen
	{  60,  61,  -1 },  /*  59: */
327 2 Andreas Steffen
	{  -1,  -1,  40 },  /*  60: (5, 2) 18 bits */
328 2 Andreas Steffen
	{  -1,  -1,  36 },  /*  61: (5,-2) 18 bits */
329 2 Andreas Steffen
	{  63,  66,  -1 },  /*  62: */
330 2 Andreas Steffen
	{  64,  65,  -1 },  /*  63: */
331 2 Andreas Steffen
	{  -1,  -1,  27 },  /*  64: (3, 3) 18 bits */
332 2 Andreas Steffen
	{  -1,  -1,  21 },  /*  65: (3,-3) 18 bits */
333 2 Andreas Steffen
	{  67,  68,  -1 },  /*  66: */
334 2 Andreas Steffen
	{  -1,  -1,  46 },  /*  67: (6, 1) 18 bits */
335 2 Andreas Steffen
	{  -1,  -1,  44 },  /*  68: (6,-1) 18 bits */
336 2 Andreas Steffen
	{  70,  77,  -1 },  /*  69: */
337 2 Andreas Steffen
	{  71,  74,  -1 },  /*  70: */
338 2 Andreas Steffen
	{  72,  73,  -1 },  /*  71: */
339 2 Andreas Steffen
	{  -1,  -1,  34 },  /*  72: (4, 3) 18 bits */
340 2 Andreas Steffen
	{  -1,  -1,  28 },  /*  73: (4,-3) 18 bits */
341 2 Andreas Steffen
	{  75,  76,  -1 },  /*  74: */
342 2 Andreas Steffen
	{  -1,  -1,  47 },  /*  75: (6, 2) 18 bits */
343 2 Andreas Steffen
	{  -1,  -1,  43 },  /*  76: (6,-2) 18 bits */
344 2 Andreas Steffen
	{  78,  81,  -1 },  /*  77: */
345 2 Andreas Steffen
	{  79,  80,  -1 },  /*  78: */
346 2 Andreas Steffen
	{  -1,  -1,  41 },  /*  79: (5, 3) 18 bits */
347 2 Andreas Steffen
	{  -1,  -1,  35 },  /*  80: (5,-3) 18 bits */
348 2 Andreas Steffen
	{  82,  83,  -1 },  /*  81: */
349 2 Andreas Steffen
	{  -1,  -1,  48 },  /*  82: (6, 3) 18 bits */
350 2 Andreas Steffen
	{  -1,  -1,  42 },  /*  83: (6,-3) 18 bits */
351 2 Andreas Steffen
	{  -1,  -1,  19 },  /*  84: (2, 2) 13 bits */
352 2 Andreas Steffen
	{  -1,  -1,  25 },  /*  85: (3, 1) 11 bits */
353 2 Andreas Steffen
	{  87,  88,  -1 },  /*  86: */
354 2 Andreas Steffen
	{  -1,  -1,  23 },  /*  87: (3,-1) 11 bits */
355 2 Andreas Steffen
	{  -1,  -1,  12 },  /*  88: (1, 2) 11 bits */
356 2 Andreas Steffen
	{  90,  91,  -1 },  /*  89: */
357 2 Andreas Steffen
	{  -1,  -1,   5 },  /*  90: (0, 2)  9 bits */
358 2 Andreas Steffen
	{  -1,  -1,   1 },  /*  91: (0,-2)  9 bits */
359 2 Andreas Steffen
	{  -1,  -1,  18 },  /*  92: (2, 1)  6 bits */
360 2 Andreas Steffen
	{  94,  95,  -1 },  /*  93: */
361 2 Andreas Steffen
	{  -1,  -1,   4 },  /*  94: (0, 1)  3 bits */
362 2 Andreas Steffen
	{  -1,  -1,   2 },  /*  95: (0,-1)  3 bits */
363 2 Andreas Steffen
	{  -1,  -1,   3 },  /*  96: (0, 0)  1 bit  */
364 2 Andreas Steffen
};
365 1 Andreas Steffen
</pre>
366 1 Andreas Steffen
367 4 Andreas Steffen
h3. Encoding Table
368 2 Andreas Steffen
<pre>
369 2 Andreas Steffen
static bliss_huffman_code_tuple_t tuples[] = {
370 2 Andreas Steffen
	{ 59976, 18 },  /*   0: (0,-3) 001110101001001000 */
371 2 Andreas Steffen
	{   119,  9 },  /*   1: (0,-2) 001110111 */
372 2 Andreas Steffen
	{     3,  3 },  /*   2: (0,-1) 011 */
373 2 Andreas Steffen
	{     1,  1 },  /*   3: (0, 0) 1 */
374 2 Andreas Steffen
	{     2,  3 },  /*   4: (0, 1) 010 */
375 2 Andreas Steffen
	{   118,  9 },  /*   5: (0, 2) 001110110 */
376 2 Andreas Steffen
	{ 59975, 18 },  /*   6: (0, 3) 001110101001000111 */
377 2 Andreas Steffen
378 2 Andreas Steffen
	{ 59982, 18 },  /*   7: (1,-3) 001110101001001110 */
379 2 Andreas Steffen
	{   936, 12 },  /*   8: (1,-2) 001110101000 */
380 2 Andreas Steffen
	{     5,  5 },  /*   9: (1,-1) 00101 */
381 2 Andreas Steffen
	{     0,  3 },  /*  10: (1, 0) 000 */
382 2 Andreas Steffen
	{     4,  5 },  /*  11: (1, 1) 00100 */
383 2 Andreas Steffen
	{   471, 11 },  /*  12: (1, 2) 00111010111 */
384 2 Andreas Steffen
	{ 59981, 18 },  /*  13: (1, 3) 001110101001001101 */
385 2 Andreas Steffen
386 2 Andreas Steffen
	{ 59984, 18 },  /*  14: (2,-3) 001110101001010000 */
387 2 Andreas Steffen
	{ 59968, 18 },  /*  15: (2,-2) 001110101001000000 */
388 2 Andreas Steffen
	{    28,  7 },  /*  16: (2,-1) 0011100 */
389 2 Andreas Steffen
	{     6,  5 },  /*  17: (2, 0) 00110 */
390 2 Andreas Steffen
	{    15,  6 },  /*  18: (2, 1) 001111 */
391 2 Andreas Steffen
	{  1875, 13 },  /*  19: (2, 2) 0011101010011 */
392 2 Andreas Steffen
	{ 59983, 18 },  /*  20: (2, 3) 001110101001001111 */
393 2 Andreas Steffen
394 2 Andreas Steffen
	{ 59989, 18 },  /*  21: (3,-3) 001110101001010101 */
395 2 Andreas Steffen
	{ 59973, 18 },  /*  22: (3,-2) 001110101001000101 */
396 2 Andreas Steffen
	{   470, 11 },  /*  23: (3,-1) 00111010110 */
397 2 Andreas Steffen
	{   116,  9 },  /*  24: (3, 0) 001110100 */
398 2 Andreas Steffen
	{   469, 11 },  /*  25: (3, 1) 00111010101 */
399 2 Andreas Steffen
	{ 59972, 18 },  /*  26: (3, 2) 001110101001000100 */
400 2 Andreas Steffen
	{ 59988, 18 },  /*  27: (3, 3) 001110101001010100 */
401 2 Andreas Steffen
402 2 Andreas Steffen
	{ 59993, 18 },  /*  28: (4,-3) 001110101001011001 */
403 2 Andreas Steffen
	{ 59980, 18 },  /*  29: (4,-2) 001110101001001100 */
404 2 Andreas Steffen
	{ 59971, 18 },  /*  30: (4,-1) 001110101001000011 */
405 2 Andreas Steffen
	{ 59969, 18 },  /*  31: (4, 0) 001110101001000001 */
406 2 Andreas Steffen
	{ 59970, 18 },  /*  32: (4, 1) 001110101001000010 */
407 2 Andreas Steffen
	{ 59979, 18 },  /*  33: (4, 2) 001110101001001011 */
408 2 Andreas Steffen
	{ 59992, 18 },  /*  34: (4, 3) 001110101001011000 */
409 2 Andreas Steffen
410 2 Andreas Steffen
	{ 59997, 18 },  /*  35: (5,-3) 001110101001011101 */
411 2 Andreas Steffen
	{ 59987, 18 },  /*  36: (5,-2) 001110101001010011 */
412 2 Andreas Steffen
	{ 59978, 18 },  /*  37: (5,-1) 001110101001001010 */
413 2 Andreas Steffen
	{ 59974, 18 },  /*  38: (5, 0) 001110101001000110 */
414 2 Andreas Steffen
	{ 59977, 18 },  /*  39: (5, 1) 001110101001001001 */
415 2 Andreas Steffen
	{ 59986, 18 },  /*  40: (5, 2) 001110101001010010 */
416 2 Andreas Steffen
	{ 59996, 18 },  /*  41: (5, 3) 001110101001011100 */
417 2 Andreas Steffen
418 2 Andreas Steffen
	{ 59999, 18 },  /*  42: (6,-3) 001110101001011111 */
419 2 Andreas Steffen
	{ 59995, 18 },  /*  43: (6,-2) 001110101001011011 */
420 2 Andreas Steffen
	{ 59991, 18 },  /*  44: (6,-1) 001110101001010111 */
421 2 Andreas Steffen
	{ 59985, 18 },  /*  45: (6, 0) 001110101001010001 */
422 2 Andreas Steffen
	{ 59990, 18 },  /*  46: (6, 1) 001110101001010110 */
423 2 Andreas Steffen
	{ 59994, 18 },  /*  47: (6, 2) 001110101001011010 */
424 2 Andreas Steffen
	{ 59998, 18 },  /*  48: (6, 3) 001110101001011110 */
425 2 Andreas Steffen
};
426 2 Andreas Steffen
427 2 Andreas Steffen
/* code_length = 2.3227 bits/tuple (1190 bits) */
428 2 Andreas Steffen
</pre>
429 2 Andreas Steffen
430 4 Andreas Steffen
h3. Parameter Set
431 2 Andreas Steffen
<pre>
432 2 Andreas Steffen
bliss_huffman_code_t bliss_huffman_code_3 = {
433 2 Andreas Steffen
	.n_z1 = 7,
434 2 Andreas Steffen
	.n_z2 = 4,
435 2 Andreas Steffen
	.tuples = tuples,
436 2 Andreas Steffen
	.nodes  = nodes
437 2 Andreas Steffen
};
438 2 Andreas Steffen
</pre>
439 2 Andreas Steffen
440 1 Andreas Steffen
h2. BLISS-IV Signature Encoding
441 1 Andreas Steffen
442 4 Andreas Steffen
h3. Design Parameters
443 2 Andreas Steffen
<pre>
444 3 Andreas Steffen
/*
445 3 Andreas Steffen
 * Design: sigma = 271
446 3 Andreas Steffen
 *
447 3 Andreas Steffen
 *   i  p_z1[i]
448 3 Andreas Steffen
 *   0  0.6551621276225426         0 ..  256
449 3 Andreas Steffen
 *   1  0.2859860850630749       256 ..  512
450 3 Andreas Steffen
 *   2  0.0542541135599810       512 ..  768
451 3 Andreas Steffen
 *   3  0.0044399624814222       768 .. 1024
452 3 Andreas Steffen
 *   4  0.0001553928373912      1024 .. 1280
453 3 Andreas Steffen
 *   5  0.0000023066278552      1280 .. 1536
454 3 Andreas Steffen
 *   6  0.0000000118077330      1536 .. 1613
455 3 Andreas Steffen
 *
456 3 Andreas Steffen
 *   k  p_z2[k]  dx = 256
457 3 Andreas Steffen
 *  -6  0.0000001026458579   -1663.5 ..-1407.5
458 3 Andreas Steffen
 *  -5  0.0000106295703648   -1407.5 ..-1151.5
459 3 Andreas Steffen
 *  -4  0.0004651193817805   -1151.5 .. -895.5
460 3 Andreas Steffen
 *  -3  0.0086670703658387    -895.5 .. -639.5
461 3 Andreas Steffen
 *  -2  0.0693723939195647    -639.5 .. -383.5
462 3 Andreas Steffen
 *  -1  0.2404908493690626    -383.5 .. -127.5
463 3 Andreas Steffen
 *   0  0.3619876694950614    -127.5 ..  127.5
464 3 Andreas Steffen
 *   1  0.2404908493690626     127.5 ..  383.5
465 3 Andreas Steffen
 *   2  0.0693723939195647     383.5 ..  639.5
466 3 Andreas Steffen
 *   3  0.0086670703658387     639.5 ..  895.5
467 3 Andreas Steffen
 *   4  0.0004651193817805     895.5 .. 1151.5
468 3 Andreas Steffen
 *   5  0.0000106295703648    1151.5 .. 1407.5
469 3 Andreas Steffen
 *   6  0.0000001026458579    1407.5 .. 1663.5
470 3 Andreas Steffen
 *
471 3 Andreas Steffen
 *  (i, k)  p
472 3 Andreas Steffen
 *  (0,-6)  0.0000000672496787
473 3 Andreas Steffen
 *  (0,-5)  0.0000069640919359
474 3 Andreas Steffen
 *  (0,-4)  0.0003047286037658
475 3 Andreas Steffen
 *  (0,-3)  0.0056783362611372
476 3 Andreas Steffen
 *  (0,-2)  0.0454501651986111
477 3 Andreas Steffen
 *  (0,-1)  0.1575604965463875
478 3 Andreas Steffen
 *  (0, 0)  0.2371606117195102
479 3 Andreas Steffen
 *  (0, 1)  0.1575604965463875
480 3 Andreas Steffen
 *  (0, 2)  0.0454501651986111
481 3 Andreas Steffen
 *  (0, 3)  0.0056783362611372
482 3 Andreas Steffen
 *  (0, 4)  0.0003047286037658
483 3 Andreas Steffen
 *  (0, 5)  0.0000069640919359
484 3 Andreas Steffen
 *  (0, 6)  0.0000000672496787
485 3 Andreas Steffen
 *
486 3 Andreas Steffen
 *  (1,-6)  0.0000000293552870
487 3 Andreas Steffen
 *  (1,-5)  0.0000030399092145
488 3 Andreas Steffen
 *  (1,-4)  0.0001330176710824
489 3 Andreas Steffen
 *  (1,-3)  0.0024786615228924
490 3 Andreas Steffen
 *  (1,-2)  0.0198395393485098
491 3 Andreas Steffen
 *  (1,-1)  0.0687770365045519
492 3 Andreas Steffen
 *  (1, 0)  0.1035234364399989
493 3 Andreas Steffen
 *  (1, 1)  0.0687770365045519
494 3 Andreas Steffen
 *  (1, 2)  0.0198395393485098
495 3 Andreas Steffen
 *  (1, 3)  0.0024786615228924
496 3 Andreas Steffen
 *  (1, 4)  0.0001330176710824
497 3 Andreas Steffen
 *  (1, 5)  0.0000030399092145
498 3 Andreas Steffen
 *  (1, 6)  0.0000000293552870
499 3 Andreas Steffen
 *
500 3 Andreas Steffen
 *  (2,-6)  0.0000000055689600
501 3 Andreas Steffen
 *  (2,-5)  0.0000005766979177
502 3 Andreas Steffen
 *  (2,-4)  0.0000252346397581
503 3 Andreas Steffen
 *  (2,-3)  0.0004702242198606
504 3 Andreas Steffen
 *  (2,-2)  0.0037637377376398
505 3 Andreas Steffen
 *  (2,-1)  0.0130476178518054
506 3 Andreas Steffen
 *  (2, 0)  0.0196393201280979
507 3 Andreas Steffen
 *  (2, 1)  0.0130476178518054
508 3 Andreas Steffen
 *  (2, 2)  0.0037637377376398
509 3 Andreas Steffen
 *  (2, 3)  0.0004702242198606
510 3 Andreas Steffen
 *  (2, 4)  0.0000252346397581
511 3 Andreas Steffen
 *  (2, 5)  0.0000005766979177
512 3 Andreas Steffen
 *  (2, 6)  0.0000000055689600
513 3 Andreas Steffen
 *
514 3 Andreas Steffen
 *  (3,-6)  0.0000000004557438
515 3 Andreas Steffen
 *  (3,-5)  0.0000000471948936
516 3 Andreas Steffen
 *  (3,-4)  0.0000020651126045
517 3 Andreas Steffen
 *  (3,-3)  0.0000384814672482
518 3 Andreas Steffen
 *  (3,-2)  0.0003080108262493
519 3 Andreas Steffen
 *  (3,-1)  0.0010677703483240
520 3 Andreas Steffen
 *  (3, 0)  0.0016072116712955
521 3 Andreas Steffen
 *  (3, 1)  0.0010677703483240
522 3 Andreas Steffen
 *  (3, 2)  0.0003080108262493
523 3 Andreas Steffen
 *  (3, 3)  0.0000384814672482
524 3 Andreas Steffen
 *  (3, 4)  0.0000020651126045
525 3 Andreas Steffen
 *  (3, 5)  0.0000000471948936
526 3 Andreas Steffen
 *  (3, 6)  0.0000000004557438
527 3 Andreas Steffen
 *
528 3 Andreas Steffen
 *  (4,-6)  0.0000000000159504
529 3 Andreas Steffen
 *  (4,-5)  0.0000000016517591
530 3 Andreas Steffen
 *  (4,-4)  0.0000000722762205
531 3 Andreas Steffen
 *  (4,-3)  0.0000013468006560
532 3 Andreas Steffen
 *  (4,-2)  0.0000107799731278
533 3 Andreas Steffen
 *  (4,-1)  0.0000373705554501
534 3 Andreas Steffen
 *  (4, 0)  0.0000562502910635
535 3 Andreas Steffen
 *  (4, 1)  0.0000373705554501
536 3 Andreas Steffen
 *  (4, 2)  0.0000107799731278
537 3 Andreas Steffen
 *  (4, 3)  0.0000013468006560
538 3 Andreas Steffen
 *  (4, 4)  0.0000000722762205
539 3 Andreas Steffen
 *  (4, 5)  0.0000000016517591
540 3 Andreas Steffen
 *  (4, 6)  0.0000000000159504
541 3 Andreas Steffen
 *
542 3 Andreas Steffen
 *  (5,-6)  0.0000000000002368
543 3 Andreas Steffen
 *  (5,-5)  0.0000000000245185
544 3 Andreas Steffen
 *  (5,-4)  0.0000000010728573
545 3 Andreas Steffen
 *  (5,-3)  0.0000000199917059
546 3 Andreas Steffen
 *  (5,-2)  0.0000001600162962
547 3 Andreas Steffen
 *  (5,-1)  0.0000005547228921
548 3 Andreas Steffen
 *  (5, 0)  0.0000008349708417
549 3 Andreas Steffen
 *  (5, 1)  0.0000005547228921
550 3 Andreas Steffen
 *  (5, 2)  0.0000001600162962
551 3 Andreas Steffen
 *  (5, 3)  0.0000000199917059
552 3 Andreas Steffen
 *  (5, 4)  0.0000000010728573
553 3 Andreas Steffen
 *  (5, 5)  0.0000000000245185
554 3 Andreas Steffen
 *  (5, 6)  0.0000000000002368
555 3 Andreas Steffen
 *
556 3 Andreas Steffen
 *  (6,-6)  0.0000000000000012
557 3 Andreas Steffen
 *  (6,-5)  0.0000000000001255
558 3 Andreas Steffen
 *  (6,-4)  0.0000000000054920
559 3 Andreas Steffen
 *  (6,-3)  0.0000000001023385
560 3 Andreas Steffen
 *  (6,-2)  0.0000000008191307
561 3 Andreas Steffen
 *  (6,-1)  0.0000000028396517
562 3 Andreas Steffen
 *  (6, 0)  0.0000000042742538
563 3 Andreas Steffen
 *  (6, 1)  0.0000000028396517
564 3 Andreas Steffen
 *  (6, 2)  0.0000000008191307
565 3 Andreas Steffen
 *  (6, 3)  0.0000000001023385
566 3 Andreas Steffen
 *  (6, 4)  0.0000000000054920
567 3 Andreas Steffen
 *  (6, 5)  0.0000000000001255
568 3 Andreas Steffen
 *  (6, 6)  0.0000000000000012
569 3 Andreas Steffen
 *
570 3 Andreas Steffen
 *  p_sum   1.0000000000000011
571 3 Andreas Steffen
 *
572 3 Andreas Steffen
 * entropy = 3.3640 bits/tuple (1722 bits)
573 3 Andreas Steffen
 */
574 2 Andreas Steffen
</pre>
575 2 Andreas Steffen
576 4 Andreas Steffen
h3. Decoding Tree
577 1 Andreas Steffen
<pre>
578 3 Andreas Steffen
#include "bliss_huffman_code.h"
579 1 Andreas Steffen
580 3 Andreas Steffen
static bliss_huffman_code_node_t nodes[] = {
581 3 Andreas Steffen
	{   1, 160,  -1 },  /*   0: */
582 3 Andreas Steffen
	{   2,   5,  -1 },  /*   1: */
583 3 Andreas Steffen
	{   3,   4,  -1 },  /*   2: */
584 3 Andreas Steffen
	{  -1,  -1,   7 },  /*   3: (0, 1)  3 bits */
585 3 Andreas Steffen
	{  -1,  -1,   5 },  /*   4: (0,-1)  3 bits */
586 3 Andreas Steffen
	{   6, 157,  -1 },  /*   5: */
587 3 Andreas Steffen
	{   7, 156,  -1 },  /*   6: */
588 3 Andreas Steffen
	{   8,  11,  -1 },  /*   7: */
589 3 Andreas Steffen
	{   9,  10,  -1 },  /*   8: */
590 3 Andreas Steffen
	{  -1,  -1,  17 },  /*   9: (1,-2)  6 bits */
591 3 Andreas Steffen
	{  -1,  -1,  32 },  /*  10: (2, 0)  6 bits */
592 3 Andreas Steffen
	{  12, 155,  -1 },  /*  11: */
593 3 Andreas Steffen
	{  13,  18,  -1 },  /*  12: */
594 3 Andreas Steffen
	{  14,  15,  -1 },  /*  13: */
595 3 Andreas Steffen
	{  -1,  -1,   3 },  /*  14: (0,-3)  8 bits */
596 3 Andreas Steffen
	{  16,  17,  -1 },  /*  15: */
597 3 Andreas Steffen
	{  -1,  -1,  22 },  /*  16: (1, 3)  9 bits */
598 3 Andreas Steffen
	{  -1,  -1,  16 },  /*  17: (1,-3)  9 bits */
599 3 Andreas Steffen
	{  19, 154,  -1 },  /*  18: */
600 3 Andreas Steffen
	{  20,  23,  -1 },  /*  19: */
601 3 Andreas Steffen
	{  21,  22,  -1 },  /*  20: */
602 3 Andreas Steffen
	{  -1,  -1,  46 },  /*  21: (3, 1) 10 bits */
603 3 Andreas Steffen
	{  -1,  -1,  44 },  /*  22: (3,-1) 10 bits */
604 3 Andreas Steffen
	{  24, 151,  -1 },  /*  23: */
605 3 Andreas Steffen
	{  25,  88,  -1 },  /*  24: */
606 3 Andreas Steffen
	{  26,  57,  -1 },  /*  25: */
607 3 Andreas Steffen
	{  27,  42,  -1 },  /*  26: */
608 3 Andreas Steffen
	{  28,  35,  -1 },  /*  27: */
609 3 Andreas Steffen
	{  29,  32,  -1 },  /*  28: */
610 3 Andreas Steffen
	{  30,  31,  -1 },  /*  29: */
611 3 Andreas Steffen
	{  -1,  -1,   2 },  /*  30: (0,-4) 16 bits */
612 3 Andreas Steffen
	{  -1,  -1,  23 },  /*  31: (1, 4) 16 bits */
613 3 Andreas Steffen
	{  33,  34,  -1 },  /*  32: */
614 3 Andreas Steffen
	{  -1,  -1,  15 },  /*  33: (1,-4) 16 bits */
615 3 Andreas Steffen
	{  -1,  -1,  58 },  /*  34: (4, 0) 16 bits */
616 3 Andreas Steffen
	{  36,  39,  -1 },  /*  35: */
617 3 Andreas Steffen
	{  37,  38,  -1 },  /*  36: */
618 3 Andreas Steffen
	{  -1,  -1,  48 },  /*  37: (3, 3) 16 bits */
619 3 Andreas Steffen
	{  -1,  -1,  42 },  /*  38: (3,-3) 16 bits */
620 3 Andreas Steffen
	{  40,  41,  -1 },  /*  39: */
621 3 Andreas Steffen
	{  -1,  -1,  59 },  /*  40: (4, 1) 16 bits */
622 3 Andreas Steffen
	{  -1,  -1,  57 },  /*  41: (4,-1) 16 bits */
623 3 Andreas Steffen
	{  43,  50,  -1 },  /*  42: */
624 3 Andreas Steffen
	{  44,  47,  -1 },  /*  43: */
625 3 Andreas Steffen
	{  45,  46,  -1 },  /*  44: */
626 3 Andreas Steffen
	{  -1,  -1,  36 },  /*  45: (2, 4) 16 bits */
627 3 Andreas Steffen
	{  -1,  -1,  28 },  /*  46: (2,-4) 16 bits */
628 3 Andreas Steffen
	{  48,  49,  -1 },  /*  47: */
629 3 Andreas Steffen
	{  -1,  -1,  60 },  /*  48: (4, 2) 16 bits */
630 3 Andreas Steffen
	{  -1,  -1,  56 },  /*  49: (4,-2) 16 bits */
631 3 Andreas Steffen
	{  51,  54,  -1 },  /*  50: */
632 3 Andreas Steffen
	{  52,  53,  -1 },  /*  51: */
633 3 Andreas Steffen
	{  -1,  -1,  11 },  /*  52: (0, 5) 16 bits */
634 3 Andreas Steffen
	{  -1,  -1,   1 },  /*  53: (0,-5) 16 bits */
635 3 Andreas Steffen
	{  55,  56,  -1 },  /*  54: */
636 3 Andreas Steffen
	{  -1,  -1,  24 },  /*  55: (1, 5) 16 bits */
637 3 Andreas Steffen
	{  -1,  -1,  14 },  /*  56: (1,-5) 16 bits */
638 3 Andreas Steffen
	{  58,  73,  -1 },  /*  57: */
639 3 Andreas Steffen
	{  59,  66,  -1 },  /*  58: */
640 3 Andreas Steffen
	{  60,  63,  -1 },  /*  59: */
641 3 Andreas Steffen
	{  61,  62,  -1 },  /*  60: */
642 3 Andreas Steffen
	{  -1,  -1,  49 },  /*  61: (3, 4) 16 bits */
643 3 Andreas Steffen
	{  -1,  -1,  41 },  /*  62: (3,-4) 16 bits */
644 3 Andreas Steffen
	{  64,  65,  -1 },  /*  63: */
645 3 Andreas Steffen
	{  -1,  -1,  61 },  /*  64: (4, 3) 16 bits */
646 3 Andreas Steffen
	{  -1,  -1,  55 },  /*  65: (4,-3) 16 bits */
647 3 Andreas Steffen
	{  67,  70,  -1 },  /*  66: */
648 3 Andreas Steffen
	{  68,  69,  -1 },  /*  67: */
649 3 Andreas Steffen
	{  -1,  -1,  71 },  /*  68: (5, 0) 16 bits */
650 3 Andreas Steffen
	{  -1,  -1,  37 },  /*  69: (2, 5) 16 bits */
651 3 Andreas Steffen
	{  71,  72,  -1 },  /*  70: */
652 3 Andreas Steffen
	{  -1,  -1,  27 },  /*  71: (2,-5) 16 bits */
653 3 Andreas Steffen
	{  -1,  -1,  72 },  /*  72: (5, 1) 16 bits */
654 3 Andreas Steffen
	{  74,  81,  -1 },  /*  73: */
655 3 Andreas Steffen
	{  75,  78,  -1 },  /*  74: */
656 3 Andreas Steffen
	{  76,  77,  -1 },  /*  75: */
657 3 Andreas Steffen
	{  -1,  -1,  70 },  /*  76: (5,-1) 16 bits */
658 3 Andreas Steffen
	{  -1,  -1,  73 },  /*  77: (5, 2) 16 bits */
659 3 Andreas Steffen
	{  79,  80,  -1 },  /*  78: */
660 3 Andreas Steffen
	{  -1,  -1,  69 },  /*  79: (5,-2) 16 bits */
661 3 Andreas Steffen
	{  -1,  -1,  62 },  /*  80: (4, 4) 16 bits */
662 3 Andreas Steffen
	{  82,  85,  -1 },  /*  81: */
663 3 Andreas Steffen
	{  83,  84,  -1 },  /*  82: */
664 3 Andreas Steffen
	{  -1,  -1,  54 },  /*  83: (4,-4) 16 bits */
665 3 Andreas Steffen
	{  -1,  -1,  12 },  /*  84: (0, 6) 16 bits */
666 3 Andreas Steffen
	{  86,  87,  -1 },  /*  85: */
667 3 Andreas Steffen
	{  -1,  -1,   0 },  /*  86: (0,-6) 16 bits */
668 3 Andreas Steffen
	{  -1,  -1,  50 },  /*  87: (3, 5) 16 bits */
669 3 Andreas Steffen
	{  89, 120,  -1 },  /*  88: */
670 3 Andreas Steffen
	{  90, 105,  -1 },  /*  89: */
671 3 Andreas Steffen
	{  91,  98,  -1 },  /*  90: */
672 3 Andreas Steffen
	{  92,  95,  -1 },  /*  91: */
673 3 Andreas Steffen
	{  93,  94,  -1 },  /*  92: */
674 3 Andreas Steffen
	{  -1,  -1,  40 },  /*  93: (3,-5) 16 bits */
675 3 Andreas Steffen
	{  -1,  -1,  25 },  /*  94: (1, 6) 16 bits */
676 3 Andreas Steffen
	{  96,  97,  -1 },  /*  95: */
677 3 Andreas Steffen
	{  -1,  -1,  13 },  /*  96: (1,-6) 16 bits */
678 3 Andreas Steffen
	{  -1,  -1,  74 },  /*  97: (5, 3) 16 bits */
679 3 Andreas Steffen
	{  99, 102,  -1 },  /*  98: */
680 3 Andreas Steffen
	{ 100, 101,  -1 },  /*  99: */
681 3 Andreas Steffen
	{  -1,  -1,  68 },  /* 100: (5,-3) 16 bits */
682 3 Andreas Steffen
	{  -1,  -1,  38 },  /* 101: (2, 6) 16 bits */
683 3 Andreas Steffen
	{ 103, 104,  -1 },  /* 102: */
684 3 Andreas Steffen
	{  -1,  -1,  26 },  /* 103: (2,-6) 16 bits */
685 3 Andreas Steffen
	{  -1,  -1,  84 },  /* 104: (6, 0) 16 bits */
686 3 Andreas Steffen
	{ 106, 113,  -1 },  /* 105: */
687 3 Andreas Steffen
	{ 107, 110,  -1 },  /* 106: */
688 3 Andreas Steffen
	{ 108, 109,  -1 },  /* 107: */
689 3 Andreas Steffen
	{  -1,  -1,  85 },  /* 108: (6, 1) 16 bits */
690 3 Andreas Steffen
	{  -1,  -1,  83 },  /* 109: (6,-1) 16 bits */
691 3 Andreas Steffen
	{ 111, 112,  -1 },  /* 110: */
692 3 Andreas Steffen
	{  -1,  -1,  63 },  /* 111: (4, 5) 16 bits */
693 3 Andreas Steffen
	{  -1,  -1,  53 },  /* 112: (4,-5) 16 bits */
694 3 Andreas Steffen
	{ 114, 117,  -1 },  /* 113: */
695 3 Andreas Steffen
	{ 115, 116,  -1 },  /* 114: */
696 3 Andreas Steffen
	{  -1,  -1,  75 },  /* 115: (5, 4) 16 bits */
697 3 Andreas Steffen
	{  -1,  -1,  67 },  /* 116: (5,-4) 16 bits */
698 3 Andreas Steffen
	{ 118, 119,  -1 },  /* 117: */
699 3 Andreas Steffen
	{  -1,  -1,  86 },  /* 118: (6, 2) 16 bits */
700 3 Andreas Steffen
	{  -1,  -1,  82 },  /* 119: (6,-2) 16 bits */
701 3 Andreas Steffen
	{ 121, 136,  -1 },  /* 120: */
702 3 Andreas Steffen
	{ 122, 129,  -1 },  /* 121: */
703 3 Andreas Steffen
	{ 123, 126,  -1 },  /* 122: */
704 3 Andreas Steffen
	{ 124, 125,  -1 },  /* 123: */
705 3 Andreas Steffen
	{  -1,  -1,  51 },  /* 124: (3, 6) 16 bits */
706 3 Andreas Steffen
	{  -1,  -1,  39 },  /* 125: (3,-6) 16 bits */
707 3 Andreas Steffen
	{ 127, 128,  -1 },  /* 126: */
708 3 Andreas Steffen
	{  -1,  -1,  87 },  /* 127: (6, 3) 16 bits */
709 3 Andreas Steffen
	{  -1,  -1,  81 },  /* 128: (6,-3) 16 bits */
710 3 Andreas Steffen
	{ 130, 133,  -1 },  /* 129: */
711 3 Andreas Steffen
	{ 131, 132,  -1 },  /* 130: */
712 3 Andreas Steffen
	{  -1,  -1,  76 },  /* 131: (5, 5) 16 bits */
713 3 Andreas Steffen
	{  -1,  -1,  66 },  /* 132: (5,-5) 16 bits */
714 3 Andreas Steffen
	{ 134, 135,  -1 },  /* 133: */
715 3 Andreas Steffen
	{  -1,  -1,  64 },  /* 134: (4, 6) 16 bits */
716 3 Andreas Steffen
	{  -1,  -1,  52 },  /* 135: (4,-6) 16 bits */
717 3 Andreas Steffen
	{ 137, 144,  -1 },  /* 136: */
718 3 Andreas Steffen
	{ 138, 141,  -1 },  /* 137: */
719 3 Andreas Steffen
	{ 139, 140,  -1 },  /* 138: */
720 3 Andreas Steffen
	{  -1,  -1,  88 },  /* 139: (6, 4) 16 bits */
721 3 Andreas Steffen
	{  -1,  -1,  80 },  /* 140: (6,-4) 16 bits */
722 3 Andreas Steffen
	{ 142, 143,  -1 },  /* 141: */
723 3 Andreas Steffen
	{  -1,  -1,  77 },  /* 142: (5, 6) 16 bits */
724 3 Andreas Steffen
	{  -1,  -1,  65 },  /* 143: (5,-6) 16 bits */
725 3 Andreas Steffen
	{ 145, 148,  -1 },  /* 144: */
726 3 Andreas Steffen
	{ 146, 147,  -1 },  /* 145: */
727 3 Andreas Steffen
	{  -1,  -1,  89 },  /* 146: (6, 5) 16 bits */
728 3 Andreas Steffen
	{  -1,  -1,  79 },  /* 147: (6,-5) 16 bits */
729 3 Andreas Steffen
	{ 149, 150,  -1 },  /* 148: */
730 3 Andreas Steffen
	{  -1,  -1,  90 },  /* 149: (6, 6) 16 bits */
731 3 Andreas Steffen
	{  -1,  -1,  78 },  /* 150: (6,-6) 16 bits */
732 3 Andreas Steffen
	{ 152, 153,  -1 },  /* 151: */
733 3 Andreas Steffen
	{  -1,  -1,  29 },  /* 152: (2,-3) 11 bits */
734 3 Andreas Steffen
	{  -1,  -1,  47 },  /* 153: (3, 2) 11 bits */
735 3 Andreas Steffen
	{  -1,  -1,  34 },  /* 154: (2, 2)  8 bits */
736 3 Andreas Steffen
	{  -1,  -1,  33 },  /* 155: (2, 1)  6 bits */
737 3 Andreas Steffen
	{  -1,  -1,  20 },  /* 156: (1, 1)  4 bits */
738 3 Andreas Steffen
	{ 158, 159,  -1 },  /* 157: */
739 3 Andreas Steffen
	{  -1,  -1,  18 },  /* 158: (1,-1)  4 bits */
740 3 Andreas Steffen
	{  -1,  -1,   8 },  /* 159: (0, 2)  4 bits */
741 3 Andreas Steffen
	{ 161, 162,  -1 },  /* 160: */
742 3 Andreas Steffen
	{  -1,  -1,   6 },  /* 161: (0, 0)  2 bits */
743 3 Andreas Steffen
	{ 163, 164,  -1 },  /* 162: */
744 3 Andreas Steffen
	{  -1,  -1,  19 },  /* 163: (1, 0)  3 bits */
745 3 Andreas Steffen
	{ 165, 166,  -1 },  /* 164: */
746 3 Andreas Steffen
	{  -1,  -1,   4 },  /* 165: (0,-2)  4 bits */
747 3 Andreas Steffen
	{ 167, 180,  -1 },  /* 166: */
748 3 Andreas Steffen
	{ 168, 169,  -1 },  /* 167: */
749 3 Andreas Steffen
	{  -1,  -1,  31 },  /* 168: (2,-1)  6 bits */
750 3 Andreas Steffen
	{ 170, 179,  -1 },  /* 169: */
751 3 Andreas Steffen
	{ 171, 172,  -1 },  /* 170: */
752 3 Andreas Steffen
	{  -1,  -1,  30 },  /* 171: (2,-2)  8 bits */
753 3 Andreas Steffen
	{ 173, 174,  -1 },  /* 172: */
754 3 Andreas Steffen
	{  -1,  -1,  45 },  /* 173: (3, 0)  9 bits */
755 3 Andreas Steffen
	{ 175, 178,  -1 },  /* 174: */
756 3 Andreas Steffen
	{ 176, 177,  -1 },  /* 175: */
757 3 Andreas Steffen
	{  -1,  -1,  43 },  /* 176: (3,-2) 11 bits */
758 3 Andreas Steffen
	{  -1,  -1,  10 },  /* 177: (0, 4) 11 bits */
759 3 Andreas Steffen
	{  -1,  -1,  35 },  /* 178: (2, 3) 10 bits */
760 3 Andreas Steffen
	{  -1,  -1,   9 },  /* 179: (0, 3)  7 bits */
761 3 Andreas Steffen
	{  -1,  -1,  21 },  /* 180: (1, 2)  5 bits */
762 3 Andreas Steffen
};
763 2 Andreas Steffen
</pre>
764 2 Andreas Steffen
765 4 Andreas Steffen
h3. Encoding Table
766 1 Andreas Steffen
<pre>
767 3 Andreas Steffen
static bliss_huffman_code_tuple_t tuples[] = {
768 3 Andreas Steffen
	{ 19102, 16 },  /*   0: (0,-6) 0100101010011110 */
769 3 Andreas Steffen
	{ 19085, 16 },  /*   1: (0,-5) 0100101010001101 */
770 3 Andreas Steffen
	{ 19072, 16 },  /*   2: (0,-4) 0100101010000000 */
771 3 Andreas Steffen
	{    72,  8 },  /*   3: (0,-3) 01001000 */
772 3 Andreas Steffen
	{    14,  4 },  /*   4: (0,-2) 1110 */
773 3 Andreas Steffen
	{     1,  3 },  /*   5: (0,-1) 001 */
774 3 Andreas Steffen
	{     2,  2 },  /*   6: (0, 0) 10 */
775 3 Andreas Steffen
	{     0,  3 },  /*   7: (0, 1) 000 */
776 3 Andreas Steffen
	{     7,  4 },  /*   8: (0, 2) 0111 */
777 3 Andreas Steffen
	{   123,  7 },  /*   9: (0, 3) 1111011 */
778 3 Andreas Steffen
	{  1965, 11 },  /*  10: (0, 4) 11110101101 */
779 3 Andreas Steffen
	{ 19084, 16 },  /*  11: (0, 5) 0100101010001100 */
780 3 Andreas Steffen
	{ 19101, 16 },  /*  12: (0, 6) 0100101010011101 */
781 1 Andreas Steffen
782 3 Andreas Steffen
	{ 19106, 16 },  /*  13: (1,-6) 0100101010100010 */
783 3 Andreas Steffen
	{ 19087, 16 },  /*  14: (1,-5) 0100101010001111 */
784 3 Andreas Steffen
	{ 19074, 16 },  /*  15: (1,-4) 0100101010000010 */
785 3 Andreas Steffen
	{   147,  9 },  /*  16: (1,-3) 010010011 */
786 3 Andreas Steffen
	{    16,  6 },  /*  17: (1,-2) 010000 */
787 3 Andreas Steffen
	{     6,  4 },  /*  18: (1,-1) 0110 */
788 3 Andreas Steffen
	{     6,  3 },  /*  19: (1, 0) 110 */
789 3 Andreas Steffen
	{     5,  4 },  /*  20: (1, 1) 0101 */
790 3 Andreas Steffen
	{    31,  5 },  /*  21: (1, 2) 11111 */
791 3 Andreas Steffen
	{   146,  9 },  /*  22: (1, 3) 010010010 */
792 3 Andreas Steffen
	{ 19073, 16 },  /*  23: (1, 4) 0100101010000001 */
793 3 Andreas Steffen
	{ 19086, 16 },  /*  24: (1, 5) 0100101010001110 */
794 3 Andreas Steffen
	{ 19105, 16 },  /*  25: (1, 6) 0100101010100001 */
795 3 Andreas Steffen
796 3 Andreas Steffen
	{ 19110, 16 },  /*  26: (2,-6) 0100101010100110 */
797 3 Andreas Steffen
	{ 19094, 16 },  /*  27: (2,-5) 0100101010010110 */
798 3 Andreas Steffen
	{ 19081, 16 },  /*  28: (2,-4) 0100101010001001 */
799 3 Andreas Steffen
	{   598, 11 },  /*  29: (2,-3) 01001010110 */
800 3 Andreas Steffen
	{   244,  8 },  /*  30: (2,-2) 11110100 */
801 3 Andreas Steffen
	{    60,  6 },  /*  31: (2,-1) 111100 */
802 3 Andreas Steffen
	{    17,  6 },  /*  32: (2, 0) 010001 */
803 3 Andreas Steffen
	{    19,  6 },  /*  33: (2, 1) 010011 */
804 3 Andreas Steffen
	{    75,  8 },  /*  34: (2, 2) 01001011 */
805 3 Andreas Steffen
	{   983, 10 },  /*  35: (2, 3) 1111010111 */
806 3 Andreas Steffen
	{ 19080, 16 },  /*  36: (2, 4) 0100101010001000 */
807 3 Andreas Steffen
	{ 19093, 16 },  /*  37: (2, 5) 0100101010010101 */
808 3 Andreas Steffen
	{ 19109, 16 },  /*  38: (2, 6) 0100101010100101 */
809 3 Andreas Steffen
810 3 Andreas Steffen
	{ 19121, 16 },  /*  39: (3,-6) 0100101010110001 */
811 3 Andreas Steffen
	{ 19104, 16 },  /*  40: (3,-5) 0100101010100000 */
812 3 Andreas Steffen
	{ 19089, 16 },  /*  41: (3,-4) 0100101010010001 */
813 3 Andreas Steffen
	{ 19077, 16 },  /*  42: (3,-3) 0100101010000101 */
814 3 Andreas Steffen
	{  1964, 11 },  /*  43: (3,-2) 11110101100 */
815 3 Andreas Steffen
	{   297, 10 },  /*  44: (3,-1) 0100101001 */
816 3 Andreas Steffen
	{   490,  9 },  /*  45: (3, 0) 111101010 */
817 3 Andreas Steffen
	{   296, 10 },  /*  46: (3, 1) 0100101000 */
818 3 Andreas Steffen
	{   599, 11 },  /*  47: (3, 2) 01001010111 */
819 3 Andreas Steffen
	{ 19076, 16 },  /*  48: (3, 3) 0100101010000100 */
820 3 Andreas Steffen
	{ 19088, 16 },  /*  49: (3, 4) 0100101010010000 */
821 3 Andreas Steffen
	{ 19103, 16 },  /*  50: (3, 5) 0100101010011111 */
822 3 Andreas Steffen
	{ 19120, 16 },  /*  51: (3, 6) 0100101010110000 */
823 3 Andreas Steffen
824 3 Andreas Steffen
	{ 19127, 16 },  /*  52: (4,-6) 0100101010110111 */
825 3 Andreas Steffen
	{ 19115, 16 },  /*  53: (4,-5) 0100101010101011 */
826 3 Andreas Steffen
	{ 19100, 16 },  /*  54: (4,-4) 0100101010011100 */
827 3 Andreas Steffen
	{ 19091, 16 },  /*  55: (4,-3) 0100101010010011 */
828 3 Andreas Steffen
	{ 19083, 16 },  /*  56: (4,-2) 0100101010001011 */
829 3 Andreas Steffen
	{ 19079, 16 },  /*  57: (4,-1) 0100101010000111 */
830 3 Andreas Steffen
	{ 19075, 16 },  /*  58: (4, 0) 0100101010000011 */
831 3 Andreas Steffen
	{ 19078, 16 },  /*  59: (4, 1) 0100101010000110 */
832 3 Andreas Steffen
	{ 19082, 16 },  /*  60: (4, 2) 0100101010001010 */
833 3 Andreas Steffen
	{ 19090, 16 },  /*  61: (4, 3) 0100101010010010 */
834 3 Andreas Steffen
	{ 19099, 16 },  /*  62: (4, 4) 0100101010011011 */
835 3 Andreas Steffen
	{ 19114, 16 },  /*  63: (4, 5) 0100101010101010 */
836 3 Andreas Steffen
	{ 19126, 16 },  /*  64: (4, 6) 0100101010110110 */
837 3 Andreas Steffen
838 3 Andreas Steffen
	{ 19131, 16 },  /*  65: (5,-6) 0100101010111011 */
839 3 Andreas Steffen
	{ 19125, 16 },  /*  66: (5,-5) 0100101010110101 */
840 3 Andreas Steffen
	{ 19117, 16 },  /*  67: (5,-4) 0100101010101101 */
841 3 Andreas Steffen
	{ 19108, 16 },  /*  68: (5,-3) 0100101010100100 */
842 3 Andreas Steffen
	{ 19098, 16 },  /*  69: (5,-2) 0100101010011010 */
843 3 Andreas Steffen
	{ 19096, 16 },  /*  70: (5,-1) 0100101010011000 */
844 3 Andreas Steffen
	{ 19092, 16 },  /*  71: (5, 0) 0100101010010100 */
845 3 Andreas Steffen
	{ 19095, 16 },  /*  72: (5, 1) 0100101010010111 */
846 3 Andreas Steffen
	{ 19097, 16 },  /*  73: (5, 2) 0100101010011001 */
847 3 Andreas Steffen
	{ 19107, 16 },  /*  74: (5, 3) 0100101010100011 */
848 3 Andreas Steffen
	{ 19116, 16 },  /*  75: (5, 4) 0100101010101100 */
849 3 Andreas Steffen
	{ 19124, 16 },  /*  76: (5, 5) 0100101010110100 */
850 3 Andreas Steffen
	{ 19130, 16 },  /*  77: (5, 6) 0100101010111010 */
851 3 Andreas Steffen
852 3 Andreas Steffen
	{ 19135, 16 },  /*  78: (6,-6) 0100101010111111 */
853 3 Andreas Steffen
	{ 19133, 16 },  /*  79: (6,-5) 0100101010111101 */
854 3 Andreas Steffen
	{ 19129, 16 },  /*  80: (6,-4) 0100101010111001 */
855 3 Andreas Steffen
	{ 19123, 16 },  /*  81: (6,-3) 0100101010110011 */
856 3 Andreas Steffen
	{ 19119, 16 },  /*  82: (6,-2) 0100101010101111 */
857 3 Andreas Steffen
	{ 19113, 16 },  /*  83: (6,-1) 0100101010101001 */
858 3 Andreas Steffen
	{ 19111, 16 },  /*  84: (6, 0) 0100101010100111 */
859 3 Andreas Steffen
	{ 19112, 16 },  /*  85: (6, 1) 0100101010101000 */
860 3 Andreas Steffen
	{ 19118, 16 },  /*  86: (6, 2) 0100101010101110 */
861 3 Andreas Steffen
	{ 19122, 16 },  /*  87: (6, 3) 0100101010110010 */
862 3 Andreas Steffen
	{ 19128, 16 },  /*  88: (6, 4) 0100101010111000 */
863 3 Andreas Steffen
	{ 19132, 16 },  /*  89: (6, 5) 0100101010111100 */
864 3 Andreas Steffen
	{ 19134, 16 },  /*  90: (6, 6) 0100101010111110 */
865 3 Andreas Steffen
};
866 3 Andreas Steffen
867 3 Andreas Steffen
/* code_length = 3.3967 bits/tuple (1740 bits) */
868 2 Andreas Steffen
</pre>
869 2 Andreas Steffen
870 4 Andreas Steffen
h3. Parameter Set
871 1 Andreas Steffen
<pre>
872 3 Andreas Steffen
bliss_huffman_code_t bliss_huffman_code_4 = {
873 3 Andreas Steffen
	.n_z1 = 7,
874 3 Andreas Steffen
	.n_z2 = 7,
875 3 Andreas Steffen
	.tuples = tuples,
876 3 Andreas Steffen
	.nodes  = nodes
877 3 Andreas Steffen
};
878 1 Andreas Steffen
</pre>