crypto: drbg - remove configuration of fixed values
authorStephan Mueller <smueller@chronox.de>
Sun, 17 Aug 2014 15:41:10 +0000 (17:41 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 25 Aug 2014 12:34:12 +0000 (20:34 +0800)
SP800-90A mandates several hard-coded values. The old drbg_cores allows
the setting of these values per DRBG implementation. However, due to the
hard requirement of SP800-90A, these values are now returned globally
for each DRBG.

The ability to set such values per DRBG is therefore removed.

Signed-off-by: Stephan Mueller <smueller@chronox.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/drbg.c
include/crypto/drbg.h

index 7015757344201feedb369fefa686498d04f935a6..b4938bb4c465c82c203e18a2e4baf29149084e22 100644 (file)
@@ -117,27 +117,18 @@ static const struct drbg_core drbg_cores[] = {
        {
                .flags = DRBG_CTR | DRBG_STRENGTH128,
                .statelen = 32, /* 256 bits as defined in 10.2.1 */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 16,
                .cra_name = "ctr_aes128",
                .backend_cra_name = "ecb(aes)",
        }, {
                .flags = DRBG_CTR | DRBG_STRENGTH192,
                .statelen = 40, /* 320 bits as defined in 10.2.1 */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 16,
                .cra_name = "ctr_aes192",
                .backend_cra_name = "ecb(aes)",
        }, {
                .flags = DRBG_CTR | DRBG_STRENGTH256,
                .statelen = 48, /* 384 bits as defined in 10.2.1 */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 16,
                .cra_name = "ctr_aes256",
                .backend_cra_name = "ecb(aes)",
@@ -147,36 +138,24 @@ static const struct drbg_core drbg_cores[] = {
        {
                .flags = DRBG_HASH | DRBG_STRENGTH128,
                .statelen = 55, /* 440 bits */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 20,
                .cra_name = "sha1",
                .backend_cra_name = "sha1",
        }, {
                .flags = DRBG_HASH | DRBG_STRENGTH256,
                .statelen = 111, /* 888 bits */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 48,
                .cra_name = "sha384",
                .backend_cra_name = "sha384",
        }, {
                .flags = DRBG_HASH | DRBG_STRENGTH256,
                .statelen = 111, /* 888 bits */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 64,
                .cra_name = "sha512",
                .backend_cra_name = "sha512",
        }, {
                .flags = DRBG_HASH | DRBG_STRENGTH256,
                .statelen = 55, /* 440 bits */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 32,
                .cra_name = "sha256",
                .backend_cra_name = "sha256",
@@ -186,36 +165,24 @@ static const struct drbg_core drbg_cores[] = {
        {
                .flags = DRBG_HMAC | DRBG_STRENGTH128,
                .statelen = 20, /* block length of cipher */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 20,
                .cra_name = "hmac_sha1",
                .backend_cra_name = "hmac(sha1)",
        }, {
                .flags = DRBG_HMAC | DRBG_STRENGTH256,
                .statelen = 48, /* block length of cipher */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 48,
                .cra_name = "hmac_sha384",
                .backend_cra_name = "hmac(sha384)",
        }, {
                .flags = DRBG_HMAC | DRBG_STRENGTH256,
                .statelen = 64, /* block length of cipher */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 64,
                .cra_name = "hmac_sha512",
                .backend_cra_name = "hmac(sha512)",
        }, {
                .flags = DRBG_HMAC | DRBG_STRENGTH256,
                .statelen = 32, /* block length of cipher */
-               .max_addtllen = 35,
-               .max_bits = 19,
-               .max_req = 48,
                .blocklen_bytes = 32,
                .cra_name = "hmac_sha256",
                .backend_cra_name = "hmac(sha256)",
index 831d786976c56fe64c71fa7f3f6c400ea4ca7eb4..3d8e73a1a1c79ea651d8eab2a6051d375212bc5f 100644 (file)
@@ -82,15 +82,6 @@ typedef uint32_t drbg_flag_t;
 struct drbg_core {
        drbg_flag_t flags;      /* flags for the cipher */
        __u8 statelen;          /* maximum state length */
-       /*
-        * maximum length of personalization string or additional input
-        * string -- exponent for base 2
-        */
-       __u8 max_addtllen;
-       /* maximum bits per RNG request -- exponent for base 2*/
-       __u8 max_bits;
-       /* maximum number of requests -- exponent for base 2 */
-       __u8 max_req;
        __u8 blocklen_bytes;    /* block size of output in bytes */
        char cra_name[CRYPTO_MAX_ALG_NAME]; /* mapping to kernel crypto API */
         /* kernel crypto API backend cipher name */
@@ -156,18 +147,20 @@ static inline __u8 drbg_keylen(struct drbg_state *drbg)
 
 static inline size_t drbg_max_request_bytes(struct drbg_state *drbg)
 {
-       /* max_bits is in bits, but buflen is in bytes */
-       return (1 << (drbg->core->max_bits - 3));
+       /* SP800-90A requires the limit 2**19 bits, but we return bytes */
+       return (1 << 16);
 }
 
 static inline size_t drbg_max_addtl(struct drbg_state *drbg)
 {
-       return (1UL<<(drbg->core->max_addtllen));
+       /* SP800-90A requires 2**35 bytes additional info str / pers str */
+       return (1UL<<35);
 }
 
 static inline size_t drbg_max_requests(struct drbg_state *drbg)
 {
-       return (1UL<<(drbg->core->max_req));
+       /* SP800-90A requires 2**48 maximum requests before reseeding */
+       return (1UL<<48);
 }
 
 /*