]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: drbg - Fold include/crypto/drbg.h into crypto/drbg.c
authorEric Biggers <ebiggers@kernel.org>
Mon, 20 Apr 2026 06:33:54 +0000 (23:33 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 7 May 2026 08:09:59 +0000 (16:09 +0800)
include/crypto/drbg.h no longer contains anything that is used
externally to crypto/drbg.c.  Therefore, fold it into crypto/drbg.c.

Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/drbg.c
crypto/testmgr.c
include/crypto/drbg.h [deleted file]
tools/testing/crypto/chacha20-s390/test-cipher.c

index 66d7739469c673fc558fa75b6de29406e6279141..fd1d75addaf78dea3e6027f4ebf202c12ff6a2b3 100644 (file)
  * Just mix both scenarios above.
  */
 
-#include <crypto/drbg.h>
 #include <crypto/df_sp80090a.h>
 #include <crypto/internal/cipher.h>
+#include <crypto/internal/drbg.h>
+#include <crypto/internal/rng.h>
+#include <crypto/hash.h>
+#include <crypto/skcipher.h>
+#include <linux/fips.h>
 #include <linux/kernel.h>
 #include <linux/jiffies.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/scatterlist.h>
 #include <linux/string_choices.h>
 #include <linux/unaligned.h>
 
+struct drbg_state;
+typedef uint32_t drbg_flag_t;
+
+struct drbg_core {
+       drbg_flag_t flags;      /* flags for the cipher */
+       __u8 statelen;          /* maximum state length */
+       __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 */
+       char backend_cra_name[CRYPTO_MAX_ALG_NAME];
+};
+
+struct drbg_state_ops {
+       int (*update)(struct drbg_state *drbg, struct list_head *seed,
+                     int reseed);
+       int (*generate)(struct drbg_state *drbg,
+                       unsigned char *buf, unsigned int buflen,
+                       struct list_head *addtl);
+       int (*crypto_init)(struct drbg_state *drbg);
+       int (*crypto_fini)(struct drbg_state *drbg);
+
+};
+
+enum drbg_seed_state {
+       DRBG_SEED_STATE_UNSEEDED,
+       DRBG_SEED_STATE_PARTIAL, /* Seeded with !rng_is_initialized() */
+       DRBG_SEED_STATE_FULL,
+};
+
+struct drbg_state {
+       struct mutex drbg_mutex;        /* lock around DRBG */
+       unsigned char *V;       /* internal state 10.1.1.1 1a) */
+       unsigned char *Vbuf;
+       /* hash: static value 10.1.1.1 1b) hmac / ctr: key */
+       unsigned char *C;
+       unsigned char *Cbuf;
+       /* Number of RNG requests since last reseed -- 10.1.1.1 1c) */
+       size_t reseed_ctr;
+       size_t reseed_threshold;
+        /* some memory the DRBG can use for its operation */
+       unsigned char *scratchpad;
+       unsigned char *scratchpadbuf;
+       void *priv_data;        /* Cipher handle */
+
+       struct crypto_skcipher *ctr_handle;     /* CTR mode cipher handle */
+       struct skcipher_request *ctr_req;       /* CTR mode request handle */
+       __u8 *outscratchpadbuf;                 /* CTR mode output scratchpad */
+        __u8 *outscratchpad;                   /* CTR mode aligned outbuf */
+       struct crypto_wait ctr_wait;            /* CTR mode async wait obj */
+       struct scatterlist sg_in, sg_out;       /* CTR mode SGLs */
+
+       enum drbg_seed_state seeded;            /* DRBG fully seeded? */
+       unsigned long last_seed_time;
+       bool pr;                /* Prediction resistance enabled? */
+       struct crypto_rng *jent;
+       const struct drbg_state_ops *d_ops;
+       const struct drbg_core *core;
+       struct drbg_string test_data;
+};
+
+static inline __u8 drbg_statelen(struct drbg_state *drbg)
+{
+       if (drbg && drbg->core)
+               return drbg->core->statelen;
+       return 0;
+}
+
+static inline __u8 drbg_blocklen(struct drbg_state *drbg)
+{
+       if (drbg && drbg->core)
+               return drbg->core->blocklen_bytes;
+       return 0;
+}
+
+static inline __u8 drbg_keylen(struct drbg_state *drbg)
+{
+       if (drbg && drbg->core)
+               return (drbg->core->statelen - drbg->core->blocklen_bytes);
+       return 0;
+}
+
+static inline size_t drbg_max_request_bytes(struct drbg_state *drbg)
+{
+       /* SP800-90A requires the limit 2**19 bits, but we return bytes */
+       return (1 << 16);
+}
+
+/*
+ * SP800-90A allows implementations to support additional info / personalization
+ * strings of up to 2**35 bits.  Implementations can have a smaller maximum.  We
+ * use 2**35 - 16 bits == U32_MAX - 1 bytes so that the max + 1 always fits in a
+ * size_t, allowing drbg_healthcheck_sanity() to verify its enforcement.
+ */
+static inline size_t drbg_max_addtl(struct drbg_state *drbg)
+{
+       return U32_MAX - 1;
+}
+
+static inline size_t drbg_max_requests(struct drbg_state *drbg)
+{
+       /* SP800-90A requires 2**48 maximum requests before reseeding */
+       return (1<<20);
+}
+
+/* DRBG type flags */
+#define DRBG_CTR       ((drbg_flag_t)1<<0)
+#define DRBG_HMAC      ((drbg_flag_t)1<<1)
+#define DRBG_HASH      ((drbg_flag_t)1<<2)
+#define DRBG_TYPE_MASK (DRBG_CTR | DRBG_HMAC | DRBG_HASH)
+/* DRBG strength flags */
+#define DRBG_STRENGTH128       ((drbg_flag_t)1<<3)
+#define DRBG_STRENGTH192       ((drbg_flag_t)1<<4)
+#define DRBG_STRENGTH256       ((drbg_flag_t)1<<5)
+#define DRBG_STRENGTH_MASK     (DRBG_STRENGTH128 | DRBG_STRENGTH192 | \
+                                DRBG_STRENGTH256)
+
+enum drbg_prefixes {
+       DRBG_PREFIX0 = 0x00,
+       DRBG_PREFIX1,
+       DRBG_PREFIX2,
+       DRBG_PREFIX3
+};
+
 /***************************************************************
  * Backend cipher definitions available to DRBG
  ***************************************************************/
