-static int test_multi_set(void)
-{
- int rv = 0;
- RAND_DRBG *drbg = NULL;
-
- if (crngt_skip())
- return TEST_skip("CRNGT cannot be disabled");
-
- /* init drbg with default CTR initializer */
- if (!TEST_ptr(drbg = RAND_DRBG_new(0, 0, NULL))
- || !TEST_true(disable_crngt(drbg)))
- goto err;
- /* change it to use hmac */
- if (!TEST_true(RAND_DRBG_set(drbg, NID_sha1, RAND_DRBG_FLAG_HMAC)))
- goto err;
- /* use same type */
- if (!TEST_true(RAND_DRBG_set(drbg, NID_sha1, RAND_DRBG_FLAG_HMAC)))
- goto err;
- /* change it to use hash */
- if (!TEST_true(RAND_DRBG_set(drbg, NID_sha256, 0)))
- goto err;
- /* use same type */
- if (!TEST_true(RAND_DRBG_set(drbg, NID_sha256, 0)))
- goto err;
- /* change it to use ctr */
- if (!TEST_true(RAND_DRBG_set(drbg, NID_aes_192_ctr, 0)))
- goto err;
- /* use same type */
- if (!TEST_true(RAND_DRBG_set(drbg, NID_aes_192_ctr, 0)))
- goto err;
- if (!TEST_int_gt(RAND_DRBG_instantiate(drbg, NULL, 0), 0))
- goto err;
-
- rv = 1;
-err:
- uninstantiate(drbg);
- RAND_DRBG_free(drbg);
- return rv;
-}
-
-static int test_set_defaults(void)
-{
- RAND_DRBG *primary = NULL, *public = NULL, *private = NULL;
-
- /* Check the default type and flags for primary, public and private */
- return TEST_ptr(primary = RAND_DRBG_get0_master())
- && TEST_ptr(public = RAND_DRBG_get0_public())
- && TEST_ptr(private = RAND_DRBG_get0_private())
- && TEST_int_eq(primary->type, RAND_DRBG_TYPE)
- && TEST_int_eq(primary->flags,
- RAND_DRBG_FLAGS | RAND_DRBG_FLAG_PRIMARY)
- && TEST_int_eq(public->type, RAND_DRBG_TYPE)
- && TEST_int_eq(public->flags,
- RAND_DRBG_FLAGS | RAND_DRBG_FLAG_PUBLIC)
- && TEST_int_eq(private->type, RAND_DRBG_TYPE)
- && TEST_int_eq(private->flags,
- RAND_DRBG_FLAGS | RAND_DRBG_FLAG_PRIVATE)
-
- /* change primary DRBG and check again */
- && TEST_true(RAND_DRBG_set_defaults(NID_sha256,
- RAND_DRBG_FLAG_PRIMARY))
- && TEST_true(RAND_DRBG_uninstantiate(primary))
- && TEST_int_eq(primary->type, NID_sha256)
- && TEST_int_eq(primary->flags, RAND_DRBG_FLAG_PRIMARY)
- && TEST_int_eq(public->type, RAND_DRBG_TYPE)
- && TEST_int_eq(public->flags,
- RAND_DRBG_FLAGS | RAND_DRBG_FLAG_PUBLIC)
- && TEST_int_eq(private->type, RAND_DRBG_TYPE)
- && TEST_int_eq(private->flags,
- RAND_DRBG_FLAGS | RAND_DRBG_FLAG_PRIVATE)
- /* change private DRBG and check again */
- && TEST_true(RAND_DRBG_set_defaults(NID_sha256,
- RAND_DRBG_FLAG_PRIVATE|RAND_DRBG_FLAG_HMAC))
- && TEST_true(RAND_DRBG_uninstantiate(private))
- && TEST_int_eq(primary->type, NID_sha256)
- && TEST_int_eq(primary->flags, RAND_DRBG_FLAG_PRIMARY)
- && TEST_int_eq(public->type, RAND_DRBG_TYPE)
- && TEST_int_eq(public->flags,
- RAND_DRBG_FLAGS | RAND_DRBG_FLAG_PUBLIC)
- && TEST_int_eq(private->type, NID_sha256)
- && TEST_int_eq(private->flags,
- RAND_DRBG_FLAG_PRIVATE | RAND_DRBG_FLAG_HMAC)
- /* change public DRBG and check again */
- && TEST_true(RAND_DRBG_set_defaults(NID_sha1,
- RAND_DRBG_FLAG_PUBLIC
- | RAND_DRBG_FLAG_HMAC))
- && TEST_true(RAND_DRBG_uninstantiate(public))
- && TEST_int_eq(primary->type, NID_sha256)
- && TEST_int_eq(primary->flags, RAND_DRBG_FLAG_PRIMARY)
- && TEST_int_eq(public->type, NID_sha1)
- && TEST_int_eq(public->flags,
- RAND_DRBG_FLAG_PUBLIC | RAND_DRBG_FLAG_HMAC)
- && TEST_int_eq(private->type, NID_sha256)
- && TEST_int_eq(private->flags,
- RAND_DRBG_FLAG_PRIVATE | RAND_DRBG_FLAG_HMAC)
- /* Change DRBG defaults and change public and check again */
- && TEST_true(RAND_DRBG_set_defaults(NID_sha256, 0))
- && TEST_true(RAND_DRBG_uninstantiate(public))
- && TEST_int_eq(public->type, NID_sha256)
- && TEST_int_eq(public->flags, RAND_DRBG_FLAG_PUBLIC)
-
- /* FIPS mode doesn't support CTR DRBG without a derivation function */
-#ifndef FIPS_MODULE
- /* Change DRBG defaults and change primary and check again */
- && TEST_true(RAND_DRBG_set_defaults(NID_aes_256_ctr,
- RAND_DRBG_FLAG_CTR_NO_DF))
- && TEST_true(RAND_DRBG_uninstantiate(primary))
- && TEST_int_eq(primary->type, NID_aes_256_ctr)
- && TEST_int_eq(primary->flags,
- RAND_DRBG_FLAG_PRIMARY|RAND_DRBG_FLAG_CTR_NO_DF)
-#endif
- /* Reset back to the standard defaults */
- && TEST_true(RAND_DRBG_set_defaults(RAND_DRBG_TYPE,
- RAND_DRBG_FLAGS
- | RAND_DRBG_FLAG_PRIMARY
- | RAND_DRBG_FLAG_PUBLIC
- | RAND_DRBG_FLAG_PRIVATE))
- && TEST_true(RAND_DRBG_uninstantiate(primary))
- && TEST_true(RAND_DRBG_uninstantiate(public))
- && TEST_true(RAND_DRBG_uninstantiate(private));
-}
-
-#if 0
-/*
- * A list of the FIPS DRGB types.
- * Because of the way HMAC DRGBs are implemented, both the NID and flags
- * are required.
- */
-static const struct s_drgb_types {
- int nid;
- int flags;
-} drgb_types[] = {
- { NID_aes_128_ctr, 0 },
- { NID_aes_192_ctr, 0 },
- { NID_aes_256_ctr, 0 },
- { NID_sha1, 0 },
- { NID_sha224, 0 },
- { NID_sha256, 0 },
- { NID_sha384, 0 },
- { NID_sha512, 0 },
- { NID_sha512_224, 0 },
- { NID_sha512_256, 0 },
- { NID_sha3_224, 0 },
- { NID_sha3_256, 0 },
- { NID_sha3_384, 0 },
- { NID_sha3_512, 0 },
- { NID_sha1, RAND_DRBG_FLAG_HMAC },
- { NID_sha224, RAND_DRBG_FLAG_HMAC },
- { NID_sha256, RAND_DRBG_FLAG_HMAC },
- { NID_sha384, RAND_DRBG_FLAG_HMAC },
- { NID_sha512, RAND_DRBG_FLAG_HMAC },
- { NID_sha512_224, RAND_DRBG_FLAG_HMAC },
- { NID_sha512_256, RAND_DRBG_FLAG_HMAC },
- { NID_sha3_224, RAND_DRBG_FLAG_HMAC },
- { NID_sha3_256, RAND_DRBG_FLAG_HMAC },
- { NID_sha3_384, RAND_DRBG_FLAG_HMAC },
- { NID_sha3_512, RAND_DRBG_FLAG_HMAC },
-};
-
-/* Six cases for each covers seed sizes up to 32 bytes */
-static const size_t crngt_num_cases = 6;
-
-static size_t crngt_case, crngt_idx;
-
-static int crngt_entropy_cb(OPENSSL_CTX *ctx, RAND_POOL *pool,
- unsigned char *buf, unsigned char *md,
- unsigned int *md_size)
-{
- size_t i, z;
-
- if (!TEST_int_lt(crngt_idx, crngt_num_cases))
- return 0;
- /* Generate a block of unique data unless this is the duplication point */
- z = crngt_idx++;
- if (z > 0 && crngt_case == z)
- z--;
- for (i = 0; i < CRNGT_BUFSIZ; i++)
- buf[i] = (unsigned char)(i + 'A' + z);
- return EVP_Digest(buf, CRNGT_BUFSIZ, md, md_size, EVP_sha256(), NULL);
-}
-#endif
-