diff options
author | James Morris <jmorris@intercode.com.au> | 2002-10-27 11:04:35 -0800 |
---|---|---|
committer | James Morris <jmorris@intercode.com.au> | 2002-10-27 11:04:35 -0800 |
commit | 612893c0b9f117b1961cb4312126a635f4c96b72 (patch) | |
tree | 72f7c5c854281df950eb88b0a07d959000a6913a /crypto | |
parent | d02509cd85ea97b8b2729af6a8d0dc13073d1393 (diff) | |
download | history-612893c0b9f117b1961cb4312126a635f4c96b72.tar.gz |
[CRYPTO]: Algorithm lookup API change plus bug fixes.
- API change: implemented simplest version of algorithm lookup
by name (feedback from Rusty Russell and Herbert Valerio Riedel).
- Now need to add the following line to to /etc/modules.conf for
dynamic module loading:
alias des3_ede des
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/api.c | 88 | ||||
-rw-r--r-- | crypto/autoload.c | 28 | ||||
-rw-r--r-- | crypto/cipher.c | 43 | ||||
-rw-r--r-- | crypto/compress.c | 7 | ||||
-rw-r--r-- | crypto/des.c | 14 | ||||
-rw-r--r-- | crypto/digest.c | 22 | ||||
-rw-r--r-- | crypto/internal.h | 21 | ||||
-rw-r--r-- | crypto/md4.c | 2 | ||||
-rw-r--r-- | crypto/md5.c | 2 | ||||
-rw-r--r-- | crypto/sha1.c | 2 | ||||
-rw-r--r-- | crypto/tcrypt.c | 81 |
11 files changed, 180 insertions, 130 deletions
diff --git a/crypto/api.c b/crypto/api.c index 4ecc8ecd0f8b42..5d23c2c868c0cb 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -36,7 +36,7 @@ static inline void crypto_alg_put(struct crypto_alg *alg) __MOD_DEC_USE_COUNT(alg->cra_module); } -struct crypto_alg *crypto_alg_lookup(u32 algid) +struct crypto_alg *crypto_alg_lookup(char *name) { struct list_head *p; struct crypto_alg *alg = NULL; @@ -44,10 +44,13 @@ struct crypto_alg *crypto_alg_lookup(u32 algid) down_read(&crypto_alg_sem); list_for_each(p, &crypto_alg_list) { - if ((((struct crypto_alg *)p)->cra_id - & CRYPTO_ALG_MASK) == algid) { - if (crypto_alg_get((struct crypto_alg *)p)) - alg = (struct crypto_alg *)p; + struct crypto_alg *q = + list_entry(p, struct crypto_alg, cra_list); + + if (!(strcmp(q->cra_name, name))) { + + if (crypto_alg_get(q)) + alg = q; break; } } @@ -56,18 +59,43 @@ struct crypto_alg *crypto_alg_lookup(u32 algid) return alg; } +static int crypto_init_flags(struct crypto_tfm *tfm, u32 flags) +{ + tfm->crt_flags = 0; + + if (flags & CRYPTO_TFM_REQ_ATOMIC) + tfm->crt_flags |= CRYPTO_TFM_REQ_ATOMIC; + + switch (crypto_tfm_alg_type(tfm)) { + case CRYPTO_ALG_TYPE_CIPHER: + return crypto_init_cipher_flags(tfm, flags); + + case CRYPTO_ALG_TYPE_DIGEST: + return crypto_init_digest_flags(tfm, flags); + + case CRYPTO_ALG_TYPE_COMP: + return crypto_init_compress_flags(tfm, flags); + + default: + BUG(); + + } + + return -EINVAL; +} + static void crypto_init_ops(struct crypto_tfm *tfm) { - switch (crypto_tfm_type(tfm) & CRYPTO_TYPE_MASK) { - case CRYPTO_TYPE_CIPHER: + switch (crypto_tfm_alg_type(tfm)) { + case CRYPTO_ALG_TYPE_CIPHER: crypto_init_cipher_ops(tfm); break; - case CRYPTO_TYPE_DIGEST: + case CRYPTO_ALG_TYPE_DIGEST: crypto_init_digest_ops(tfm); break; - case CRYPTO_TYPE_COMP: + case CRYPTO_ALG_TYPE_COMP: crypto_init_compress_ops(tfm); break; @@ -77,16 +105,16 @@ static void crypto_init_ops(struct crypto_tfm *tfm) } } -struct crypto_tfm *crypto_alloc_tfm(u32 id) +struct crypto_tfm *crypto_alloc_tfm(char *name, u32 flags) { struct crypto_tfm *tfm = NULL; struct crypto_alg *alg; - alg = crypto_alg_lookup(id & CRYPTO_ALG_MASK); + alg = crypto_alg_lookup(name); #ifdef CONFIG_KMOD if (alg == NULL) { - crypto_alg_autoload(id & CRYPTO_ALG_MASK); - alg = crypto_alg_lookup(id & CRYPTO_ALG_MASK); + crypto_alg_autoload(name); + alg = crypto_alg_lookup(name); } #endif if (alg == NULL) @@ -102,17 +130,11 @@ struct crypto_tfm *crypto_alloc_tfm(u32 id) goto out_free_tfm; } - if ((alg->cra_id & CRYPTO_TYPE_MASK) == CRYPTO_TYPE_CIPHER) { - if (alg->cra_cipher.cia_ivsize) { - tfm->crt_cipher.cit_iv = - kmalloc(alg->cra_cipher.cia_ivsize, GFP_KERNEL); - if (tfm->crt_cipher.cit_iv == NULL) - goto out_free_ctx; - } - tfm->crt_cipher.cit_mode = id & CRYPTO_MODE_MASK; - } - tfm->__crt_alg = alg; + + if (crypto_init_flags(tfm, flags)) + goto out_free_ctx; + crypto_init_ops(tfm); goto out; @@ -134,8 +156,8 @@ void crypto_free_tfm(struct crypto_tfm *tfm) if (tfm->__crt_alg->cra_ctxsize) kfree(tfm->crt_ctx); - if (crypto_tfm_type(tfm) == CRYPTO_TYPE_CIPHER) - if (tfm->__crt_alg->cra_cipher.cia_ivsize) + if (crypto_tfm_alg_type(tfm) == CRYPTO_ALG_TYPE_CIPHER) + if (tfm->crt_cipher.cit_iv) kfree(tfm->crt_cipher.cit_iv); crypto_alg_put(tfm->__crt_alg); @@ -150,9 +172,10 @@ int crypto_register_alg(struct crypto_alg *alg) down_write(&crypto_alg_sem); list_for_each(p, &crypto_alg_list) { - struct crypto_alg *q = (struct crypto_alg *)p; + struct crypto_alg *q = + list_entry(p, struct crypto_alg, cra_list); - if (q->cra_id == alg->cra_id) { + if (!(strcmp(q->cra_name, alg->cra_name))) { ret = -EEXIST; goto out; } @@ -172,7 +195,7 @@ int crypto_unregister_alg(struct crypto_alg *alg) down_write(&crypto_alg_sem); list_for_each(p, &crypto_alg_list) { - if (alg == (struct crypto_alg *)p) { + if (alg == (void *)p) { list_del(p); ret = 0; goto out; @@ -215,16 +238,17 @@ static int c_show(struct seq_file *m, void *p) struct crypto_alg *alg = (struct crypto_alg *)p; seq_printf(m, "name : %s\n", alg->cra_name); - seq_printf(m, "id : 0x%08x\n", alg->cra_id); + seq_printf(m, "module : %s\n", alg->cra_module ? + alg->cra_module->name : "[static]"); seq_printf(m, "blocksize : %Zd\n", alg->cra_blocksize); - switch (alg->cra_id & CRYPTO_TYPE_MASK) { - case CRYPTO_TYPE_CIPHER: + switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) { + case CRYPTO_ALG_TYPE_CIPHER: seq_printf(m, "keysize : %Zd\n", alg->cra_cipher.cia_keysize); seq_printf(m, "ivsize : %Zd\n", alg->cra_cipher.cia_ivsize); break; - case CRYPTO_TYPE_DIGEST: + case CRYPTO_ALG_TYPE_DIGEST: seq_printf(m, "digestsize : %Zd\n", alg->cra_digest.dia_digestsize); break; diff --git a/crypto/autoload.c b/crypto/autoload.c index 0b9b12a2b788f8..3b40c65e141992 100644 --- a/crypto/autoload.c +++ b/crypto/autoload.c @@ -15,31 +15,17 @@ #include <linux/types.h> #include <linux/list.h> #include <linux/string.h> +#include <linux/module.h> #include <linux/kmod.h> #include <linux/crypto.h> #include "internal.h" -static struct { - u32 algid; - char *name; -} alg_modmap[] = { - { CRYPTO_ALG_DES, "des" }, - { CRYPTO_ALG_DES3_EDE, "des" }, - { CRYPTO_ALG_MD4, "md4" }, - { CRYPTO_ALG_MD5, "md5" }, - { CRYPTO_ALG_SHA1, "sha1" }, -}; -#define ALG_MAX_MODMAP 5 - -void crypto_alg_autoload(u32 algid) +/* + * A far more intelligent version of this is planned. For now, just + * try an exact match on the name of the algorithm. + */ +void crypto_alg_autoload(char *name) { - int i; - - for (i = 0; i < ALG_MAX_MODMAP ; i++) { - if ((alg_modmap[i].algid & CRYPTO_ALG_MASK) == algid) { - request_module(alg_modmap[i].name); - break; - } - } + request_module(name); return; } diff --git a/crypto/cipher.c b/crypto/cipher.c index ff598261f44690..7262ed9b8084e5 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -15,7 +15,9 @@ #include <linux/types.h> #include <linux/errno.h> #include <linux/list.h> +#include <linux/module.h> #include <linux/mm.h> +#include <linux/slab.h> #include <linux/highmem.h> #include <asm/scatterlist.h> #include <linux/crypto.h> @@ -50,7 +52,7 @@ static int copy_chunks(struct crypto_tfm *tfm, u8 *buf, int rlen, int *last, int in) { int i, copied, coff, j, aligned; - size_t bsize = crypto_tfm_blocksize(tfm); + size_t bsize = crypto_tfm_alg_blocksize(tfm); for (i = sgidx, j = copied = 0, aligned = 0 ; copied < bsize; i++) { int len = sg[i].length; @@ -115,11 +117,11 @@ static int crypt(struct crypto_tfm *tfm, struct scatterlist *sg, size_t nsg, cryptfn_t crfn, procfn_t prfn, int enc) { int i, coff; - size_t bsize = crypto_tfm_blocksize(tfm); + size_t bsize = crypto_tfm_alg_blocksize(tfm); u8 tmp[CRYPTO_MAX_BLOCK_SIZE]; if (sglen(sg, nsg) % bsize) { - tfm->crt_flags |= CRYPTO_BAD_BLOCK_LEN; + tfm->crt_flags |= CRYPTO_TFM_RES_BAD_BLOCK_LEN; return -EINVAL; } @@ -168,15 +170,15 @@ static void cbc_process(struct crypto_tfm *tfm, xor_64(tfm->crt_cipher.cit_iv, block); fn(tfm->crt_ctx, block, tfm->crt_cipher.cit_iv); memcpy(tfm->crt_cipher.cit_iv, block, - crypto_tfm_blocksize(tfm)); + crypto_tfm_alg_blocksize(tfm)); } else { u8 buf[CRYPTO_MAX_BLOCK_SIZE]; fn(tfm->crt_ctx, buf, block); xor_64(buf, tfm->crt_cipher.cit_iv); memcpy(tfm->crt_cipher.cit_iv, block, - crypto_tfm_blocksize(tfm)); - memcpy(block, buf, crypto_tfm_blocksize(tfm)); + crypto_tfm_alg_blocksize(tfm)); + memcpy(block, buf, crypto_tfm_alg_blocksize(tfm)); } } @@ -225,6 +227,27 @@ static int nocrypt(struct crypto_tfm *tfm, struct scatterlist *sg, size_t nsg) return -ENOSYS; } +int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags) +{ + struct crypto_alg *alg = tfm->__crt_alg; + u32 mode = flags & CRYPTO_TFM_MODE_MASK; + + tfm->crt_cipher.cit_mode = mode ? mode : CRYPTO_TFM_MODE_ECB; + + if (alg->cra_cipher.cia_ivsize && mode != CRYPTO_TFM_MODE_ECB) { + tfm->crt_cipher.cit_iv = + kmalloc(alg->cra_cipher.cia_ivsize, GFP_KERNEL); + if (tfm->crt_cipher.cit_iv == NULL) + return -ENOMEM; + } else + tfm->crt_cipher.cit_iv = NULL; + + if (flags & CRYPTO_TFM_REQ_WEAK_KEY) + tfm->crt_flags = CRYPTO_TFM_REQ_WEAK_KEY; + + return 0; +} + void crypto_init_cipher_ops(struct crypto_tfm *tfm) { struct cipher_tfm *ops = &tfm->crt_cipher; @@ -232,22 +255,22 @@ void crypto_init_cipher_ops(struct crypto_tfm *tfm) ops->cit_setkey = setkey; switch (tfm->crt_cipher.cit_mode) { - case CRYPTO_MODE_ECB: + case CRYPTO_TFM_MODE_ECB: ops->cit_encrypt = ecb_encrypt; ops->cit_decrypt = ecb_decrypt; break; - case CRYPTO_MODE_CBC: + case CRYPTO_TFM_MODE_CBC: ops->cit_encrypt = cbc_encrypt; ops->cit_decrypt = cbc_decrypt; break; - case CRYPTO_MODE_CFB: + case CRYPTO_TFM_MODE_CFB: ops->cit_encrypt = nocrypt; ops->cit_decrypt = nocrypt; break; - case CRYPTO_MODE_CTR: + case CRYPTO_TFM_MODE_CTR: ops->cit_encrypt = nocrypt; ops->cit_decrypt = nocrypt; break; diff --git a/crypto/compress.c b/crypto/compress.c index 9a6c2577d75d50..7217935b50508e 100644 --- a/crypto/compress.c +++ b/crypto/compress.c @@ -13,6 +13,8 @@ */ #include <linux/types.h> #include <linux/list.h> +#include <linux/errno.h> +#include <linux/module.h> #include <asm/scatterlist.h> #include <linux/string.h> #include <linux/crypto.h> @@ -32,6 +34,11 @@ static void crypto_decompress(struct crypto_tfm *tfm) return; } +int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags) +{ + return crypto_cipher_flags(flags) ? -EINVAL : 0; +} + void crypto_init_compress_ops(struct crypto_tfm *tfm) { struct compress_tfm *ops = &tfm->crt_compress; diff --git a/crypto/des.c b/crypto/des.c index c9027e2f4c56d6..dd2a2cf681c9c4 100644 --- a/crypto/des.c +++ b/crypto/des.c @@ -1036,7 +1036,7 @@ static int setkey(u32 *expkey, const u8 *key, size_t keylen, int *flags) u8 bits0[56], bits1[56]; if (keylen != DES_KEY_SIZE) { - *flags |= CRYPTO_BAD_KEY_LEN; + *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; return -EINVAL; } @@ -1050,7 +1050,7 @@ static int setkey(u32 *expkey, const u8 *key, size_t keylen, int *flags) n |= parity[key[7]]; w = 0x88888888L; - if ((*flags & CRYPTO_WEAK_KEY_CHECK) + if ((*flags & CRYPTO_TFM_REQ_WEAK_KEY) && !((n - (w >> 3)) & w)) { /* 1 in 10^10 keys passes this test */ if (n < 0x41415151) { if (n < 0x31312121) { @@ -1108,7 +1108,7 @@ static int setkey(u32 *expkey, const u8 *key, size_t keylen, int *flags) goto not_weak; weak: - *flags |= CRYPTO_WEAK_KEY; + *flags |= CRYPTO_TFM_RES_WEAK_KEY; return -EINVAL; } @@ -1211,7 +1211,7 @@ static int des3_ede_setkey(void *ctx, const u8 *key, size_t keylen, int *flags) struct des3_ede_ctx *dctx = ctx; if (keylen != DES3_EDE_KEY_SIZE) { - *flags |= CRYPTO_BAD_KEY_LEN; + *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; return -EINVAL; } @@ -1219,7 +1219,7 @@ static int des3_ede_setkey(void *ctx, const u8 *key, size_t keylen, int *flags) memcmp(&key[DES_KEY_SIZE], &key[DES_KEY_SIZE * 2], DES_KEY_SIZE))) { - *flags |= CRYPTO_BAD_KEY_SCHED; + *flags |= CRYPTO_TFM_RES_BAD_KEY_SCHED; return -EINVAL; } @@ -1255,8 +1255,8 @@ static void des3_ede_decrypt(void *ctx, u8 *dst, u8 *src) } static struct crypto_alg des_alg = { - .cra_id = CRYPTO_ALG_DES, .cra_name = "des", + .cra_flags = CRYPTO_ALG_TYPE_CIPHER, .cra_blocksize = DES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct des_ctx), .cra_module = THIS_MODULE, @@ -1269,8 +1269,8 @@ static struct crypto_alg des_alg = { }; static struct crypto_alg des3_ede_alg = { - .cra_id = CRYPTO_ALG_DES3_EDE, .cra_name = "des3_ede", + .cra_flags = CRYPTO_ALG_TYPE_CIPHER, .cra_blocksize = DES3_EDE_BLOCK_SIZE, .cra_ctxsize = sizeof(struct des3_ede_ctx), .cra_module = THIS_MODULE, diff --git a/crypto/digest.c b/crypto/digest.c index fc0e2221cfa57a..a5a406b5f308bd 100644 --- a/crypto/digest.c +++ b/crypto/digest.c @@ -16,6 +16,7 @@ */ #include <linux/types.h> #include <linux/list.h> +#include <linux/module.h> #include <linux/mm.h> #include <linux/highmem.h> #include <asm/scatterlist.h> @@ -71,15 +72,15 @@ static void hmac(struct crypto_tfm *tfm, u8 *key, size_t keylen, { int i; struct scatterlist tmp; - char ipad[crypto_tfm_blocksize(tfm) + 1]; - char opad[crypto_tfm_blocksize(tfm) + 1]; + char ipad[crypto_tfm_alg_blocksize(tfm) + 1]; + char opad[crypto_tfm_alg_blocksize(tfm) + 1]; - if (keylen > crypto_tfm_blocksize(tfm)) { + if (keylen > crypto_tfm_alg_blocksize(tfm)) { tmp.page = virt_to_page(key); tmp.offset = ((long)key & ~PAGE_MASK); tmp.length = keylen; crypto_digest_digest(tfm, &tmp, 1, key); - keylen = crypto_tfm_digestsize(tfm); + keylen = crypto_tfm_alg_digestsize(tfm); } memset(ipad, 0, sizeof(ipad)); @@ -87,14 +88,14 @@ static void hmac(struct crypto_tfm *tfm, u8 *key, size_t keylen, memcpy(ipad, key, keylen); memcpy(opad, key, keylen); - for (i = 0; i < crypto_tfm_blocksize(tfm); i++) { + for (i = 0; i < crypto_tfm_alg_blocksize(tfm); i++) { ipad[i] ^= 0x36; opad[i] ^= 0x5c; } tmp.page = virt_to_page(ipad); tmp.offset = ((long)ipad & ~PAGE_MASK); - tmp.length = crypto_tfm_blocksize(tfm); + tmp.length = crypto_tfm_alg_blocksize(tfm); crypto_digest_init(tfm); crypto_digest_update(tfm, &tmp, 1); @@ -103,20 +104,25 @@ static void hmac(struct crypto_tfm *tfm, u8 *key, size_t keylen, tmp.page = virt_to_page(opad); tmp.offset = ((long)opad & ~PAGE_MASK); - tmp.length = crypto_tfm_blocksize(tfm); + tmp.length = crypto_tfm_alg_blocksize(tfm); crypto_digest_init(tfm); crypto_digest_update(tfm, &tmp, 1); tmp.page = virt_to_page(out); tmp.offset = ((long)out & ~PAGE_MASK); - tmp.length = crypto_tfm_digestsize(tfm); + tmp.length = crypto_tfm_alg_digestsize(tfm); crypto_digest_update(tfm, &tmp, 1); crypto_digest_final(tfm, out); return; } +int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags) +{ + return crypto_cipher_flags(flags) ? -EINVAL : 0; +} + void crypto_init_digest_ops(struct crypto_tfm *tfm) { struct digest_tfm *ops = &tfm->crt_digest; diff --git a/crypto/internal.h b/crypto/internal.h index 497e5526a8fea3..56de56c1f6f423 100644 --- a/crypto/internal.h +++ b/crypto/internal.h @@ -19,8 +19,8 @@ static inline void *crypto_kmap(struct crypto_tfm *tfm, struct page *page) { - if (tfm->crt_flags & CRYPTO_ATOMIC) { -#ifdef CONFIG_HIGHMEM + if (tfm->crt_flags & CRYPTO_TFM_REQ_ATOMIC) { +#ifdef CONFIG_HIGHMEM /* XXX: remove this after the api change */ local_bh_disable(); #endif return kmap_atomic(page, KM_CRYPTO_SOFTIRQ); @@ -30,9 +30,9 @@ static inline void *crypto_kmap(struct crypto_tfm *tfm, struct page *page) static inline void crypto_kunmap(struct crypto_tfm *tfm, void *vaddr) { - if (tfm->crt_flags & CRYPTO_ATOMIC) { + if (tfm->crt_flags & CRYPTO_TFM_REQ_ATOMIC) { kunmap_atomic(vaddr, KM_CRYPTO_SOFTIRQ); -#ifdef CONFIG_HIGHMEM +#ifdef CONFIG_HIGHMEM /* XXX: remove this after the api change */ local_bh_enable(); #endif } else @@ -41,14 +41,23 @@ static inline void crypto_kunmap(struct crypto_tfm *tfm, void *vaddr) static inline void crypto_yield(struct crypto_tfm *tfm) { - if (!(tfm->crt_flags & CRYPTO_ATOMIC)) + if (!(tfm->crt_flags & CRYPTO_TFM_REQ_ATOMIC)) cond_resched(); } +static inline int crypto_cipher_flags(u32 flags) +{ + return flags & (CRYPTO_TFM_MODE_MASK|CRYPTO_TFM_REQ_WEAK_KEY); +} + #ifdef CONFIG_KMOD -void crypto_alg_autoload(u32 algid); +void crypto_alg_autoload(char *name); #endif +int crypto_init_digest_flags(struct crypto_tfm *tfm, u32 flags); +int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags); +int crypto_init_compress_flags(struct crypto_tfm *tfm, u32 flags); + void crypto_init_digest_ops(struct crypto_tfm *tfm); void crypto_init_cipher_ops(struct crypto_tfm *tfm); void crypto_init_compress_ops(struct crypto_tfm *tfm); diff --git a/crypto/md4.c b/crypto/md4.c index 10c20a970f93d3..84d6c41829cfcd 100644 --- a/crypto/md4.c +++ b/crypto/md4.c @@ -221,8 +221,8 @@ static void md4_final(void *ctx, u8 *out) } static struct crypto_alg alg = { - .cra_id = CRYPTO_ALG_MD4, .cra_name = "md4", + .cra_flags = CRYPTO_ALG_TYPE_DIGEST, .cra_blocksize = MD4_HMAC_BLOCK_SIZE, .cra_ctxsize = sizeof(struct md4_ctx), .cra_module = THIS_MODULE, diff --git a/crypto/md5.c b/crypto/md5.c index a30b687b7dd7e4..71ba809b0a3213 100644 --- a/crypto/md5.c +++ b/crypto/md5.c @@ -214,8 +214,8 @@ static void md5_final(void *ctx, u8 *out) } static struct crypto_alg alg = { - .cra_id = CRYPTO_ALG_MD5, .cra_name = "md5", + .cra_flags = CRYPTO_ALG_TYPE_DIGEST, .cra_blocksize = MD5_HMAC_BLOCK_SIZE, .cra_ctxsize = sizeof(struct md5_ctx), .cra_module = THIS_MODULE, diff --git a/crypto/sha1.c b/crypto/sha1.c index bb3bd729ca2679..7514735c26378d 100644 --- a/crypto/sha1.c +++ b/crypto/sha1.c @@ -178,8 +178,8 @@ static void sha1_final(void* ctx, u8 *out) } static struct crypto_alg alg = { - .cra_id = CRYPTO_ALG_SHA1, .cra_name = "sha1", + .cra_flags = CRYPTO_ALG_TYPE_DIGEST, .cra_blocksize = SHA1_HMAC_BLOCK_SIZE, .cra_ctxsize = sizeof(struct sha1_ctx), .cra_module = THIS_MODULE, diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c index ae10c643a31ff6..16eb7104e8d8a2 100644 --- a/crypto/tcrypt.c +++ b/crypto/tcrypt.c @@ -76,9 +76,9 @@ static void test_md5(void) memcpy(tvmem, md5_tv_template, tsize); md5_tv = (void *)tvmem; - tfm = crypto_alloc_tfm(CRYPTO_ALG_MD5); + tfm = crypto_alloc_tfm("md5", 0); if (tfm == NULL) { - printk("failed to load transform for CRYPTO_ALG_MD5\n"); + printk("failed to load transform for md5\n"); return; } @@ -95,8 +95,8 @@ static void test_md5(void) crypto_digest_update(tfm, sg, 1); crypto_digest_final(tfm, result); - hexdump(result, crypto_tfm_digestsize(tfm)); - printk("%s\n", memcmp(result, md5_tv[i].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); + printk("%s\n", memcmp(result, md5_tv[i].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); } printk("\ntesting md5 across pages\n"); @@ -118,9 +118,9 @@ static void test_md5(void) memset(result, 0, sizeof(result)); crypto_digest_digest(tfm, sg, 2, result); - hexdump(result, crypto_tfm_digestsize(tfm)); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); - printk("%s\n", memcmp(result, md5_tv[4].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + printk("%s\n", memcmp(result, md5_tv[4].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); printk("\ntesting hmac_md5\n"); @@ -144,8 +144,8 @@ static void test_md5(void) crypto_digest_hmac(tfm, hmac_md5_tv[i].key, strlen(hmac_md5_tv[i].key),sg , 1, result); - hexdump(result, crypto_tfm_digestsize(tfm)); - printk("%s\n", memcmp(result, hmac_md5_tv[i].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); + printk("%s\n", memcmp(result, hmac_md5_tv[i].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); } printk("\ntesting hmac_md5 across pages\n"); @@ -167,9 +167,9 @@ static void test_md5(void) memset(result, 0, sizeof(result)); crypto_digest_hmac(tfm, hmac_md5_tv[1].key, strlen(hmac_md5_tv[1].key), sg, 2, result); - hexdump(result, crypto_tfm_digestsize(tfm)); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); - printk("%s\n", memcmp(result, hmac_md5_tv[1].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + printk("%s\n", memcmp(result, hmac_md5_tv[1].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); crypto_free_tfm(tfm); } @@ -195,9 +195,9 @@ static void test_md4(void) memcpy(tvmem, md4_tv_template, tsize); md4_tv = (void *)tvmem; - tfm = crypto_alloc_tfm(CRYPTO_ALG_MD4); + tfm = crypto_alloc_tfm("md4", 0); if (tfm == NULL) { - printk("failed to load transform for CRYPTO_ALG_MD4\n"); + printk("failed to load transform for md4\n"); return; } @@ -212,8 +212,8 @@ static void test_md4(void) crypto_digest_digest(tfm, sg, 1, result); - hexdump(result, crypto_tfm_digestsize(tfm)); - printk("%s\n", memcmp(result, md4_tv[i].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); + printk("%s\n", memcmp(result, md4_tv[i].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); } crypto_free_tfm(tfm); @@ -241,9 +241,9 @@ static void test_sha1(void) memcpy(tvmem, sha1_tv_template, tsize); sha1_tv = (void *)tvmem; - tfm = crypto_alloc_tfm(CRYPTO_ALG_SHA1); + tfm = crypto_alloc_tfm("sha1", 0); if (tfm == NULL) { - printk("failed to load transform for CRYPTO_ALG_SHA1\n"); + printk("failed to load transform for sha1\n"); return; } @@ -260,8 +260,8 @@ static void test_sha1(void) crypto_digest_update(tfm, sg, 1); crypto_digest_final(tfm, result); - hexdump(result, crypto_tfm_digestsize(tfm)); - printk("%s\n", memcmp(result, sha1_tv[i].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); + printk("%s\n", memcmp(result, sha1_tv[i].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); } printk("\ntesting sha1 across pages\n"); @@ -283,8 +283,8 @@ static void test_sha1(void) memset(result, 0, sizeof(result)); crypto_digest_digest(tfm, sg, 2, result); - hexdump(result, crypto_tfm_digestsize(tfm)); - printk("%s\n", memcmp(result, sha1_tv[1].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); + printk("%s\n", memcmp(result, sha1_tv[1].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); printk("\ntesting hmac_sha1\n"); @@ -309,7 +309,7 @@ static void test_sha1(void) crypto_digest_hmac(tfm, hmac_sha1_tv[i].key, strlen(hmac_sha1_tv[i].key),sg , 1, result); hexdump(result, sizeof(result)); - printk("%s\n", memcmp(result, hmac_sha1_tv[i].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + printk("%s\n", memcmp(result, hmac_sha1_tv[i].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); } printk("\ntesting hmac_sha1 across pages\n"); @@ -332,9 +332,9 @@ static void test_sha1(void) memset(result, 0, sizeof(result)); crypto_digest_hmac(tfm, hmac_sha1_tv[1].key, strlen(hmac_sha1_tv[1].key), sg, 2, result); - hexdump(result, crypto_tfm_digestsize(tfm)); + hexdump(result, crypto_tfm_alg_digestsize(tfm)); - printk("%s\n", memcmp(result, hmac_sha1_tv[1].digest, crypto_tfm_digestsize(tfm)) ? "fail" : "pass"); + printk("%s\n", memcmp(result, hmac_sha1_tv[1].digest, crypto_tfm_alg_digestsize(tfm)) ? "fail" : "pass"); crypto_free_tfm(tfm); } @@ -360,9 +360,9 @@ void test_des(void) memcpy(tvmem, des_enc_tv_template, tsize); des_tv = (void *)tvmem; - tfm = crypto_alloc_tfm(CRYPTO_ALG_DES_ECB); + tfm = crypto_alloc_tfm("des", 0); if (tfm == NULL) { - printk("failed to load transform for CRYPTO_ALG_DES_ECB\n"); + printk("failed to load transform for des (default ecb)\n"); return; } @@ -370,8 +370,8 @@ void test_des(void) printk("test %d:\n", i + 1); key = des_tv[i].key; - - tfm->crt_flags = CRYPTO_WEAK_KEY_CHECK; + tfm->crt_flags |= CRYPTO_TFM_REQ_WEAK_KEY; + ret = crypto_cipher_setkey(tfm, key, 8); if (ret) { printk("setkey() failed flags=%x\n", tfm->crt_flags); @@ -700,7 +700,7 @@ void test_des(void) */ i = 7; key = des_tv[i].key; - tfm->crt_flags = CRYPTO_ATOMIC; + tfm->crt_flags = CRYPTO_TFM_REQ_ATOMIC; ret = crypto_cipher_setkey(tfm, key, 8); if (ret) { @@ -761,7 +761,6 @@ void test_des(void) sg[7].length = 1; ret = crypto_cipher_encrypt(tfm, sg, 8); - if (ret) { printk("encrypt() failed flags=%x\n", tfm->crt_flags); goto out; @@ -926,9 +925,9 @@ void test_des(void) crypto_free_tfm(tfm); - tfm = crypto_alloc_tfm(CRYPTO_ALG_DES_CBC); + tfm = crypto_alloc_tfm("des", CRYPTO_TFM_MODE_CBC); if (tfm == NULL) { - printk("failed to load transform for CRYPTO_ALG_DES_CBC\n"); + printk("failed to load transform for des cbc\n"); return; } @@ -945,7 +944,7 @@ void test_des(void) for (i = 0; i < DES_CBC_ENC_TEST_VECTORS; i++) { printk("test %d:\n", i + 1); - tfm->crt_flags = CRYPTO_ATOMIC; + tfm->crt_flags |= CRYPTO_TFM_REQ_ATOMIC; key = des_tv[i].key; ret = crypto_cipher_setkey(tfm, key, 8); @@ -961,7 +960,7 @@ void test_des(void) sg[0].offset = ((long)p & ~PAGE_MASK); sg[0].length = len; - crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_ivsize(tfm)); + crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm)); ret = crypto_cipher_encrypt(tfm, sg, 1); if (ret) { @@ -987,7 +986,7 @@ void test_des(void) printk("\ntesting des cbc encryption chunking scenario F\n"); i = 4; - tfm = crypto_alloc_tfm(CRYPTO_ALG_DES_CBC); + tfm = crypto_alloc_tfm("des", CRYPTO_TFM_MODE_CBC); if (tfm == NULL) { printk("failed to load transform for CRYPTO_ALG_DES_CCB\n"); return; @@ -1018,7 +1017,7 @@ void test_des(void) sg[1].offset = ((long)p & ~PAGE_MASK); sg[1].length = 11; - crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_ivsize(tfm)); + crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm)); ret = crypto_cipher_encrypt(tfm, sg, 2); if (ret) { @@ -1066,7 +1065,7 @@ void test_des(void) sg[0].offset = ((long)p & ~PAGE_MASK); sg[0].length = len; - crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_blocksize(tfm)); + crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_alg_blocksize(tfm)); ret = crypto_cipher_decrypt(tfm, sg, 1); if (ret) { @@ -1116,7 +1115,7 @@ void test_des(void) sg[1].offset = ((long)p & ~PAGE_MASK); sg[1].length = 4; - crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_ivsize(tfm)); + crypto_cipher_copy_iv(tfm, des_tv[i].iv, crypto_tfm_alg_ivsize(tfm)); ret = crypto_cipher_decrypt(tfm, sg, 2); if (ret) { @@ -1161,9 +1160,9 @@ void test_des3_ede(void) memcpy(tvmem, des3_ede_enc_tv_template, tsize); des_tv = (void *)tvmem; - tfm = crypto_alloc_tfm(CRYPTO_ALG_DES3_EDE_ECB); + tfm = crypto_alloc_tfm("des3_ede", CRYPTO_TFM_MODE_ECB); if (tfm == NULL) { - printk("failed to load transform for CRYPTO_ALG_DES3_EDE_ECB\n"); + printk("failed to load transform for 3des ecb\n"); return; } @@ -1171,8 +1170,6 @@ void test_des3_ede(void) printk("test %d:\n", i + 1); key = des_tv[i].key; - - tfm->crt_flags = CRYPTO_WEAK_KEY_CHECK; ret = crypto_cipher_setkey(tfm, key, 24); if (ret) { printk("setkey() failed flags=%x\n", tfm->crt_flags); @@ -1214,8 +1211,6 @@ void test_des3_ede(void) printk("test %d:\n", i + 1); key = des_tv[i].key; - - tfm->crt_flags = CRYPTO_WEAK_KEY_CHECK; ret = crypto_cipher_setkey(tfm, key, 24); if (ret) { printk("setkey() failed flags=%x\n", tfm->crt_flags); |