]> git.ipfire.org Git - thirdparty/kernel/stable.git/blame - crypto/sha1_generic.c
Merge branch 'stable/for-linus-5.2' of git://git.kernel.org/pub/scm/linux/kernel...
[thirdparty/kernel/stable.git] / crypto / sha1_generic.c
CommitLineData
2874c5fd 1// SPDX-License-Identifier: GPL-2.0-or-later
1da177e4
LT
2/*
3 * Cryptographic API.
4 *
5 * SHA1 Secure Hash Algorithm.
6 *
7 * Derived from cryptoapi implementation, adapted for in-place
8 * scatterlist interface.
9 *
10 * Copyright (c) Alan Smithee.
11 * Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
12 * Copyright (c) Jean-Francois Dive <jef@linuxbe.org>
1da177e4 13 */
54ccb367 14#include <crypto/internal/hash.h>
1da177e4
LT
15#include <linux/init.h>
16#include <linux/module.h>
17#include <linux/mm.h>
1da177e4 18#include <linux/cryptohash.h>
06ace7a9 19#include <linux/types.h>
5265eeb2 20#include <crypto/sha.h>
7c71f0f7 21#include <crypto/sha1_base.h>
1da177e4
LT
22#include <asm/byteorder.h>
23
0c4c78de
LC
24const u8 sha1_zero_message_hash[SHA1_DIGEST_SIZE] = {
25 0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d,
26 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90,
27 0xaf, 0xd8, 0x07, 0x09
28};
29EXPORT_SYMBOL_GPL(sha1_zero_message_hash);
30
7c71f0f7
AB
31static void sha1_generic_block_fn(struct sha1_state *sst, u8 const *src,
32 int blocks)
1da177e4 33{
7c71f0f7 34 u32 temp[SHA_WORKSPACE_WORDS];
54ccb367 35
7c71f0f7
AB
36 while (blocks--) {
37 sha_transform(sst->state, src, temp);
38 src += SHA1_BLOCK_SIZE;
39 }
40 memzero_explicit(temp, sizeof(temp));
1da177e4
LT
41}
42
7c390170 43int crypto_sha1_update(struct shash_desc *desc, const u8 *data,
7c71f0f7 44 unsigned int len)
1da177e4 45{
7c71f0f7 46 return sha1_base_do_update(desc, data, len, sha1_generic_block_fn);
1da177e4 47}
7c390170 48EXPORT_SYMBOL(crypto_sha1_update);
1da177e4 49
54ccb367 50static int sha1_final(struct shash_desc *desc, u8 *out)
1da177e4 51{
7c71f0f7
AB
52 sha1_base_do_finalize(desc, sha1_generic_block_fn);
53 return sha1_base_finish(desc, out);
1da177e4
LT
54}
55
7c71f0f7
AB
56int crypto_sha1_finup(struct shash_desc *desc, const u8 *data,
57 unsigned int len, u8 *out)
e2a7ce4e 58{
7c71f0f7
AB
59 sha1_base_do_update(desc, data, len, sha1_generic_block_fn);
60 return sha1_final(desc, out);
e2a7ce4e 61}
7c71f0f7 62EXPORT_SYMBOL(crypto_sha1_finup);
e2a7ce4e 63
54ccb367
AKR
64static struct shash_alg alg = {
65 .digestsize = SHA1_DIGEST_SIZE,
7c71f0f7 66 .init = sha1_base_init,
7c390170 67 .update = crypto_sha1_update,
54ccb367 68 .final = sha1_final,
7c71f0f7 69 .finup = crypto_sha1_finup,
e2a7ce4e 70 .descsize = sizeof(struct sha1_state),
54ccb367
AKR
71 .base = {
72 .cra_name = "sha1",
73 .cra_driver_name= "sha1-generic",
90ef3e48 74 .cra_priority = 100,
54ccb367
AKR
75 .cra_blocksize = SHA1_BLOCK_SIZE,
76 .cra_module = THIS_MODULE,
77 }
1da177e4
LT
78};
79
3af5b90b 80static int __init sha1_generic_mod_init(void)
1da177e4 81{
54ccb367 82 return crypto_register_shash(&alg);
1da177e4
LT
83}
84
3af5b90b 85static void __exit sha1_generic_mod_fini(void)
1da177e4 86{
54ccb367 87 crypto_unregister_shash(&alg);
1da177e4
LT
88}
89
c4741b23 90subsys_initcall(sha1_generic_mod_init);
3af5b90b 91module_exit(sha1_generic_mod_fini);
1da177e4
LT
92
93MODULE_LICENSE("GPL");
94MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm");
b3be9a6d 95
5d26a105 96MODULE_ALIAS_CRYPTO("sha1");
3e14dcf7 97MODULE_ALIAS_CRYPTO("sha1-generic");