index 35ff2b50e3c2c028991a4862ad225a2ca7992cb8..480368a41cc0685f488699f8ad7517073586e984 100644 (file)
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <linux/uio.h>
-#include <crypto/rng.h>
-#include <crypto/drbg.h>
 #include <crypto/akcipher.h>
 #include <crypto/kpp.h>
 #include <crypto/acompress.h>
 #include <crypto/sig.h>
 #include <crypto/internal/cipher.h>
+#include <crypto/internal/rng.h>
 #include <crypto/internal/simd.h>
 
 #include "internal.h"
diff --git a/include/crypto/drbg.h b/include/crypto/drbg.h
deleted file mode 100644 (file)
index 4fafc69..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * DRBG based on NIST SP800-90A
- *
- * Copyright Stephan Mueller <smueller@chronox.de>, 2014
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, and the entire permission notice in its entirety,
- *    including the disclaimer of warranties.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote
- *    products derived from this software without specific prior
- *    written permission.
- *
- * ALTERNATIVELY, this product may be distributed under the terms of
- * the GNU General Public License, in which case the provisions of the GPL are
- * required INSTEAD OF the above restrictions.  (This clause is
- * necessary due to a potential bad interaction between the GPL and
- * the restrictions contained in a BSD-style copyright.)
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
- * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- */
-
-#ifndef _DRBG_H
-#define _DRBG_H
-
-
-#include <linux/random.h>
-#include <linux/scatterlist.h>
-#include <crypto/hash.h>
-#include <crypto/skcipher.h>
-#include <linux/module.h>
-#include <linux/crypto.h>
-#include <linux/slab.h>
-#include <crypto/internal/drbg.h>
-#include <crypto/internal/rng.h>
-#include <crypto/rng.h>
-#include <linux/fips.h>
-#include <linux/mutex.h>
-#include <linux/list.h>
-#include <linux/workqueue.h>
-
-struct drbg_state;
-typedef uint32_t drbg_flag_t;
-
-struct drbg_core {
-       drbg_flag_t flags;      /* flags for the cipher */
-       __u8 statelen;          /* maximum state length */
-       __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 */
-       char backend_cra_name[CRYPTO_MAX_ALG_NAME];
-};
-
-struct drbg_state_ops {
-       int (*update)(struct drbg_state *drbg, struct list_head *seed,
-                     int reseed);
-       int (*generate)(struct drbg_state *drbg,
-                       unsigned char *buf, unsigned int buflen,
-                       struct list_head *addtl);
-       int (*crypto_init)(struct drbg_state *drbg);
-       int (*crypto_fini)(struct drbg_state *drbg);
-
-};
-
-enum drbg_seed_state {
-       DRBG_SEED_STATE_UNSEEDED,
-       DRBG_SEED_STATE_PARTIAL, /* Seeded with !rng_is_initialized() */
-       DRBG_SEED_STATE_FULL,
-};
-
-struct drbg_state {
-       struct mutex drbg_mutex;        /* lock around DRBG */
-       unsigned char *V;       /* internal state 10.1.1.1 1a) */
-       unsigned char *Vbuf;
-       /* hash: static value 10.1.1.1 1b) hmac / ctr: key */
-       unsigned char *C;
-       unsigned char *Cbuf;
-       /* Number of RNG requests since last reseed -- 10.1.1.1 1c) */
-       size_t reseed_ctr;
-       size_t reseed_threshold;
-        /* some memory the DRBG can use for its operation */
-       unsigned char *scratchpad;
-       unsigned char *scratchpadbuf;
-       void *priv_data;        /* Cipher handle */
-
-       struct crypto_skcipher *ctr_handle;     /* CTR mode cipher handle */
-       struct skcipher_request *ctr_req;       /* CTR mode request handle */
-       __u8 *outscratchpadbuf;                 /* CTR mode output scratchpad */
-        __u8 *outscratchpad;                   /* CTR mode aligned outbuf */
-       struct crypto_wait ctr_wait;            /* CTR mode async wait obj */
-       struct scatterlist sg_in, sg_out;       /* CTR mode SGLs */
-
-       enum drbg_seed_state seeded;            /* DRBG fully seeded? */
-       unsigned long last_seed_time;
-       bool pr;                /* Prediction resistance enabled? */
-       struct crypto_rng *jent;
-       const struct drbg_state_ops *d_ops;
-       const struct drbg_core *core;
-       struct drbg_string test_data;
-};
-
-static inline __u8 drbg_statelen(struct drbg_state *drbg)
-{
-       if (drbg && drbg->core)
-               return drbg->core->statelen;
-       return 0;
-}
-
-static inline __u8 drbg_blocklen(struct drbg_state *drbg)
-{
-       if (drbg && drbg->core)
-               return drbg->core->blocklen_bytes;
-       return 0;
-}
-
-static inline __u8 drbg_keylen(struct drbg_state *drbg)
-{
-       if (drbg && drbg->core)
-               return (drbg->core->statelen - drbg->core->blocklen_bytes);
-       return 0;
-}
-
-static inline size_t drbg_max_request_bytes(struct drbg_state *drbg)
-{
-       /* SP800-90A requires the limit 2**19 bits, but we return bytes */
-       return (1 << 16);
-}
-
-/*
- * SP800-90A allows implementations to support additional info / personalization
- * strings of up to 2**35 bits.  Implementations can have a smaller maximum.  We
- * use 2**35 - 16 bits == U32_MAX - 1 bytes so that the max + 1 always fits in a
- * size_t, allowing drbg_healthcheck_sanity() to verify its enforcement.
- */
-static inline size_t drbg_max_addtl(struct drbg_state *drbg)
-{
-       return U32_MAX - 1;
-}
-
-static inline size_t drbg_max_requests(struct drbg_state *drbg)
-{
-       /* SP800-90A requires 2**48 maximum requests before reseeding */
-       return (1<<20);
-}
-
-/* DRBG type flags */
-#define DRBG_CTR       ((drbg_flag_t)1<<0)
-#define DRBG_HMAC      ((drbg_flag_t)1<<1)
-#define DRBG_HASH      ((drbg_flag_t)1<<2)
-#define DRBG_TYPE_MASK (DRBG_CTR | DRBG_HMAC | DRBG_HASH)
-/* DRBG strength flags */
-#define DRBG_STRENGTH128       ((drbg_flag_t)1<<3)
-#define DRBG_STRENGTH192       ((drbg_flag_t)1<<4)
-#define DRBG_STRENGTH256       ((drbg_flag_t)1<<5)
-#define DRBG_STRENGTH_MASK     (DRBG_STRENGTH128 | DRBG_STRENGTH192 | \
-                                DRBG_STRENGTH256)
-
-enum drbg_prefixes {
-       DRBG_PREFIX0 = 0x00,
-       DRBG_PREFIX1,
-       DRBG_PREFIX2,
-       DRBG_PREFIX3
-};
-
-#endif /* _DRBG_H */
index 827507844e8fb483005b2586222dd6e1c3ae8c7a..9f61454ed077fde62cca43c626ff6277a801d94b 100644 (file)
@@ -11,7 +11,6 @@
 #include <crypto/akcipher.h>
 #include <crypto/acompress.h>
 #include <crypto/rng.h>
-#include <crypto/drbg.h>
 #include <crypto/kpp.h>
 #include <crypto/internal/simd.h>
 #include <crypto/chacha.h>