Lines Matching refs:ctx
26 void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,
30 memset(ctx->nonce.c, 0, sizeof(ctx->nonce.c));
31 ctx->nonce.c[0] = ((u8)(L - 1) & 7) | (u8)(((M - 2) / 2) & 7) << 3;
32 ctx->blocks = 0;
33 ctx->block = block;
34 ctx->key = key;
40 int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx,
43 unsigned int L = ctx->nonce.c[0] & 7; /* the L parameter */
49 ctx->nonce.c[8] = (u8)(mlen >> (56 % (sizeof(mlen) * 8)));
50 ctx->nonce.c[9] = (u8)(mlen >> (48 % (sizeof(mlen) * 8)));
51 ctx->nonce.c[10] = (u8)(mlen >> (40 % (sizeof(mlen) * 8)));
52 ctx->nonce.c[11] = (u8)(mlen >> (32 % (sizeof(mlen) * 8)));
54 ctx->nonce.u[1] = 0;
56 ctx->nonce.c[12] = (u8)(mlen >> 24);
57 ctx->nonce.c[13] = (u8)(mlen >> 16);
58 ctx->nonce.c[14] = (u8)(mlen >> 8);
59 ctx->nonce.c[15] = (u8)mlen;
61 ctx->nonce.c[0] &= ~0x40; /* clear Adata flag */
62 memcpy(&ctx->nonce.c[1], nonce, 14 - L);
68 void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx,
72 block128_f block = ctx->block;
77 ctx->nonce.c[0] |= 0x40; /* set Adata flag */
78 (*block) (ctx->nonce.c, ctx->cmac.c, ctx->key), ctx->blocks++;
81 ctx->cmac.c[0] ^= (u8)(alen >> 8);
82 ctx->cmac.c[1] ^= (u8)alen;
86 ctx->cmac.c[0] ^= 0xFF;
87 ctx->cmac.c[1] ^= 0xFF;
88 ctx->cmac.c[2] ^= (u8)(alen >> (56 % (sizeof(alen) * 8)));
89 ctx->cmac.c[3] ^= (u8)(alen >> (48 % (sizeof(alen) * 8)));
90 ctx->cmac.c[4] ^= (u8)(alen >> (40 % (sizeof(alen) * 8)));
91 ctx->cmac.c[5] ^= (u8)(alen >> (32 % (sizeof(alen) * 8)));
92 ctx->cmac.c[6] ^= (u8)(alen >> 24);
93 ctx->cmac.c[7] ^= (u8)(alen >> 16);
94 ctx->cmac.c[8] ^= (u8)(alen >> 8);
95 ctx->cmac.c[9] ^= (u8)alen;
98 ctx->cmac.c[0] ^= 0xFF;
99 ctx->cmac.c[1] ^= 0xFE;
100 ctx->cmac.c[2] ^= (u8)(alen >> 24);
101 ctx->cmac.c[3] ^= (u8)(alen >> 16);
102 ctx->cmac.c[4] ^= (u8)(alen >> 8);
103 ctx->cmac.c[5] ^= (u8)alen;
109 ctx->cmac.c[i] ^= *aad;
110 (*block) (ctx->cmac.c, ctx->cmac.c, ctx->key), ctx->blocks++;
137 int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
143 unsigned char flags0 = ctx->nonce.c[0];
144 block128_f block = ctx->block;
145 void *key = ctx->key;
152 (*block) (ctx->nonce.c, ctx->cmac.c, key), ctx->blocks++;
154 ctx->nonce.c[0] = L = flags0 & 7;
156 n |= ctx->nonce.c[i];
157 ctx->nonce.c[i] = 0;
160 n |= ctx->nonce.c[15]; /* reconstructed length */
161 ctx->nonce.c[15] = 1;
166 ctx->blocks += ((len + 15) >> 3) | 1;
167 if (ctx->blocks > (U64(1) << 61))
178 ctx->cmac.u[0] ^= temp.u[0];
179 ctx->cmac.u[1] ^= temp.u[1];
181 ctx->cmac.u[0] ^= ((u64_a1 *)inp)[0];
182 ctx->cmac.u[1] ^= ((u64_a1 *)inp)[1];
184 (*block) (ctx->cmac.c, ctx->cmac.c, key);
185 (*block) (ctx->nonce.c, scratch.c, key);
186 ctr64_inc(ctx->nonce.c);
202 ctx->cmac.c[i] ^= inp[i];
203 (*block) (ctx->cmac.c, ctx->cmac.c, key);
204 (*block) (ctx->nonce.c, scratch.c, key);
210 ctx->nonce.c[i] = 0;
212 (*block) (ctx->nonce.c, scratch.c, key);
213 ctx->cmac.u[0] ^= scratch.u[0];
214 ctx->cmac.u[1] ^= scratch.u[1];
216 ctx->nonce.c[0] = flags0;
221 int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx,
227 unsigned char flags0 = ctx->nonce.c[0];
228 block128_f block = ctx->block;
229 void *key = ctx->key;
236 (*block) (ctx->nonce.c, ctx->cmac.c, key);
238 ctx->nonce.c[0] = L = flags0 & 7;
240 n |= ctx->nonce.c[i];
241 ctx->nonce.c[i] = 0;
244 n |= ctx->nonce.c[15]; /* reconstructed length */
245 ctx->nonce.c[15] = 1;
257 (*block) (ctx->nonce.c, scratch.c, key);
258 ctr64_inc(ctx->nonce.c);
261 ctx->cmac.u[0] ^= (scratch.u[0] ^= temp.u[0]);
262 ctx->cmac.u[1] ^= (scratch.u[1] ^= temp.u[1]);
265 ctx->cmac.u[0] ^= (((u64_a1 *)out)[0]
267 ctx->cmac.u[1] ^= (((u64_a1 *)out)[1]
270 (*block) (ctx->cmac.c, ctx->cmac.c, key);
278 (*block) (ctx->nonce.c, scratch.c, key);
280 ctx->cmac.c[i] ^= (out[i] = scratch.c[i] ^ inp[i]);
281 (*block) (ctx->cmac.c, ctx->cmac.c, key);
285 ctx->nonce.c[i] = 0;
287 (*block) (ctx->nonce.c, scratch.c, key);
288 ctx->cmac.u[0] ^= scratch.u[0];
289 ctx->cmac.u[1] ^= scratch.u[1];
291 ctx->nonce.c[0] = flags0;
310 int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx,
316 unsigned char flags0 = ctx->nonce.c[0];
317 block128_f block = ctx->block;
318 void *key = ctx->key;
325 (*block) (ctx->nonce.c, ctx->cmac.c, key), ctx->blocks++;
327 ctx->nonce.c[0] = L = flags0 & 7;
329 n |= ctx->nonce.c[i];
330 ctx->nonce.c[i] = 0;
333 n |= ctx->nonce.c[15]; /* reconstructed length */
334 ctx->nonce.c[15] = 1;
339 ctx->blocks += ((len + 15) >> 3) | 1;
340 if (ctx->blocks > (U64(1) << 61))
344 (*stream) (inp, out, n, key, ctx->nonce.c, ctx->cmac.c);
350 ctr64_add(ctx->nonce.c, n / 16);
355 ctx->cmac.c[i] ^= inp[i];
356 (*block) (ctx->cmac.c, ctx->cmac.c, key);
357 (*block) (ctx->nonce.c, scratch.c, key);
363 ctx->nonce.c[i] = 0;
365 (*block) (ctx->nonce.c, scratch.c, key);
366 ctx->cmac.u[0] ^= scratch.u[0];
367 ctx->cmac.u[1] ^= scratch.u[1];
369 ctx->nonce.c[0] = flags0;
374 int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx,
380 unsigned char flags0 = ctx->nonce.c[0];
381 block128_f block = ctx->block;
382 void *key = ctx->key;
389 (*block) (ctx->nonce.c, ctx->cmac.c, key);
391 ctx->nonce.c[0] = L = flags0 & 7;
393 n |= ctx->nonce.c[i];
394 ctx->nonce.c[i] = 0;
397 n |= ctx->nonce.c[15]; /* reconstructed length */
398 ctx->nonce.c[15] = 1;
404 (*stream) (inp, out, n, key, ctx->nonce.c, ctx->cmac.c);
410 ctr64_add(ctx->nonce.c, n / 16);
414 (*block) (ctx->nonce.c, scratch.c, key);
416 ctx->cmac.c[i] ^= (out[i] = scratch.c[i] ^ inp[i]);
417 (*block) (ctx->cmac.c, ctx->cmac.c, key);
421 ctx->nonce.c[i] = 0;
423 (*block) (ctx->nonce.c, scratch.c, key);
424 ctx->cmac.u[0] ^= scratch.u[0];
425 ctx->cmac.u[1] ^= scratch.u[1];
427 ctx->nonce.c[0] = flags0;
432 size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len)
434 unsigned int M = (ctx->nonce.c[0] >> 3) & 7; /* the M parameter */
440 memcpy(tag, ctx->cmac.c, M);