Lines Matching refs:ctr

22 static void inc_128(RAND_DRBG_CTR *ctr)  in inc_128()  argument
26 unsigned char *p = &ctr->V[15]; in inc_128()
39 static void ctr_XOR(RAND_DRBG_CTR *ctr, const unsigned char *in, size_t inlen) in ctr_XOR() argument
50 n = inlen < ctr->keylen ? inlen : ctr->keylen; in ctr_XOR()
52 ctr->K[i] ^= in[i]; in ctr_XOR()
53 if (inlen <= ctr->keylen) in ctr_XOR()
56 n = inlen - ctr->keylen; in ctr_XOR()
62 ctr->V[i] ^= in[i + ctr->keylen]; in ctr_XOR()
68 __owur static int ctr_BCC_block(RAND_DRBG_CTR *ctr, unsigned char *out, in ctr_BCC_block() argument
76 if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, AES_BLOCK_SIZE) in ctr_BCC_block()
86 __owur static int ctr_BCC_blocks(RAND_DRBG_CTR *ctr, const unsigned char *in) in ctr_BCC_blocks() argument
88 if (!ctr_BCC_block(ctr, ctr->KX, in) in ctr_BCC_blocks()
89 || !ctr_BCC_block(ctr, ctr->KX + 16, in)) in ctr_BCC_blocks()
91 if (ctr->keylen != 16 && !ctr_BCC_block(ctr, ctr->KX + 32, in)) in ctr_BCC_blocks()
100 __owur static int ctr_BCC_init(RAND_DRBG_CTR *ctr) in ctr_BCC_init() argument
102 memset(ctr->KX, 0, 48); in ctr_BCC_init()
103 memset(ctr->bltmp, 0, 16); in ctr_BCC_init()
104 if (!ctr_BCC_block(ctr, ctr->KX, ctr->bltmp)) in ctr_BCC_init()
106 ctr->bltmp[3] = 1; in ctr_BCC_init()
107 if (!ctr_BCC_block(ctr, ctr->KX + 16, ctr->bltmp)) in ctr_BCC_init()
109 if (ctr->keylen != 16) { in ctr_BCC_init()
110 ctr->bltmp[3] = 2; in ctr_BCC_init()
111 if (!ctr_BCC_block(ctr, ctr->KX + 32, ctr->bltmp)) in ctr_BCC_init()
120 __owur static int ctr_BCC_update(RAND_DRBG_CTR *ctr, in ctr_BCC_update() argument
127 if (ctr->bltmp_pos) { in ctr_BCC_update()
128 size_t left = 16 - ctr->bltmp_pos; in ctr_BCC_update()
132 memcpy(ctr->bltmp + ctr->bltmp_pos, in, left); in ctr_BCC_update()
133 if (!ctr_BCC_blocks(ctr, ctr->bltmp)) in ctr_BCC_update()
135 ctr->bltmp_pos = 0; in ctr_BCC_update()
143 if (!ctr_BCC_blocks(ctr, in)) in ctr_BCC_update()
149 memcpy(ctr->bltmp + ctr->bltmp_pos, in, inlen); in ctr_BCC_update()
150 ctr->bltmp_pos += inlen; in ctr_BCC_update()
155 __owur static int ctr_BCC_final(RAND_DRBG_CTR *ctr) in ctr_BCC_final() argument
157 if (ctr->bltmp_pos) { in ctr_BCC_final()
158 memset(ctr->bltmp + ctr->bltmp_pos, 0, 16 - ctr->bltmp_pos); in ctr_BCC_final()
159 if (!ctr_BCC_blocks(ctr, ctr->bltmp)) in ctr_BCC_final()
165 __owur static int ctr_df(RAND_DRBG_CTR *ctr, in ctr_df() argument
172 unsigned char *p = ctr->bltmp; in ctr_df()
175 if (!ctr_BCC_init(ctr)) in ctr_df()
194 *p = (unsigned char)((ctr->keylen + 16) & 0xff); in ctr_df()
195 ctr->bltmp_pos = 8; in ctr_df()
196 if (!ctr_BCC_update(ctr, in1, in1len) in ctr_df()
197 || !ctr_BCC_update(ctr, in2, in2len) in ctr_df()
198 || !ctr_BCC_update(ctr, in3, in3len) in ctr_df()
199 || !ctr_BCC_update(ctr, &c80, 1) in ctr_df()
200 || !ctr_BCC_final(ctr)) in ctr_df()
203 if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->KX, NULL, 1)) in ctr_df()
206 if (!EVP_CipherUpdate(ctr->ctx, ctr->KX, &outlen, ctr->KX + ctr->keylen, in ctr_df()
210 if (!EVP_CipherUpdate(ctr->ctx, ctr->KX + 16, &outlen, ctr->KX, in ctr_df()
214 if (ctr->keylen != 16) in ctr_df()
215 if (!EVP_CipherUpdate(ctr->ctx, ctr->KX + 32, &outlen, ctr->KX + 16, in ctr_df()
233 RAND_DRBG_CTR *ctr = &drbg->data.ctr; in ctr_update() local
237 inc_128(ctr); in ctr_update()
238 if (!EVP_CipherUpdate(ctr->ctx, ctr->K, &outlen, ctr->V, AES_BLOCK_SIZE) in ctr_update()
243 if (ctr->keylen != 16) { in ctr_update()
244 inc_128(ctr); in ctr_update()
245 if (!EVP_CipherUpdate(ctr->ctx, ctr->K+16, &outlen, ctr->V, in ctr_update()
250 inc_128(ctr); in ctr_update()
251 if (!EVP_CipherUpdate(ctr->ctx, ctr->V, &outlen, ctr->V, AES_BLOCK_SIZE) in ctr_update()
256 if (ctr->keylen == 24) { in ctr_update()
257 memcpy(ctr->V + 8, ctr->V, 8); in ctr_update()
258 memcpy(ctr->V, ctr->K + 24, 8); in ctr_update()
264 if (!ctr_df(ctr, in1, in1len, nonce, noncelen, in2, in2len)) in ctr_update()
268 ctr_XOR(ctr, ctr->KX, drbg->seedlen); in ctr_update()
270 ctr_XOR(ctr, in1, in1len); in ctr_update()
271 ctr_XOR(ctr, in2, in2len); in ctr_update()
274 if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->K, NULL, 1)) in ctr_update()
284 RAND_DRBG_CTR *ctr = &drbg->data.ctr; in drbg_ctr_instantiate() local
289 memset(ctr->K, 0, sizeof(ctr->K)); in drbg_ctr_instantiate()
290 memset(ctr->V, 0, sizeof(ctr->V)); in drbg_ctr_instantiate()
291 if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->K, NULL, 1)) in drbg_ctr_instantiate()
313 RAND_DRBG_CTR *ctr = &drbg->data.ctr; in drbg_ctr_generate() local
330 inc_128(ctr); in drbg_ctr_generate()
333 if (!EVP_CipherUpdate(ctr->ctx, ctr->K, &outl, ctr->V, in drbg_ctr_generate()
337 memcpy(out, ctr->K, outlen); in drbg_ctr_generate()
340 if (!EVP_CipherUpdate(ctr->ctx, out, &outl, ctr->V, AES_BLOCK_SIZE) in drbg_ctr_generate()
356 EVP_CIPHER_CTX_free(drbg->data.ctr.ctx); in drbg_ctr_uninstantiate()
357 EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_df); in drbg_ctr_uninstantiate()
358 OPENSSL_cleanse(&drbg->data.ctr, sizeof(drbg->data.ctr)); in drbg_ctr_uninstantiate()
371 RAND_DRBG_CTR *ctr = &drbg->data.ctr; in drbg_ctr_init() local
380 ctr->cipher = EVP_aes_128_ecb(); in drbg_ctr_init()
384 ctr->cipher = EVP_aes_192_ecb(); in drbg_ctr_init()
388 ctr->cipher = EVP_aes_256_ecb(); in drbg_ctr_init()
394 ctr->keylen = keylen; in drbg_ctr_init()
395 if (ctr->ctx == NULL) in drbg_ctr_init()
396 ctr->ctx = EVP_CIPHER_CTX_new(); in drbg_ctr_init()
397 if (ctr->ctx == NULL) in drbg_ctr_init()
411 if (ctr->ctx_df == NULL) in drbg_ctr_init()
412 ctr->ctx_df = EVP_CIPHER_CTX_new(); in drbg_ctr_init()
413 if (ctr->ctx_df == NULL) in drbg_ctr_init()
416 if (!EVP_CipherInit_ex(ctr->ctx_df, ctr->cipher, NULL, df_key, NULL, 1)) in drbg_ctr_init()
419 drbg->min_entropylen = ctr->keylen; in drbg_ctr_init()