lkml.org 
[lkml]   [2021]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v43 08/15] crypto: DRBG - externalize DRBG functions for LRNG
    Date
    This patch allows several DRBG functions to be called by the LRNG kernel
    code paths outside the drbg.c file.

    CC: Torsten Duwe <duwe@lst.de>
    CC: "Eric W. Biederman" <ebiederm@xmission.com>
    CC: "Alexander E. Patrakov" <patrakov@gmail.com>
    CC: "Ahmed S. Darwish" <darwish.07@gmail.com>
    CC: "Theodore Y. Ts'o" <tytso@mit.edu>
    CC: Willy Tarreau <w@1wt.eu>
    CC: Matthew Garrett <mjg59@srcf.ucam.org>
    CC: Vito Caputo <vcaputo@pengaru.com>
    CC: Andreas Dilger <adilger.kernel@dilger.ca>
    CC: Jan Kara <jack@suse.cz>
    CC: Ray Strode <rstrode@redhat.com>
    CC: William Jon McCann <mccann@jhu.edu>
    CC: zhangjs <zachary@baishancloud.com>
    CC: Andy Lutomirski <luto@kernel.org>
    CC: Florian Weimer <fweimer@redhat.com>
    CC: Lennart Poettering <mzxreary@0pointer.de>
    CC: Nicolai Stange <nstange@suse.de>
    Reviewed-by: Alexander Lobakin <alobakin@pm.me>
    Tested-by: Alexander Lobakin <alobakin@pm.me>
    Reviewed-by: Roman Drahtmueller <draht@schaltsekun.de>
    Tested-by: Roman Drahtmüller <draht@schaltsekun.de>
    Tested-by: Marcelo Henrique Cerri <marcelo.cerri@canonical.com>
    Tested-by: Neil Horman <nhorman@redhat.com>
    Tested-by: Jirka Hladky <jhladky@redhat.com>
    Reviewed-by: Jirka Hladky <jhladky@redhat.com>
    Signed-off-by: Stephan Mueller <smueller@chronox.de>
    ---
    crypto/drbg.c | 16 ++++++++++------
    include/crypto/drbg.h | 7 +++++++
    2 files changed, 17 insertions(+), 6 deletions(-)

    diff --git a/crypto/drbg.c b/crypto/drbg.c
    index ea85d4a0fe9e..74a9dca67698 100644
    --- a/crypto/drbg.c
    +++ b/crypto/drbg.c
    @@ -114,7 +114,7 @@
    * the SHA256 / AES 256 over other ciphers. Thus, the favored
    * DRBGs are the latest entries in this array.
    */
    -static const struct drbg_core drbg_cores[] = {
    +const struct drbg_core drbg_cores[] = {
    #ifdef CONFIG_CRYPTO_DRBG_CTR
    {
    .flags = DRBG_CTR | DRBG_STRENGTH128,
    @@ -191,6 +191,7 @@ static const struct drbg_core drbg_cores[] = {
    },
    #endif /* CONFIG_CRYPTO_DRBG_HMAC */
    };
    +EXPORT_SYMBOL(drbg_cores);

    static int drbg_uninstantiate(struct drbg_state *drbg);

    @@ -206,7 +207,7 @@ static int drbg_uninstantiate(struct drbg_state *drbg);
    * Return: normalized strength in *bytes* value or 32 as default
    * to counter programming errors
    */
    -static inline unsigned short drbg_sec_strength(drbg_flag_t flags)
    +unsigned short drbg_sec_strength(drbg_flag_t flags)
    {
    switch (flags & DRBG_STRENGTH_MASK) {
    case DRBG_STRENGTH128:
    @@ -219,6 +220,7 @@ static inline unsigned short drbg_sec_strength(drbg_flag_t flags)
    return 32;
    }
    }
    +EXPORT_SYMBOL(drbg_sec_strength);

    /*
    * FIPS 140-2 continuous self test for the noise source
    @@ -1215,7 +1217,7 @@ static int drbg_seed(struct drbg_state *drbg, struct drbg_string *pers,
    }

    /* Free all substructures in a DRBG state without the DRBG state structure */
    -static inline void drbg_dealloc_state(struct drbg_state *drbg)
    +void drbg_dealloc_state(struct drbg_state *drbg)
    {
    if (!drbg)
    return;
    @@ -1236,12 +1238,13 @@ static inline void drbg_dealloc_state(struct drbg_state *drbg)
    drbg->fips_primed = false;
    }
    }
    +EXPORT_SYMBOL(drbg_dealloc_state);

    /*
    * Allocate all sub-structures for a DRBG state.
    * The DRBG state structure must already be allocated.
    */
    -static inline int drbg_alloc_state(struct drbg_state *drbg)
    +int drbg_alloc_state(struct drbg_state *drbg)
    {
    int ret = -ENOMEM;
    unsigned int sb_size = 0;
    @@ -1322,6 +1325,7 @@ static inline int drbg_alloc_state(struct drbg_state *drbg)
    drbg_dealloc_state(drbg);
    return ret;
    }
    +EXPORT_SYMBOL(drbg_alloc_state);

    /*************************************************************************
    * DRBG interface functions
    @@ -1891,8 +1895,7 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
    *
    * return: flags
    */
    -static inline void drbg_convert_tfm_core(const char *cra_driver_name,
    - int *coreref, bool *pr)
    +void drbg_convert_tfm_core(const char *cra_driver_name, int *coreref, bool *pr)
    {
    int i = 0;
    size_t start = 0;
    @@ -1919,6 +1922,7 @@ static inline void drbg_convert_tfm_core(const char *cra_driver_name,
    }
    }
    }
    +EXPORT_SYMBOL(drbg_convert_tfm_core);

    static int drbg_kcapi_init(struct crypto_tfm *tfm)
    {
    diff --git a/include/crypto/drbg.h b/include/crypto/drbg.h
    index c4165126937e..71d53e028e6d 100644
    --- a/include/crypto/drbg.h
    +++ b/include/crypto/drbg.h
    @@ -278,4 +278,11 @@ enum drbg_prefixes {
    DRBG_PREFIX3
    };

    +extern int drbg_alloc_state(struct drbg_state *drbg);
    +extern void drbg_dealloc_state(struct drbg_state *drbg);
    +extern void drbg_convert_tfm_core(const char *cra_driver_name, int *coreref,
    + bool *pr);
    +extern const struct drbg_core drbg_cores[];
    +extern unsigned short drbg_sec_strength(drbg_flag_t flags);
    +
    #endif /* _DRBG_H */
    --
    2.31.1



    \
     
     \ /
      Last update: 2021-11-21 17:51    [W:4.076 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site