diff options
author | LABBE Corentin <clabbe.montjoie@gmail.com> | 2015-12-17 07:45:39 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-12-22 07:43:35 -0500 |
commit | 0c4c78de0417ced1da92351a3013e631860ea576 (patch) | |
tree | 1901728828a5891d3a8e1f5db23226682a9bb41d | |
parent | 51d77dddfff4a554744bfa0e67cf571319635645 (diff) |
crypto: hash - add zero length message hash for shax and md5
Some crypto drivers cannot process empty data message and return a
precalculated hash for md5/sha1/sha224/sha256.
This patch add thoses precalculated hash in include/crypto.
Signed-off-by: LABBE Corentin <clabbe.montjoie@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | crypto/md5.c | 6 | ||||
-rw-r--r-- | crypto/sha1_generic.c | 7 | ||||
-rw-r--r-- | crypto/sha256_generic.c | 16 | ||||
-rw-r--r-- | include/crypto/md5.h | 2 | ||||
-rw-r--r-- | include/crypto/sha.h | 6 |
5 files changed, 37 insertions, 0 deletions
diff --git a/crypto/md5.c b/crypto/md5.c index 33d17e9a8702..2355a7c25c45 100644 --- a/crypto/md5.c +++ b/crypto/md5.c | |||
@@ -24,6 +24,12 @@ | |||
24 | #include <linux/cryptohash.h> | 24 | #include <linux/cryptohash.h> |
25 | #include <asm/byteorder.h> | 25 | #include <asm/byteorder.h> |
26 | 26 | ||
27 | const u8 md5_zero_message_hash[MD5_DIGEST_SIZE] = { | ||
28 | 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, | ||
29 | 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e, | ||
30 | }; | ||
31 | EXPORT_SYMBOL_GPL(md5_zero_message_hash); | ||
32 | |||
27 | /* XXX: this stuff can be optimized */ | 33 | /* XXX: this stuff can be optimized */ |
28 | static inline void le32_to_cpu_array(u32 *buf, unsigned int words) | 34 | static inline void le32_to_cpu_array(u32 *buf, unsigned int words) |
29 | { | 35 | { |
diff --git a/crypto/sha1_generic.c b/crypto/sha1_generic.c index 39e3acc438d9..6877cbb9105f 100644 --- a/crypto/sha1_generic.c +++ b/crypto/sha1_generic.c | |||
@@ -26,6 +26,13 @@ | |||
26 | #include <crypto/sha1_base.h> | 26 | #include <crypto/sha1_base.h> |
27 | #include <asm/byteorder.h> | 27 | #include <asm/byteorder.h> |
28 | 28 | ||
29 | const u8 sha1_zero_message_hash[SHA1_DIGEST_SIZE] = { | ||
30 | 0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d, | ||
31 | 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90, | ||
32 | 0xaf, 0xd8, 0x07, 0x09 | ||
33 | }; | ||
34 | EXPORT_SYMBOL_GPL(sha1_zero_message_hash); | ||
35 | |||
29 | static void sha1_generic_block_fn(struct sha1_state *sst, u8 const *src, | 36 | static void sha1_generic_block_fn(struct sha1_state *sst, u8 const *src, |
30 | int blocks) | 37 | int blocks) |
31 | { | 38 | { |
diff --git a/crypto/sha256_generic.c b/crypto/sha256_generic.c index 78431163ed3c..8f9c47e1a96e 100644 --- a/crypto/sha256_generic.c +++ b/crypto/sha256_generic.c | |||
@@ -27,6 +27,22 @@ | |||
27 | #include <asm/byteorder.h> | 27 | #include <asm/byteorder.h> |
28 | #include <asm/unaligned.h> | 28 | #include <asm/unaligned.h> |
29 | 29 | ||
30 | const u8 sha224_zero_message_hash[SHA224_DIGEST_SIZE] = { | ||
31 | 0xd1, 0x4a, 0x02, 0x8c, 0x2a, 0x3a, 0x2b, 0xc9, 0x47, | ||
32 | 0x61, 0x02, 0xbb, 0x28, 0x82, 0x34, 0xc4, 0x15, 0xa2, | ||
33 | 0xb0, 0x1f, 0x82, 0x8e, 0xa6, 0x2a, 0xc5, 0xb3, 0xe4, | ||
34 | 0x2f | ||
35 | }; | ||
36 | EXPORT_SYMBOL_GPL(sha224_zero_message_hash); | ||
37 | |||
38 | const u8 sha256_zero_message_hash[SHA256_DIGEST_SIZE] = { | ||
39 | 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, | ||
40 | 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, | ||
41 | 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, | ||
42 | 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55 | ||
43 | }; | ||
44 | EXPORT_SYMBOL_GPL(sha256_zero_message_hash); | ||
45 | |||
30 | static inline u32 Ch(u32 x, u32 y, u32 z) | 46 | static inline u32 Ch(u32 x, u32 y, u32 z) |
31 | { | 47 | { |
32 | return z ^ (x & (y ^ z)); | 48 | return z ^ (x & (y ^ z)); |
diff --git a/include/crypto/md5.h b/include/crypto/md5.h index 146af825eedb..327deac963c0 100644 --- a/include/crypto/md5.h +++ b/include/crypto/md5.h | |||
@@ -13,6 +13,8 @@ | |||
13 | #define MD5_H2 0x98badcfeUL | 13 | #define MD5_H2 0x98badcfeUL |
14 | #define MD5_H3 0x10325476UL | 14 | #define MD5_H3 0x10325476UL |
15 | 15 | ||
16 | extern const u8 md5_zero_message_hash[MD5_DIGEST_SIZE]; | ||
17 | |||
16 | struct md5_state { | 18 | struct md5_state { |
17 | u32 hash[MD5_HASH_WORDS]; | 19 | u32 hash[MD5_HASH_WORDS]; |
18 | u32 block[MD5_BLOCK_WORDS]; | 20 | u32 block[MD5_BLOCK_WORDS]; |
diff --git a/include/crypto/sha.h b/include/crypto/sha.h index dd7905a3c22e..c94d3eb1cefd 100644 --- a/include/crypto/sha.h +++ b/include/crypto/sha.h | |||
@@ -64,6 +64,12 @@ | |||
64 | #define SHA512_H6 0x1f83d9abfb41bd6bULL | 64 | #define SHA512_H6 0x1f83d9abfb41bd6bULL |
65 | #define SHA512_H7 0x5be0cd19137e2179ULL | 65 | #define SHA512_H7 0x5be0cd19137e2179ULL |
66 | 66 | ||
67 | extern const u8 sha1_zero_message_hash[SHA1_DIGEST_SIZE]; | ||
68 | |||
69 | extern const u8 sha224_zero_message_hash[SHA224_DIGEST_SIZE]; | ||
70 | |||
71 | extern const u8 sha256_zero_message_hash[SHA256_DIGEST_SIZE]; | ||
72 | |||
67 | struct sha1_state { | 73 | struct sha1_state { |
68 | u32 state[SHA1_DIGEST_SIZE / 4]; | 74 | u32 state[SHA1_DIGEST_SIZE / 4]; |
69 | u64 count; | 75 | u64 count; |