diff options
| -rw-r--r-- | crypto/Kconfig | 2 | ||||
| -rw-r--r-- | crypto/sha1_generic.c | 56 |
2 files changed, 32 insertions, 26 deletions
diff --git a/crypto/Kconfig b/crypto/Kconfig index edf6c71b576e..5386beb503e3 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig | |||
| @@ -351,7 +351,7 @@ config CRYPTO_RMD320 | |||
| 351 | 351 | ||
| 352 | config CRYPTO_SHA1 | 352 | config CRYPTO_SHA1 |
| 353 | tristate "SHA1 digest algorithm" | 353 | tristate "SHA1 digest algorithm" |
| 354 | select CRYPTO_ALGAPI | 354 | select CRYPTO_HASH |
| 355 | help | 355 | help |
| 356 | SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2). | 356 | SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2). |
| 357 | 357 | ||
diff --git a/crypto/sha1_generic.c b/crypto/sha1_generic.c index c7c6899e1fca..9efef20454cb 100644 --- a/crypto/sha1_generic.c +++ b/crypto/sha1_generic.c | |||
| @@ -16,10 +16,10 @@ | |||
| 16 | * any later version. | 16 | * any later version. |
| 17 | * | 17 | * |
| 18 | */ | 18 | */ |
| 19 | #include <crypto/internal/hash.h> | ||
| 19 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 20 | #include <linux/module.h> | 21 | #include <linux/module.h> |
| 21 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
| 22 | #include <linux/crypto.h> | ||
| 23 | #include <linux/cryptohash.h> | 23 | #include <linux/cryptohash.h> |
| 24 | #include <linux/types.h> | 24 | #include <linux/types.h> |
| 25 | #include <crypto/sha.h> | 25 | #include <crypto/sha.h> |
| @@ -31,9 +31,10 @@ struct sha1_ctx { | |||
| 31 | u8 buffer[64]; | 31 | u8 buffer[64]; |
| 32 | }; | 32 | }; |
| 33 | 33 | ||
| 34 | static void sha1_init(struct crypto_tfm *tfm) | 34 | static int sha1_init(struct shash_desc *desc) |
| 35 | { | 35 | { |
| 36 | struct sha1_ctx *sctx = crypto_tfm_ctx(tfm); | 36 | struct sha1_ctx *sctx = shash_desc_ctx(desc); |
| 37 | |||
| 37 | static const struct sha1_ctx initstate = { | 38 | static const struct sha1_ctx initstate = { |
| 38 | 0, | 39 | 0, |
| 39 | { SHA1_H0, SHA1_H1, SHA1_H2, SHA1_H3, SHA1_H4 }, | 40 | { SHA1_H0, SHA1_H1, SHA1_H2, SHA1_H3, SHA1_H4 }, |
| @@ -41,12 +42,14 @@ static void sha1_init(struct crypto_tfm *tfm) | |||
| 41 | }; | 42 | }; |
| 42 | 43 | ||
| 43 | *sctx = initstate; | 44 | *sctx = initstate; |
| 45 | |||
| 46 | return 0; | ||
| 44 | } | 47 | } |
| 45 | 48 | ||
| 46 | static void sha1_update(struct crypto_tfm *tfm, const u8 *data, | 49 | static int sha1_update(struct shash_desc *desc, const u8 *data, |
| 47 | unsigned int len) | 50 | unsigned int len) |
| 48 | { | 51 | { |
| 49 | struct sha1_ctx *sctx = crypto_tfm_ctx(tfm); | 52 | struct sha1_ctx *sctx = shash_desc_ctx(desc); |
| 50 | unsigned int partial, done; | 53 | unsigned int partial, done; |
| 51 | const u8 *src; | 54 | const u8 *src; |
| 52 | 55 | ||
| @@ -74,13 +77,15 @@ static void sha1_update(struct crypto_tfm *tfm, const u8 *data, | |||
| 74 | partial = 0; | 77 | partial = 0; |
| 75 | } | 78 | } |
| 76 | memcpy(sctx->buffer + partial, src, len - done); | 79 | memcpy(sctx->buffer + partial, src, len - done); |
| 80 | |||
| 81 | return 0; | ||
| 77 | } | 82 | } |
| 78 | 83 | ||
| 79 | 84 | ||
| 80 | /* Add padding and return the message digest. */ | 85 | /* Add padding and return the message digest. */ |
| 81 | static void sha1_final(struct crypto_tfm *tfm, u8 *out) | 86 | static int sha1_final(struct shash_desc *desc, u8 *out) |
| 82 | { | 87 | { |
| 83 | struct sha1_ctx *sctx = crypto_tfm_ctx(tfm); | 88 | struct sha1_ctx *sctx = shash_desc_ctx(desc); |
| 84 | __be32 *dst = (__be32 *)out; | 89 | __be32 *dst = (__be32 *)out; |
| 85 | u32 i, index, padlen; | 90 | u32 i, index, padlen; |
| 86 | __be64 bits; | 91 | __be64 bits; |
| @@ -91,10 +96,10 @@ static void sha1_final(struct crypto_tfm *tfm, u8 *out) | |||
| 91 | /* Pad out to 56 mod 64 */ | 96 | /* Pad out to 56 mod 64 */ |
| 92 | index = sctx->count & 0x3f; | 97 | index = sctx->count & 0x3f; |
| 93 | padlen = (index < 56) ? (56 - index) : ((64+56) - index); | 98 | padlen = (index < 56) ? (56 - index) : ((64+56) - index); |
| 94 | sha1_update(tfm, padding, padlen); | 99 | sha1_update(desc, padding, padlen); |
| 95 | 100 | ||
| 96 | /* Append length */ | 101 | /* Append length */ |
| 97 | sha1_update(tfm, (const u8 *)&bits, sizeof(bits)); | 102 | sha1_update(desc, (const u8 *)&bits, sizeof(bits)); |
| 98 | 103 | ||
| 99 | /* Store state in digest */ | 104 | /* Store state in digest */ |
| 100 | for (i = 0; i < 5; i++) | 105 | for (i = 0; i < 5; i++) |
| @@ -102,32 +107,33 @@ static void sha1_final(struct crypto_tfm *tfm, u8 *out) | |||
| 102 | 107 | ||
| 103 | /* Wipe context */ | 108 | /* Wipe context */ |
| 104 | memset(sctx, 0, sizeof *sctx); | 109 | memset(sctx, 0, sizeof *sctx); |
| 110 | |||
| 111 | return 0; | ||
| 105 | } | 112 | } |
| 106 | 113 | ||
| 107 | static struct crypto_alg alg = { | 114 | static struct shash_alg alg = { |
| 108 | .cra_name = "sha1", | 115 | .digestsize = SHA1_DIGEST_SIZE, |
| 109 | .cra_driver_name= "sha1-generic", | 116 | .init = sha1_init, |
| 110 | .cra_flags = CRYPTO_ALG_TYPE_DIGEST, | 117 | .update = sha1_update, |
| 111 | .cra_blocksize = SHA1_BLOCK_SIZE, | 118 | .final = sha1_final, |
| 112 | .cra_ctxsize = sizeof(struct sha1_ctx), | 119 | .descsize = sizeof(struct sha1_ctx), |
| 113 | .cra_module = THIS_MODULE, | 120 | .base = { |
| 114 | .cra_alignmask = 3, | 121 | .cra_name = "sha1", |
| 115 | .cra_list = LIST_HEAD_INIT(alg.cra_list), | 122 | .cra_driver_name= "sha1-generic", |
| 116 | .cra_u = { .digest = { | 123 | .cra_flags = CRYPTO_ALG_TYPE_SHASH, |
| 117 | .dia_digestsize = SHA1_DIGEST_SIZE, | 124 | .cra_blocksize = SHA1_BLOCK_SIZE, |
| 118 | .dia_init = sha1_init, | 125 | .cra_module = THIS_MODULE, |
| 119 | .dia_update = sha1_update, | 126 | } |
| 120 | .dia_final = sha1_final } } | ||
| 121 | }; | 127 | }; |
| 122 | 128 | ||
| 123 | static int __init sha1_generic_mod_init(void) | 129 | static int __init sha1_generic_mod_init(void) |
| 124 | { | 130 | { |
| 125 | return crypto_register_alg(&alg); | 131 | return crypto_register_shash(&alg); |
| 126 | } | 132 | } |
| 127 | 133 | ||
| 128 | static void __exit sha1_generic_mod_fini(void) | 134 | static void __exit sha1_generic_mod_fini(void) |
| 129 | { | 135 | { |
| 130 | crypto_unregister_alg(&alg); | 136 | crypto_unregister_shash(&alg); |
| 131 | } | 137 | } |
| 132 | 138 | ||
| 133 | module_init(sha1_generic_mod_init); | 139 | module_init(sha1_generic_mod_init); |
