OpenCoverage

umac.c #2

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssh/src/umac.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11typedef u_int8_t UINT8;-
12typedef u_int16_t UINT16;-
13typedef u_int32_t UINT32;-
14typedef u_int64_t UINT64;-
15typedef unsigned int UWORD;-
16-
17-
18-
19typedef AES_KEY aes_int_key[1];-
20static void kdf(void *bufp, aes_int_key key, UINT8 ndx, int nbytes)-
21{-
22 UINT8 in_buf[16] = {0};-
23 UINT8 out_buf[16];-
24 UINT8 *dst_buf = (UINT8 *)bufp;-
25 int i;-
26-
27-
28 in_buf[16 -9] = ndx;-
29 in_buf[16 -1] = i = 1;-
30-
31 while (nbytes >= 16
nbytes >= 16Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
32 AES_encrypt((u_char *)(in_buf),(u_char *)(out_buf),(AES_KEY *)key);-
33 memcpy(dst_buf,out_buf,16);-
34 in_buf[16 -1] = ++i;-
35 nbytes -= 16;-
36 dst_buf += 16;-
37 }
never executed: end of block
0
38 if (nbytes
nbytesDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
39 AES_encrypt((u_char *)(in_buf),(u_char *)(out_buf),(AES_KEY *)key);-
40 memcpy(dst_buf,out_buf,nbytes);-
41 }
never executed: end of block
0
42 explicit_bzero(in_buf, sizeof(in_buf));-
43 explicit_bzero(out_buf, sizeof(out_buf));-
44}
never executed: end of block
0
45-
46-
47-
48-
49-
50-
51-
52typedef struct {-
53 UINT8 cache[16];-
54 UINT8 nonce[16];-
55 aes_int_key prf_key;-
56} pdf_ctx;-
57-
58static void pdf_init(pdf_ctx *pc, aes_int_key prf_key)-
59{-
60 UINT8 buf[16];-
61-
62 kdf(buf, prf_key, 0, 16);-
63 AES_set_encrypt_key((const u_char *)(buf),16*8,pc->prf_key);-
64-
65-
66 memset(pc->nonce, 0, sizeof(pc->nonce));-
67 AES_encrypt((u_char *)(pc->nonce),(u_char *)(pc->cache),(AES_KEY *)pc->prf_key);-
68 explicit_bzero(buf, sizeof(buf));-
69}
never executed: end of block
0
70-
71static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])-
72{-
73 union {-
74 UINT8 tmp_nonce_lo[4];-
75 UINT32 align;-
76 } t;-
77-
78-
79-
80 *(UINT32 *)t.tmp_nonce_lo = ((const UINT32 *)nonce)[1];-
81 t.tmp_nonce_lo[3] &= ~0;-
82-
83 if ( (((
(((UINT32 *)t....pc->nonce)[1])Description
TRUEnever evaluated
FALSEnever evaluated
UINT32 *)t.tmp_nonce_lo)[0] != ((UINT32 *)pc->nonce)[1])
(((UINT32 *)t....pc->nonce)[1])Description
TRUEnever evaluated
FALSEnever evaluated
||
0
84 (((const
(((const UINT3...pc->nonce)[0])Description
TRUEnever evaluated
FALSEnever evaluated
UINT32 *)nonce)[0] != ((UINT32 *)pc->nonce)[0])
(((const UINT3...pc->nonce)[0])Description
TRUEnever evaluated
FALSEnever evaluated
)
0
85 {-
86 ((UINT32 *)pc->nonce)[0] = ((const UINT32 *)nonce)[0];-
87 ((UINT32 *)pc->nonce)[1] = ((UINT32 *)t.tmp_nonce_lo)[0];-
88 AES_encrypt((u_char *)(pc->nonce),(u_char *)(pc->cache),(AES_KEY *)pc->prf_key);-
89 }
never executed: end of block
0
90 ((UINT64 *)buf)[0] ^= ((UINT64 *)pc->cache)[0];-
91 ((UINT64 *)buf)[1] ^= ((UINT64 *)pc->cache)[1];-
92-
93}
never executed: end of block
0
94typedef struct {-
95 UINT8 nh_key [1024 + 16 * ((16 / 4) - 1)];-
96 UINT8 data [64];-
97 int next_data_empty;-
98 int bytes_hashed;-
99 UINT64 state[(16 / 4)];-
100} nh_ctx;-
101static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)-
102-
103-
104-
105{-
106 UINT64 h1,h2,h3,h4;-
107 UWORD c = dlen / 32;-
108 UINT32 *k = (UINT32 *)kp;-
109 const UINT32 *d = (const UINT32 *)dp;-
110 UINT32 d0,d1,d2,d3,d4,d5,d6,d7;-
111 UINT32 k0,k1,k2,k3,k4,k5,k6,k7,-
112 k8,k9,k10,k11,k12,k13,k14,k15,-
113 k16,k17,k18,k19;-
114-
115 h1 = *((UINT64 *)hp);-
116 h2 = *((UINT64 *)hp + 1);-
117 h3 = *((UINT64 *)hp + 2);-
118 h4 = *((UINT64 *)hp + 3);-
119 k0 = *(k+0); k1 = *(k+1); k2 = *(k+2); k3 = *(k+3);-
120 k4 = *(k+4); k5 = *(k+5); k6 = *(k+6); k7 = *(k+7);-
121 do {-
122 d0 = (get_u32_le(d+0)); d1 = (get_u32_le(d+1));-
123 d2 = (get_u32_le(d+2)); d3 = (get_u32_le(d+3));-
124 d4 = (get_u32_le(d+4)); d5 = (get_u32_le(d+5));-
125 d6 = (get_u32_le(d+6)); d7 = (get_u32_le(d+7));-
126 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11);-
127 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15);-
128 k16 = *(k+16); k17 = *(k+17); k18 = *(k+18); k19 = *(k+19);-
129-
130 h1 += ((UINT64)((UINT64)(UINT32)((k0 + d0)) * (UINT64)(UINT32)((k4 + d4))));-
131 h2 += ((UINT64)((UINT64)(UINT32)((k4 + d0)) * (UINT64)(UINT32)((k8 + d4))));-
132 h3 += ((UINT64)((UINT64)(UINT32)((k8 + d0)) * (UINT64)(UINT32)((k12 + d4))));-
133 h4 += ((UINT64)((UINT64)(UINT32)((k12 + d0)) * (UINT64)(UINT32)((k16 + d4))));-
134-
135 h1 += ((UINT64)((UINT64)(UINT32)((k1 + d1)) * (UINT64)(UINT32)((k5 + d5))));-
136 h2 += ((UINT64)((UINT64)(UINT32)((k5 + d1)) * (UINT64)(UINT32)((k9 + d5))));-
137 h3 += ((UINT64)((UINT64)(UINT32)((k9 + d1)) * (UINT64)(UINT32)((k13 + d5))));-
138 h4 += ((UINT64)((UINT64)(UINT32)((k13 + d1)) * (UINT64)(UINT32)((k17 + d5))));-
139-
140 h1 += ((UINT64)((UINT64)(UINT32)((k2 + d2)) * (UINT64)(UINT32)((k6 + d6))));-
141 h2 += ((UINT64)((UINT64)(UINT32)((k6 + d2)) * (UINT64)(UINT32)((k10 + d6))));-
142 h3 += ((UINT64)((UINT64)(UINT32)((k10 + d2)) * (UINT64)(UINT32)((k14 + d6))));-
143 h4 += ((UINT64)((UINT64)(UINT32)((k14 + d2)) * (UINT64)(UINT32)((k18 + d6))));-
144-
145 h1 += ((UINT64)((UINT64)(UINT32)((k3 + d3)) * (UINT64)(UINT32)((k7 + d7))));-
146 h2 += ((UINT64)((UINT64)(UINT32)((k7 + d3)) * (UINT64)(UINT32)((k11 + d7))));-
147 h3 += ((UINT64)((UINT64)(UINT32)((k11 + d3)) * (UINT64)(UINT32)((k15 + d7))));-
148 h4 += ((UINT64)((UINT64)(UINT32)((k15 + d3)) * (UINT64)(UINT32)((k19 + d7))));-
149-
150 k0 = k8; k1 = k9; k2 = k10; k3 = k11;-
151 k4 = k12; k5 = k13; k6 = k14; k7 = k15;-
152 k8 = k16; k9 = k17; k10 = k18; k11 = k19;-
153-
154 d += 8;-
155 k += 8;-
156 }
never executed: end of block
while (--
--cDescription
TRUEnever evaluated
FALSEnever evaluated
c
--cDescription
TRUEnever evaluated
FALSEnever evaluated
);
0
157 ((UINT64 *)hp)[0] = h1;-
158 ((UINT64 *)hp)[1] = h2;-
159 ((UINT64 *)hp)[2] = h3;-
160 ((UINT64 *)hp)[3] = h4;-
161}
never executed: end of block
0
162static void nh_transform(nh_ctx *hc, const UINT8 *buf, UINT32 nbytes)-
163-
164-
165-
166-
167-
168{-
169 UINT8 *key;-
170-
171 key = hc->nh_key + hc->bytes_hashed;-
172 nh_aux(key, buf, hc->state, nbytes);-
173}
never executed: end of block
0
174-
175-
176-
177-
178static void endian_convert(void *buf, UWORD bpw, UINT32 num_bytes)-
179-
180-
181{-
182 UWORD iters = num_bytes / bpw;-
183 if (bpw == 4
bpw == 4Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
184 UINT32 *p = (UINT32 *)buf;-
185 do {-
186 *p = get_u32(p);-
187 p++;-
188 }
never executed: end of block
while (--
--itersDescription
TRUEnever evaluated
FALSEnever evaluated
iters
--itersDescription
TRUEnever evaluated
FALSEnever evaluated
);
0
189 }
never executed: end of block
else if (bpw == 8
bpw == 8Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
190 UINT32 *p = (UINT32 *)buf;-
191 UINT32 t;-
192 do {-
193 t = get_u32(p+1);-
194 p[1] = get_u32(p);-
195 p[0] = t;-
196 p += 2;-
197 }
never executed: end of block
while (--
--itersDescription
TRUEnever evaluated
FALSEnever evaluated
iters
--itersDescription
TRUEnever evaluated
FALSEnever evaluated
);
0
198 }
never executed: end of block
0
199}
never executed: end of block
0
200-
201-
202-
203-
204-
205-
206-
207static void nh_reset(nh_ctx *hc)-
208-
209{-
210 hc->bytes_hashed = 0;-
211 hc->next_data_empty = 0;-
212 hc->state[0] = 0;-
213-
214 hc->state[1] = 0;-
215-
216-
217 hc->state[2] = 0;-
218-
219-
220 hc->state[3] = 0;-
221-
222-
223}
never executed: end of block
0
224-
225-
226-
227static void nh_init(nh_ctx *hc, aes_int_key prf_key)-
228-
229{-
230 kdf(hc->nh_key, prf_key, 1, sizeof(hc->nh_key));-
231 endian_convert((hc->nh_key),(4),(sizeof(hc->nh_key)));-
232 nh_reset(hc);-
233}
never executed: end of block
0
234-
235-
236-
237static void nh_update(nh_ctx *hc, const UINT8 *buf, UINT32 nbytes)-
238-
239-
240{-
241 UINT32 i,j;-
242-
243 j = hc->next_data_empty;-
244 if ((
(j + nbytes) >= 64Description
TRUEnever evaluated
FALSEnever evaluated
j + nbytes) >= 64
(j + nbytes) >= 64Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
245 if (j
jDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
246 i = 64 - j;-
247 memcpy(hc->data+j, buf, i);-
248 nh_transform(hc,hc->data,64);-
249 nbytes -= i;-
250 buf += i;-
251 hc->bytes_hashed += 64;-
252 }
never executed: end of block
0
253 if (nbytes >= 64
nbytes >= 64Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
254 i = nbytes & ~(64 - 1);-
255 nh_transform(hc, buf, i);-
256 nbytes -= i;-
257 buf += i;-
258 hc->bytes_hashed += i;-
259 }
never executed: end of block
0
260 j = 0;-
261 }
never executed: end of block
0
262 memcpy(hc->data + j, buf, nbytes);-
263 hc->next_data_empty = j + nbytes;-
264}
never executed: end of block
0
265-
266-
267-
268static void zero_pad(UINT8 *p, int nbytes)-
269{-
270-
271 if (nbytes >= (int)sizeof(UWORD)
nbytes >= (int)sizeof(UWORD)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
272 while ((
(ptrdiff_t)p % sizeof(UWORD)Description
TRUEnever evaluated
FALSEnever evaluated
ptrdiff_t)p % sizeof(UWORD)
(ptrdiff_t)p % sizeof(UWORD)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
273 *p = 0;-
274 nbytes--;-
275 p++;-
276 }
never executed: end of block
0
277 while (nbytes >= (int)sizeof(UWORD)
nbytes >= (int)sizeof(UWORD)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
278 *(UWORD *)p = 0;-
279 nbytes -= sizeof(UWORD);-
280 p += sizeof(UWORD);-
281 }
never executed: end of block
0
282 }
never executed: end of block
0
283 while (nbytes
nbytesDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
284 *p = 0;-
285 nbytes--;-
286 p++;-
287 }
never executed: end of block
0
288}
never executed: end of block
0
289-
290-
291-
292static void nh_final(nh_ctx *hc, UINT8 *result)-
293-
294-
295-
296-
297-
298-
299-
300{-
301 int nh_len, nbits;-
302-
303 if (hc->next_data_empty != 0
hc->next_data_empty != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
304 nh_len = ((hc->next_data_empty + (32 - 1)) &-
305 ~(32 - 1));-
306 zero_pad(hc->data + hc->next_data_empty,-
307 nh_len - hc->next_data_empty);-
308 nh_transform(hc, hc->data, nh_len);-
309 hc->bytes_hashed += hc->next_data_empty;-
310 }
never executed: end of block
else if (hc->bytes_hashed == 0
hc->bytes_hashed == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
311 nh_len = 32;-
312 zero_pad(hc->data, 32);-
313 nh_transform(hc, hc->data, nh_len);-
314 }
never executed: end of block
0
315-
316 nbits = (hc->bytes_hashed << 3);-
317 ((UINT64 *)result)[0] = ((UINT64 *)hc->state)[0] + nbits;-
318-
319 ((UINT64 *)result)[1] = ((UINT64 *)hc->state)[1] + nbits;-
320-
321-
322 ((UINT64 *)result)[2] = ((UINT64 *)hc->state)[2] + nbits;-
323-
324-
325 ((UINT64 *)result)[3] = ((UINT64 *)hc->state)[3] + nbits;-
326-
327 nh_reset(hc);-
328}
never executed: end of block
0
329-
330-
331-
332static void nh(nh_ctx *hc, const UINT8 *buf, UINT32 padded_len,-
333 UINT32 unpadded_len, UINT8 *result)-
334-
335-
336-
337-
338{-
339 UINT32 nbits;-
340-
341-
342 nbits = (unpadded_len << 3);-
343-
344 ((UINT64 *)result)[0] = nbits;-
345-
346 ((UINT64 *)result)[1] = nbits;-
347-
348-
349 ((UINT64 *)result)[2] = nbits;-
350-
351-
352 ((UINT64 *)result)[3] = nbits;-
353-
354-
355 nh_aux(hc->nh_key, buf, result, padded_len);-
356}
never executed: end of block
0
357typedef struct uhash_ctx {-
358 nh_ctx hash;-
359 UINT64 poly_key_8[(16 / 4)];-
360 UINT64 poly_accum[(16 / 4)];-
361 UINT64 ip_keys[(16 / 4)*4];-
362 UINT32 ip_trans[(16 / 4)];-
363 UINT32 msg_len;-
364-
365} uhash_ctx;-
366typedef struct uhash_ctx *uhash_ctx_t;-
367static UINT64 poly64(UINT64 cur, UINT64 key, UINT64 data)-
368{-
369 UINT32 key_hi = (UINT32)(key >> 32),-
370 key_lo = (UINT32)key,-
371 cur_hi = (UINT32)(cur >> 32),-
372 cur_lo = (UINT32)cur,-
373 x_lo,-
374 x_hi;-
375 UINT64 X,T,res;-
376-
377 X = ((UINT64)((UINT64)(UINT32)(key_hi) * (UINT64)(UINT32)(cur_lo))) + ((UINT64)((UINT64)(UINT32)(cur_hi) * (UINT64)(UINT32)(key_lo)));-
378 x_lo = (UINT32)X;-
379 x_hi = (UINT32)(X >> 32);-
380-
381 res = (((UINT64)((UINT64)(UINT32)(key_hi) * (UINT64)(UINT32)(cur_hi))) + x_hi) * 59 + ((UINT64)((UINT64)(UINT32)(key_lo) * (UINT64)(UINT32)(cur_lo)));-
382-
383 T = ((UINT64)x_lo << 32);-
384 res += T;-
385 if (res < T
res < TDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
386 res += 59;
never executed: res += 59;
0
387-
388 res += data;-
389 if (res < data
res < dataDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
390 res += 59;
never executed: res += 59;
0
391-
392 return
never executed: return res;
res;
never executed: return res;
0
393}-
394static void poly_hash(uhash_ctx_t hc, UINT32 data_in[])-
395{-
396 int i;-
397 UINT64 *data=(UINT64*)data_in;-
398-
399 for (i = 0; i < (16 / 4)
i < (16 / 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
400 if ((
(UINT32)(data[...= 0xffffffffulDescription
TRUEnever evaluated
FALSEnever evaluated
UINT32)(data[i] >> 32) == 0xfffffffful
(UINT32)(data[...= 0xffffffffulDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
401 hc->poly_accum[i] = poly64(hc->poly_accum[i],-
402 hc->poly_key_8[i], ((UINT64)0xFFFFFFFFFFFFFFC5ull) - 1);-
403 hc->poly_accum[i] = poly64(hc->poly_accum[i],-
404 hc->poly_key_8[i], (data[i] - 59));-
405 }
never executed: end of block
else {
0
406 hc->poly_accum[i] = poly64(hc->poly_accum[i],-
407 hc->poly_key_8[i], data[i]);-
408 }
never executed: end of block
0
409 }-
410}
never executed: end of block
0
411static UINT64 ip_aux(UINT64 t, UINT64 *ipkp, UINT64 data)-
412{-
413 t = t + ipkp[0] * (UINT64)(UINT16)(data >> 48);-
414 t = t + ipkp[1] * (UINT64)(UINT16)(data >> 32);-
415 t = t + ipkp[2] * (UINT64)(UINT16)(data >> 16);-
416 t = t + ipkp[3] * (UINT64)(UINT16)(data);-
417-
418 return
never executed: return t;
t;
never executed: return t;
0
419}-
420-
421static UINT32 ip_reduce_p36(UINT64 t)-
422{-
423-
424 UINT64 ret;-
425-
426 ret = (t & ((UINT64)0x0000000FFFFFFFFFull)) + 5 * (t >> 36);-
427 if (ret >= ((UINT64)0x0000000FFFFFFFFBull)
ret >= ((UINT6...0FFFFFFFFBull)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
428 ret -= ((UINT64)0x0000000FFFFFFFFBull);
never executed: ret -= ((UINT64)0x0000000FFFFFFFFBull);
0
429-
430-
431 return
never executed: return (UINT32)(ret);
(UINT32)(ret);
never executed: return (UINT32)(ret);
0
432}-
433-
434-
435-
436-
437-
438-
439static void ip_short(uhash_ctx_t ahc, UINT8 *nh_res, u_char *res)-
440{-
441 UINT64 t;-
442 UINT64 *nhp = (UINT64 *)nh_res;-
443-
444 t = ip_aux(0,ahc->ip_keys, nhp[0]);-
445 put_u32((UINT32 *)res+0, ip_reduce_p36(t) ^ ahc->ip_trans[0]);-
446-
447 t = ip_aux(0,ahc->ip_keys+4, nhp[1]);-
448 put_u32((UINT32 *)res+1, ip_reduce_p36(t) ^ ahc->ip_trans[1]);-
449-
450-
451 t = ip_aux(0,ahc->ip_keys+8, nhp[2]);-
452 put_u32((UINT32 *)res+2, ip_reduce_p36(t) ^ ahc->ip_trans[2]);-
453-
454-
455 t = ip_aux(0,ahc->ip_keys+12, nhp[3]);-
456 put_u32((UINT32 *)res+3, ip_reduce_p36(t) ^ ahc->ip_trans[3]);-
457-
458}
never executed: end of block
0
459-
460-
461-
462-
463-
464static void ip_long(uhash_ctx_t ahc, u_char *res)-
465{-
466 int i;-
467 UINT64 t;-
468-
469 for (i = 0; i < (16 / 4)
i < (16 / 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
470-
471 if (ahc->poly_accum[i] >= ((UINT64)0xFFFFFFFFFFFFFFC5ull)
ahc->poly_accu...FFFFFFFFC5ull)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
472 ahc->poly_accum[i] -= ((UINT64)0xFFFFFFFFFFFFFFC5ull);
never executed: ahc->poly_accum[i] -= ((UINT64)0xFFFFFFFFFFFFFFC5ull);
0
473 t = ip_aux(0,ahc->ip_keys+(i*4), ahc->poly_accum[i]);-
474 put_u32((UINT32 *)res+i, ip_reduce_p36(t) ^ ahc->ip_trans[i])-
475 ;-
476 }
never executed: end of block
0
477}
never executed: end of block
0
478-
479-
480-
481-
482-
483-
484-
485static int uhash_reset(uhash_ctx_t pc)-
486{-
487 nh_reset(&pc->hash);-
488 pc->msg_len = 0;-
489 pc->poly_accum[0] = 1;-
490-
491 pc->poly_accum[1] = 1;-
492-
493-
494 pc->poly_accum[2] = 1;-
495-
496-
497 pc->poly_accum[3] = 1;-
498-
499 return
never executed: return 1;
1;
never executed: return 1;
0
500}-
501static void uhash_init(uhash_ctx_t ahc, aes_int_key prf_key)-
502{-
503 int i;-
504 UINT8 buf[(8*(16 / 4)+4)*sizeof(UINT64)];-
505-
506-
507 memset(ahc, 0, sizeof(uhash_ctx));-
508-
509-
510 nh_init(&ahc->hash, prf_key);-
511-
512-
513 kdf(buf, prf_key, 2, sizeof(buf));-
514 for (i = 0; i < (16 / 4)
i < (16 / 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
515-
516-
517-
518-
519 memcpy(ahc->poly_key_8+i, buf+24*i, 8);-
520 endian_convert((ahc->poly_key_8+i),(8),(8));-
521-
522 ahc->poly_key_8[i] &= ((UINT64)0x01ffffffu << 32) + 0x01ffffffu;-
523 ahc->poly_accum[i] = 1;-
524 }
never executed: end of block
0
525-
526-
527 kdf(buf, prf_key, 3, sizeof(buf));-
528 for (i = 0; i < (16 / 4)
i < (16 / 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
529 memcpy(ahc->ip_keys+4*i, buf+(8*i+4)*sizeof(UINT64),
never executed: memcpy(ahc->ip_keys+4*i, buf+(8*i+4)*sizeof(UINT64), 4*sizeof(UINT64));
0
530 4*sizeof(UINT64));
never executed: memcpy(ahc->ip_keys+4*i, buf+(8*i+4)*sizeof(UINT64), 4*sizeof(UINT64));
0
531 endian_convert((ahc->ip_keys),(sizeof(UINT64)),(sizeof(ahc->ip_keys)))-
532 ;-
533 for (i = 0; i < (16 / 4)*4
i < (16 / 4)*4Description
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
534 ahc->ip_keys[i] %= ((UINT64)0x0000000FFFFFFFFBull);
never executed: ahc->ip_keys[i] %= ((UINT64)0x0000000FFFFFFFFBull);
0
535-
536-
537-
538 kdf(ahc->ip_trans, prf_key, 4, (16 / 4) * sizeof(UINT32));-
539 endian_convert((ahc->ip_trans),(sizeof(UINT32)),((16 / 4) * sizeof(UINT32)))-
540 ;-
541 explicit_bzero(buf, sizeof(buf));-
542}
never executed: end of block
0
543static int uhash_update(uhash_ctx_t ctx, const u_char *input, long len)-
544-
545-
546-
547{-
548 UWORD bytes_hashed, bytes_remaining;-
549 UINT64 result_buf[(16 / 4)];-
550 UINT8 *nh_result = (UINT8 *)&result_buf;-
551-
552 if (ctx->msg_len + len <= 1024
ctx->msg_len + len <= 1024Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
553 nh_update(&ctx->hash, (const UINT8 *)input, len);-
554 ctx->msg_len += len;-
555 }
never executed: end of block
else {
0
556-
557 bytes_hashed = ctx->msg_len % 1024;-
558 if (ctx->msg_len == 1024
ctx->msg_len == 1024Description
TRUEnever evaluated
FALSEnever evaluated
)
0
559 bytes_hashed = 1024;
never executed: bytes_hashed = 1024;
0
560-
561 if (bytes_hashed + len >= 1024
bytes_hashed + len >= 1024Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
562-
563-
564-
565-
566 if (bytes_hashed
bytes_hashedDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
567 bytes_remaining = (1024 - bytes_hashed);-
568 nh_update(&ctx->hash, (const UINT8 *)input, bytes_remaining);-
569 nh_final(&ctx->hash, nh_result);-
570 ctx->msg_len += bytes_remaining;-
571 poly_hash(ctx,(UINT32 *)nh_result);-
572 len -= bytes_remaining;-
573 input += bytes_remaining;-
574 }
never executed: end of block
0
575-
576-
577 while (len >= 1024
len >= 1024Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
578 nh(&ctx->hash, (const UINT8 *)input, 1024,-
579 1024, nh_result);-
580 ctx->msg_len += 1024;-
581 len -= 1024;-
582 input += 1024;-
583 poly_hash(ctx,(UINT32 *)nh_result);-
584 }
never executed: end of block
0
585 }
never executed: end of block
0
586-
587-
588 if (len
lenDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
589 nh_update(&ctx->hash, (const UINT8 *)input, len);-
590 ctx->msg_len += len;-
591 }
never executed: end of block
0
592 }
never executed: end of block
0
593-
594 return
never executed: return (1);
(1);
never executed: return (1);
0
595}-
596-
597-
598-
599static int uhash_final(uhash_ctx_t ctx, u_char *res)-
600-
601{-
602 UINT64 result_buf[(16 / 4)];-
603 UINT8 *nh_result = (UINT8 *)&result_buf;-
604-
605 if (ctx->msg_len > 1024
ctx->msg_len > 1024Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
606 if (ctx->msg_len % 1024
ctx->msg_len % 1024Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
607 nh_final(&ctx->hash, nh_result);-
608 poly_hash(ctx,(UINT32 *)nh_result);-
609 }
never executed: end of block
0
610 ip_long(ctx, res);-
611 }
never executed: end of block
else {
0
612 nh_final(&ctx->hash, nh_result);-
613 ip_short(ctx,nh_result, res);-
614 }
never executed: end of block
0
615 uhash_reset(ctx);-
616 return
never executed: return (1);
(1);
never executed: return (1);
0
617}-
618struct umac128_ctx {-
619 uhash_ctx hash;-
620 pdf_ctx pdf;-
621 void *free_ptr;-
622} umac128_ctx;-
623int umac128_delete(struct umac128_ctx *ctx)-
624-
625{-
626 if (ctx
ctxDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
627 if (16)-
628 ctx = (struct umac128_ctx *)ctx->free_ptr;
never executed: ctx = (struct umac128_ctx *)ctx->free_ptr;
0
629 explicit_bzero(ctx, sizeof(*ctx) + 16);-
630 free(ctx);-
631 }
never executed: end of block
0
632 return
never executed: return (1);
(1);
never executed: return (1);
0
633}-
634-
635-
636-
637struct umac128_ctx *umac128_new(const u_char key[])-
638-
639-
640-
641{-
642 struct umac128_ctx *ctx, *octx;-
643 size_t bytes_to_add;-
644 aes_int_key prf_key;-
645-
646 octx = ctx = xcalloc(1, sizeof(*ctx) + 16);-
647 if (ctx
ctxDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
648 if (16) {-
649 bytes_to_add = 16 --
650 ((ptrdiff_t)ctx & (16 - 1));-
651 ctx = (struct umac128_ctx *)((u_char *)ctx + bytes_to_add);-
652 }
never executed: end of block
0
653 ctx->free_ptr = octx;-
654 AES_set_encrypt_key((const u_char *)(key),16*8,prf_key);-
655 pdf_init(&ctx->pdf, prf_key);-
656 uhash_init(&ctx->hash, prf_key);-
657 explicit_bzero(prf_key, sizeof(prf_key));-
658 }
never executed: end of block
0
659-
660 return
never executed: return (ctx);
(ctx);
never executed: return (ctx);
0
661}-
662-
663-
664-
665int umac128_final(struct umac128_ctx *ctx, u_char tag[], const u_char nonce[8])-
666-
667{-
668 uhash_final(&ctx->hash, (u_char *)tag);-
669 pdf_gen_xor(&ctx->pdf, (const UINT8 *)nonce, (UINT8 *)tag);-
670-
671 return
never executed: return (1);
(1);
never executed: return (1);
0
672}-
673-
674-
675-
676int umac128_update(struct umac128_ctx *ctx, const u_char *input, long len)-
677-
678-
679-
680{-
681 uhash_update(&ctx->hash, input, len);-
682 return
never executed: return (1);
(1);
never executed: return (1);
0
683}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2