H A D | drbg.c | 100 #include <crypto/drbg.h> 225 * @drbg DRBG handle 232 static bool drbg_fips_continuous_test(struct drbg_state *drbg, drbg_fips_continuous_test() argument 238 if (drbg->test_data) drbg_fips_continuous_test() 243 if (!drbg->fips_primed) { drbg_fips_continuous_test() 245 memcpy(drbg->prev, buf, drbg_blocklen(drbg)); drbg_fips_continuous_test() 246 drbg->fips_primed = true; drbg_fips_continuous_test() 250 ret = memcmp(drbg->prev, buf, drbg_blocklen(drbg)); drbg_fips_continuous_test() 253 memcpy(drbg->prev, buf, drbg_blocklen(drbg)); drbg_fips_continuous_test() 294 static int drbg_kcapi_sym(struct drbg_state *drbg, const unsigned char *key, 296 static int drbg_init_sym_kernel(struct drbg_state *drbg); 297 static int drbg_fini_sym_kernel(struct drbg_state *drbg); 300 static int drbg_ctr_bcc(struct drbg_state *drbg, drbg_ctr_bcc() argument 309 drbg_string_fill(&data, out, drbg_blocklen(drbg)); drbg_ctr_bcc() 318 if (drbg_blocklen(drbg) == cnt) { list_for_each_entry() 320 ret = drbg_kcapi_sym(drbg, key, out, &data); list_for_each_entry() 332 ret = drbg_kcapi_sym(drbg, key, out, &data); 343 * start: drbg->scratchpad 344 * length: drbg_statelen(drbg) + drbg_blocklen(drbg) 351 * start: drbg->scratchpad + 352 * drbg_statelen(drbg) + drbg_blocklen(drbg) 353 * length: drbg_statelen(drbg) 357 * start: df_data + drbg_statelen(drbg) 358 * length: drbg_blocklen(drbg) 360 * start: pad + drbg_blocklen(drbg) 361 * length: drbg_blocklen(drbg) 363 * start: iv + drbg_blocklen(drbg) 364 * length: drbg_satelen(drbg) + drbg_blocklen(drbg) 366 * on. BCC operates blockwise. drbg_statelen(drbg) 372 * Therefore, add drbg_blocklen(drbg) to cover all 377 static int drbg_ctr_df(struct drbg_state *drbg, drbg_ctr_df() argument 386 unsigned char *pad = df_data + drbg_statelen(drbg); drbg_ctr_df() 387 unsigned char *iv = pad + drbg_blocklen(drbg); drbg_ctr_df() 388 unsigned char *temp = iv + drbg_blocklen(drbg); drbg_ctr_df() 404 memset(pad, 0, drbg_blocklen(drbg)); drbg_ctr_df() 405 memset(iv, 0, drbg_blocklen(drbg)); drbg_ctr_df() 422 padlen = (inputlen + sizeof(L_N) + 1) % (drbg_blocklen(drbg)); drbg_ctr_df() 425 padlen = drbg_blocklen(drbg) - padlen; drbg_ctr_df() 435 drbg_string_fill(&S1, iv, drbg_blocklen(drbg)); drbg_ctr_df() 444 while (templen < (drbg_keylen(drbg) + (drbg_blocklen(drbg)))) { drbg_ctr_df() 452 ret = drbg_ctr_bcc(drbg, temp + templen, K, &bcc_list); drbg_ctr_df() 457 templen += drbg_blocklen(drbg); drbg_ctr_df() 461 X = temp + (drbg_keylen(drbg)); drbg_ctr_df() 462 drbg_string_fill(&cipherin, X, drbg_blocklen(drbg)); drbg_ctr_df() 474 ret = drbg_kcapi_sym(drbg, temp, X, &cipherin); drbg_ctr_df() 477 blocklen = (drbg_blocklen(drbg) < drbg_ctr_df() 479 drbg_blocklen(drbg) : drbg_ctr_df() 489 memset(iv, 0, drbg_blocklen(drbg)); drbg_ctr_df() 490 memset(temp, 0, drbg_statelen(drbg)); drbg_ctr_df() 491 memset(pad, 0, drbg_blocklen(drbg)); drbg_ctr_df() 510 static int drbg_ctr_update(struct drbg_state *drbg, struct list_head *seed, drbg_ctr_update() argument 515 unsigned char *temp = drbg->scratchpad; drbg_ctr_update() 516 unsigned char *df_data = drbg->scratchpad + drbg_statelen(drbg) + drbg_ctr_update() 517 drbg_blocklen(drbg); drbg_ctr_update() 523 memset(df_data, 0, drbg_statelen(drbg)); drbg_ctr_update() 527 ret = drbg_ctr_df(drbg, df_data, drbg_statelen(drbg), seed); drbg_ctr_update() 532 drbg_string_fill(&cipherin, drbg->V, drbg_blocklen(drbg)); drbg_ctr_update() 537 while (len < (drbg_statelen(drbg))) { drbg_ctr_update() 539 crypto_inc(drbg->V, drbg_blocklen(drbg)); drbg_ctr_update() 542 ret = drbg_kcapi_sym(drbg, drbg->C, temp + len, &cipherin); drbg_ctr_update() 546 len += drbg_blocklen(drbg); drbg_ctr_update() 552 for (len = 0; len < drbg_statelen(drbg); len++) { drbg_ctr_update() 558 memcpy(drbg->C, temp, drbg_keylen(drbg)); drbg_ctr_update() 560 memcpy(drbg->V, temp + drbg_keylen(drbg), drbg_blocklen(drbg)); drbg_ctr_update() 564 memset(temp, 0, drbg_statelen(drbg) + drbg_blocklen(drbg)); drbg_ctr_update() 566 memset(df_data, 0, drbg_statelen(drbg)); drbg_ctr_update() 575 static int drbg_ctr_generate(struct drbg_state *drbg, drbg_ctr_generate() argument 585 ret = drbg_ctr_update(drbg, addtl, 2); drbg_ctr_generate() 591 crypto_inc(drbg->V, drbg_blocklen(drbg)); drbg_ctr_generate() 592 drbg_string_fill(&data, drbg->V, drbg_blocklen(drbg)); drbg_ctr_generate() 596 ret = drbg_kcapi_sym(drbg, drbg->C, drbg->scratchpad, &data); drbg_ctr_generate() 601 outlen = (drbg_blocklen(drbg) < (buflen - len)) ? drbg_ctr_generate() 602 drbg_blocklen(drbg) : (buflen - len); drbg_ctr_generate() 603 if (!drbg_fips_continuous_test(drbg, drbg->scratchpad)) { drbg_ctr_generate() 605 crypto_inc(drbg->V, drbg_blocklen(drbg)); drbg_ctr_generate() 609 memcpy(buf + len, drbg->scratchpad, outlen); drbg_ctr_generate() 613 crypto_inc(drbg->V, drbg_blocklen(drbg)); drbg_ctr_generate() 617 ret = drbg_ctr_update(drbg, NULL, 3); drbg_ctr_generate() 622 memset(drbg->scratchpad, 0, drbg_blocklen(drbg)); drbg_ctr_generate() 639 static int drbg_kcapi_hash(struct drbg_state *drbg, const unsigned char *key, 641 static int drbg_init_hash_kernel(struct drbg_state *drbg); 642 static int drbg_fini_hash_kernel(struct drbg_state *drbg); 657 static int drbg_hmac_update(struct drbg_state *drbg, struct list_head *seed, drbg_hmac_update() argument 668 memset(drbg->V, 1, drbg_statelen(drbg)); drbg_hmac_update() 670 drbg_string_fill(&seed1, drbg->V, drbg_statelen(drbg)); drbg_hmac_update() 679 drbg_string_fill(&vdata, drbg->V, drbg_statelen(drbg)); drbg_hmac_update() 688 ret = drbg_kcapi_hash(drbg, drbg->C, drbg->C, &seedlist); drbg_hmac_update() 693 ret = drbg_kcapi_hash(drbg, drbg->C, drbg->V, &vdatalist); drbg_hmac_update() 706 static int drbg_hmac_generate(struct drbg_state *drbg, drbg_hmac_generate() argument 718 ret = drbg_hmac_update(drbg, addtl, 1); drbg_hmac_generate() 723 drbg_string_fill(&data, drbg->V, drbg_statelen(drbg)); drbg_hmac_generate() 728 ret = drbg_kcapi_hash(drbg, drbg->C, drbg->V, &datalist); drbg_hmac_generate() 731 outlen = (drbg_blocklen(drbg) < (buflen - len)) ? drbg_hmac_generate() 732 drbg_blocklen(drbg) : (buflen - len); drbg_hmac_generate() 733 if (!drbg_fips_continuous_test(drbg, drbg->V)) drbg_hmac_generate() 737 memcpy(buf + len, drbg->V, outlen); drbg_hmac_generate() 743 ret = drbg_hmac_update(drbg, addtl, 1); drbg_hmac_generate() 745 ret = drbg_hmac_update(drbg, NULL, 1); drbg_hmac_generate() 811 * start: drbg->scratchpad 812 * length: drbg_statelen(drbg) 814 * start: drbg->scratchpad + drbg_statelen(drbg) 815 * length: drbg_blocklen(drbg) 823 static int drbg_hash_df(struct drbg_state *drbg, drbg_hash_df() argument 830 unsigned char *tmp = drbg->scratchpad + drbg_statelen(drbg); drbg_hash_df() 845 ret = drbg_kcapi_hash(drbg, NULL, tmp, entropylist); drbg_hash_df() 850 blocklen = (drbg_blocklen(drbg) < (outlen - len)) ? drbg_hash_df() 851 drbg_blocklen(drbg) : (outlen - len); drbg_hash_df() 857 memset(tmp, 0, drbg_blocklen(drbg)); drbg_hash_df() 862 static int drbg_hash_update(struct drbg_state *drbg, struct list_head *seed, drbg_hash_update() argument 869 unsigned char *V = drbg->scratchpad; drbg_hash_update() 877 memcpy(V, drbg->V, drbg_statelen(drbg)); drbg_hash_update() 880 drbg_string_fill(&data2, V, drbg_statelen(drbg)); drbg_hash_update() 886 ret = drbg_hash_df(drbg, drbg->V, drbg_statelen(drbg), &datalist); drbg_hash_update() 894 drbg_string_fill(&data2, drbg->V, drbg_statelen(drbg)); drbg_hash_update() 897 ret = drbg_hash_df(drbg, drbg->C, drbg_statelen(drbg), &datalist2); drbg_hash_update() 900 memset(drbg->scratchpad, 0, drbg_statelen(drbg)); drbg_hash_update() 905 static int drbg_hash_process_addtl(struct drbg_state *drbg, drbg_hash_process_addtl() argument 919 drbg_string_fill(&data2, drbg->V, drbg_statelen(drbg)); drbg_hash_process_addtl() 923 ret = drbg_kcapi_hash(drbg, NULL, drbg->scratchpad, &datalist); drbg_hash_process_addtl() 928 drbg_add_buf(drbg->V, drbg_statelen(drbg), drbg_hash_process_addtl() 929 drbg->scratchpad, drbg_blocklen(drbg)); drbg_hash_process_addtl() 932 memset(drbg->scratchpad, 0, drbg_blocklen(drbg)); drbg_hash_process_addtl() 937 static int drbg_hash_hashgen(struct drbg_state *drbg, drbg_hash_hashgen() argument 943 unsigned char *src = drbg->scratchpad; drbg_hash_hashgen() 944 unsigned char *dst = drbg->scratchpad + drbg_statelen(drbg); drbg_hash_hashgen() 949 memcpy(src, drbg->V, drbg_statelen(drbg)); drbg_hash_hashgen() 951 drbg_string_fill(&data, src, drbg_statelen(drbg)); drbg_hash_hashgen() 956 ret = drbg_kcapi_hash(drbg, NULL, dst, &datalist); drbg_hash_hashgen() 961 outlen = (drbg_blocklen(drbg) < (buflen - len)) ? drbg_hash_hashgen() 962 drbg_blocklen(drbg) : (buflen - len); drbg_hash_hashgen() 963 if (!drbg_fips_continuous_test(drbg, dst)) { drbg_hash_hashgen() 964 crypto_inc(src, drbg_statelen(drbg)); drbg_hash_hashgen() 972 crypto_inc(src, drbg_statelen(drbg)); drbg_hash_hashgen() 976 memset(drbg->scratchpad, 0, drbg_hash_hashgen() 977 (drbg_statelen(drbg) + drbg_blocklen(drbg))); drbg_hash_hashgen() 982 static int drbg_hash_generate(struct drbg_state *drbg, drbg_hash_generate() argument 997 ret = drbg_hash_process_addtl(drbg, addtl); drbg_hash_generate() 1001 len = drbg_hash_hashgen(drbg, buf, buflen); drbg_hash_generate() 1007 drbg_string_fill(&data2, drbg->V, drbg_statelen(drbg)); drbg_hash_generate() 1009 ret = drbg_kcapi_hash(drbg, NULL, drbg->scratchpad, &datalist); drbg_hash_generate() 1016 drbg_add_buf(drbg->V, drbg_statelen(drbg), drbg_hash_generate() 1017 drbg->scratchpad, drbg_blocklen(drbg)); drbg_hash_generate() 1018 drbg_add_buf(drbg->V, drbg_statelen(drbg), drbg_hash_generate() 1019 drbg->C, drbg_statelen(drbg)); drbg_hash_generate() 1020 u.req_int = cpu_to_be64(drbg->reseed_ctr); drbg_hash_generate() 1021 drbg_add_buf(drbg->V, drbg_statelen(drbg), u.req, 8); drbg_hash_generate() 1024 memset(drbg->scratchpad, 0, drbg_blocklen(drbg)); drbg_hash_generate() 1047 * @drbg: DRBG state struct 1055 static int drbg_seed(struct drbg_state *drbg, struct drbg_string *pers, drbg_seed() argument 1065 if (pers && pers->len > (drbg_max_addtl(drbg))) { drbg_seed() 1071 if (drbg->test_data && drbg->test_data->testentropy) { drbg_seed() 1072 drbg_string_fill(&data1, drbg->test_data->testentropy->buf, drbg_seed() 1073 drbg->test_data->testentropy->len); drbg_seed() 1084 entropylen = drbg_sec_strength(drbg->core->flags); drbg_seed() 1110 memset(drbg->V, 0, drbg_statelen(drbg)); drbg_seed() 1111 memset(drbg->C, 0, drbg_statelen(drbg)); drbg_seed() 1114 ret = drbg->d_ops->update(drbg, &seedlist, reseed); drbg_seed() 1118 drbg->seeded = true; drbg_seed() 1120 drbg->reseed_ctr = 1; drbg_seed() 1128 static inline void drbg_dealloc_state(struct drbg_state *drbg) drbg_dealloc_state() argument 1130 if (!drbg) drbg_dealloc_state() 1132 kzfree(drbg->V); drbg_dealloc_state() 1133 drbg->V = NULL; drbg_dealloc_state() 1134 kzfree(drbg->C); drbg_dealloc_state() 1135 drbg->C = NULL; drbg_dealloc_state() 1136 kzfree(drbg->scratchpad); drbg_dealloc_state() 1137 drbg->scratchpad = NULL; drbg_dealloc_state() 1138 drbg->reseed_ctr = 0; drbg_dealloc_state() 1140 kzfree(drbg->prev); drbg_dealloc_state() 1141 drbg->prev = NULL; drbg_dealloc_state() 1142 drbg->fips_primed = false; drbg_dealloc_state() 1150 static inline int drbg_alloc_state(struct drbg_state *drbg) drbg_alloc_state() argument 1155 drbg->V = kmalloc(drbg_statelen(drbg), GFP_KERNEL); drbg_alloc_state() 1156 if (!drbg->V) drbg_alloc_state() 1158 drbg->C = kmalloc(drbg_statelen(drbg), GFP_KERNEL); drbg_alloc_state() 1159 if (!drbg->C) drbg_alloc_state() 1162 drbg->prev = kmalloc(drbg_blocklen(drbg), GFP_KERNEL); drbg_alloc_state() 1163 if (!drbg->prev) drbg_alloc_state() 1165 drbg->fips_primed = false; drbg_alloc_state() 1168 if (drbg->core->flags & DRBG_HMAC) drbg_alloc_state() 1170 else if (drbg->core->flags & DRBG_CTR) drbg_alloc_state() 1171 sb_size = drbg_statelen(drbg) + drbg_blocklen(drbg) + /* temp */ drbg_alloc_state() 1172 drbg_statelen(drbg) + /* df_data */ drbg_alloc_state() 1173 drbg_blocklen(drbg) + /* pad */ drbg_alloc_state() 1174 drbg_blocklen(drbg) + /* iv */ drbg_alloc_state() 1175 drbg_statelen(drbg) + drbg_blocklen(drbg); /* temp */ drbg_alloc_state() 1177 sb_size = drbg_statelen(drbg) + drbg_blocklen(drbg); drbg_alloc_state() 1180 drbg->scratchpad = kzalloc(sb_size, GFP_KERNEL); drbg_alloc_state() 1181 if (!drbg->scratchpad) drbg_alloc_state() 1184 spin_lock_init(&drbg->drbg_lock); drbg_alloc_state() 1188 drbg_dealloc_state(drbg); drbg_alloc_state() 1195 * the updated state of the shadow copy into original drbg state. This way, 1196 * only the read and write operations of the original drbg state must be 1222 static int drbg_make_shadow(struct drbg_state *drbg, struct drbg_state **shadow) drbg_make_shadow() argument 1232 tmp->core = drbg->core; drbg_make_shadow() 1233 tmp->d_ops = drbg->d_ops; drbg_make_shadow() 1239 spin_lock_bh(&drbg->drbg_lock); drbg_make_shadow() 1240 drbg_copy_drbg(drbg, tmp); drbg_make_shadow() 1242 tmp->test_data = drbg->test_data; drbg_make_shadow() 1243 spin_unlock_bh(&drbg->drbg_lock); drbg_make_shadow() 1252 static void drbg_restore_shadow(struct drbg_state *drbg, drbg_restore_shadow() argument 1257 spin_lock_bh(&drbg->drbg_lock); drbg_restore_shadow() 1258 drbg_copy_drbg(tmp, drbg); drbg_restore_shadow() 1259 spin_unlock_bh(&drbg->drbg_lock); drbg_restore_shadow() 1273 * @drbg DRBG state handle 1285 static int drbg_generate(struct drbg_state *drbg, drbg_generate() argument 1307 len = drbg_make_shadow(drbg, &shadow); drbg_generate() 1346 drbg->pr ? "true" : "false", drbg_generate() 1347 drbg->seeded ? "seeded" : "unseeded"); drbg_generate() 1363 if (!drbg->test_data) { drbg_generate() 1397 if (drbg->core->flags & DRBG_HMAC) drbg_generate() 1400 else if (drbg->core->flags & DRBG_CTR) drbg_generate() 1412 drbg_uninstantiate(drbg); drbg_generate() 1429 drbg_restore_shadow(drbg, &shadow); drbg_generate() 1441 static int drbg_generate_long(struct drbg_state *drbg, drbg_generate_long() argument 1450 slice = ((buflen - len) / drbg_max_request_bytes(drbg)); drbg_generate_long() 1451 chunk = slice ? drbg_max_request_bytes(drbg) : (buflen - len); drbg_generate_long() 1452 tmplen = drbg_generate(drbg, buf + len, chunk, addtl); drbg_generate_long() 1465 * @drbg memory of state -- if NULL, new memory is allocated 1477 static int drbg_instantiate(struct drbg_state *drbg, struct drbg_string *pers, drbg_instantiate() argument 1484 drbg->core = &drbg_cores[coreref]; drbg_instantiate() 1485 drbg->pr = pr; drbg_instantiate() 1486 drbg->seeded = false; drbg_instantiate() 1487 switch (drbg->core->flags & DRBG_TYPE_MASK) { drbg_instantiate() 1490 drbg->d_ops = &drbg_hmac_ops; drbg_instantiate() 1495 drbg->d_ops = &drbg_hash_ops; drbg_instantiate() 1500 drbg->d_ops = &drbg_ctr_ops; drbg_instantiate() 1511 * and the flag is copied into drbg->flags -- drbg_instantiate() 1517 ret = drbg_alloc_state(drbg); drbg_instantiate() 1522 if (drbg->d_ops->crypto_init(drbg)) drbg_instantiate() 1524 ret = drbg_seed(drbg, pers, false); drbg_instantiate() 1525 drbg->d_ops->crypto_fini(drbg); drbg_instantiate() 1532 drbg_dealloc_state(drbg); drbg_instantiate() 1540 * @drbg DRBG state handle 1545 static int drbg_uninstantiate(struct drbg_state *drbg) drbg_uninstantiate() argument 1547 spin_lock_bh(&drbg->drbg_lock); drbg_uninstantiate() 1548 drbg_dealloc_state(drbg); drbg_uninstantiate() 1550 spin_unlock_bh(&drbg->drbg_lock); drbg_uninstantiate() 1557 * @drbg DRBG state handle 1560 static inline void drbg_set_testdata(struct drbg_state *drbg, drbg_set_testdata() argument 1565 spin_lock_bh(&drbg->drbg_lock); drbg_set_testdata() 1566 drbg->test_data = test_data; drbg_set_testdata() 1567 spin_unlock_bh(&drbg->drbg_lock); drbg_set_testdata() 1580 static int drbg_init_hash_kernel(struct drbg_state *drbg) drbg_init_hash_kernel() argument 1585 tfm = crypto_alloc_shash(drbg->core->backend_cra_name, 0, 0); drbg_init_hash_kernel() 1590 BUG_ON(drbg_blocklen(drbg) != crypto_shash_digestsize(tfm)); drbg_init_hash_kernel() 1600 drbg->priv_data = sdesc; drbg_init_hash_kernel() 1604 static int drbg_fini_hash_kernel(struct drbg_state *drbg) drbg_fini_hash_kernel() argument 1606 struct sdesc *sdesc = (struct sdesc *)drbg->priv_data; drbg_fini_hash_kernel() 1611 drbg->priv_data = NULL; drbg_fini_hash_kernel() 1615 static int drbg_kcapi_hash(struct drbg_state *drbg, const unsigned char *key, drbg_kcapi_hash() argument 1618 struct sdesc *sdesc = (struct sdesc *)drbg->priv_data; drbg_kcapi_hash() 1622 crypto_shash_setkey(sdesc->shash.tfm, key, drbg_statelen(drbg)); drbg_kcapi_hash() 1631 static int drbg_init_sym_kernel(struct drbg_state *drbg) drbg_init_sym_kernel() argument 1636 tfm = crypto_alloc_cipher(drbg->core->backend_cra_name, 0, 0); drbg_init_sym_kernel() 1641 BUG_ON(drbg_blocklen(drbg) != crypto_cipher_blocksize(tfm)); drbg_init_sym_kernel() 1642 drbg->priv_data = tfm; drbg_init_sym_kernel() 1646 static int drbg_fini_sym_kernel(struct drbg_state *drbg) drbg_fini_sym_kernel() argument 1649 (struct crypto_cipher *)drbg->priv_data; drbg_fini_sym_kernel() 1652 drbg->priv_data = NULL; drbg_fini_sym_kernel() 1656 static int drbg_kcapi_sym(struct drbg_state *drbg, const unsigned char *key, drbg_kcapi_sym() argument 1660 (struct crypto_cipher *)drbg->priv_data; drbg_kcapi_sym() 1662 crypto_cipher_setkey(tfm, key, (drbg_keylen(drbg))); drbg_kcapi_sym() 1664 BUG_ON(in->len < drbg_blocklen(drbg)); drbg_kcapi_sym() 1716 struct drbg_state *drbg = crypto_tfm_ctx(tfm); drbg_kcapi_init() local 1725 return drbg_instantiate(drbg, NULL, coreref, pr); drbg_kcapi_init() 1748 struct drbg_state *drbg = crypto_rng_ctx(tfm); drbg_kcapi_random() local 1750 return drbg_generate_long(drbg, rdata, dlen, NULL); drbg_kcapi_random() 1757 drbg_set_testdata(drbg, data->test_data); drbg_kcapi_random() 1760 return drbg_generate_long(drbg, data->outbuf, data->outlen, drbg_kcapi_random() 1773 struct drbg_state *drbg = crypto_rng_ctx(tfm); drbg_kcapi_reset() local 1779 drbg_uninstantiate(drbg); drbg_kcapi_reset() 1784 return drbg_instantiate(drbg, &seed_string, coreref, pr); drbg_kcapi_reset() 1789 return drbg_instantiate(drbg, NULL, coreref, pr); drbg_kcapi_reset() 1790 drbg_set_testdata(drbg, data->test_data); drbg_kcapi_reset() 1794 return drbg_instantiate(drbg, &seed_string, coreref, pr); drbg_kcapi_reset() 1818 struct drbg_state *drbg = NULL; drbg_healthcheck_sanity() local 1838 drbg = kzalloc(sizeof(struct drbg_state), GFP_KERNEL); drbg_healthcheck_sanity() 1839 if (!drbg) drbg_healthcheck_sanity() 1851 ret = drbg_instantiate(drbg, NULL, coreref, pr); drbg_healthcheck_sanity() 1856 max_addtllen = drbg_max_addtl(drbg); drbg_healthcheck_sanity() 1857 max_request_bytes = drbg_max_request_bytes(drbg); drbg_healthcheck_sanity() 1860 len = drbg_generate(drbg, buf, OUTBUFLEN, &addtl); drbg_healthcheck_sanity() 1863 len = drbg_generate(drbg, buf, (max_request_bytes + 1), NULL); drbg_healthcheck_sanity() 1865 drbg_uninstantiate(drbg); drbg_healthcheck_sanity() 1868 ret = drbg_instantiate(drbg, &addtl, coreref, pr); drbg_healthcheck_sanity() 1876 drbg_uninstantiate(drbg); drbg_healthcheck_sanity() 1878 kzfree(drbg); drbg_healthcheck_sanity()
|