Merge branch 'access-creds'
[linux-2.6-block.git] / arch / arm / crypto / sha1_glue.c
CommitLineData
2874c5fd 1// SPDX-License-Identifier: GPL-2.0-or-later
f0be44f4
DM
2/*
3 * Cryptographic API.
4 * Glue code for the SHA1 Secure Hash Algorithm assembler implementation
5 *
6 * This file is based on sha1_generic.c and sha1_ssse3_glue.c
7 *
8 * Copyright (c) Alan Smithee.
9 * Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
10 * Copyright (c) Jean-Francois Dive <jef@linuxbe.org>
11 * Copyright (c) Mathias Krause <minipli@googlemail.com>
f0be44f4
DM
12 */
13
14#include <crypto/internal/hash.h>
15#include <linux/init.h>
16#include <linux/module.h>
17#include <linux/cryptohash.h>
18#include <linux/types.h>
19#include <crypto/sha.h>
90451d6b 20#include <crypto/sha1_base.h>
f0be44f4
DM
21#include <asm/byteorder.h>
22
90451d6b 23#include "sha1.h"
f0be44f4 24
1f8673d3 25asmlinkage void sha1_block_data_order(u32 *digest,
f0be44f4
DM
26 const unsigned char *data, unsigned int rounds);
27
60468255
JK
28int sha1_update_arm(struct shash_desc *desc, const u8 *data,
29 unsigned int len)
f0be44f4 30{
90451d6b
AB
31 /* make sure casting to sha1_block_fn() is safe */
32 BUILD_BUG_ON(offsetof(struct sha1_state, state) != 0);
f0be44f4 33
90451d6b
AB
34 return sha1_base_do_update(desc, data, len,
35 (sha1_block_fn *)sha1_block_data_order);
f0be44f4 36}
60468255 37EXPORT_SYMBOL_GPL(sha1_update_arm);
f0be44f4 38
f0be44f4
DM
39static int sha1_final(struct shash_desc *desc, u8 *out)
40{
90451d6b
AB
41 sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_block_data_order);
42 return sha1_base_finish(desc, out);
f0be44f4
DM
43}
44
90451d6b
AB
45int sha1_finup_arm(struct shash_desc *desc, const u8 *data,
46 unsigned int len, u8 *out)
f0be44f4 47{
90451d6b
AB
48 sha1_base_do_update(desc, data, len,
49 (sha1_block_fn *)sha1_block_data_order);
50 return sha1_final(desc, out);
f0be44f4 51}
90451d6b 52EXPORT_SYMBOL_GPL(sha1_finup_arm);
f0be44f4
DM
53
54static struct shash_alg alg = {
55 .digestsize = SHA1_DIGEST_SIZE,
90451d6b 56 .init = sha1_base_init,
60468255 57 .update = sha1_update_arm,
f0be44f4 58 .final = sha1_final,
90451d6b 59 .finup = sha1_finup_arm,
1f8673d3 60 .descsize = sizeof(struct sha1_state),
f0be44f4
DM
61 .base = {
62 .cra_name = "sha1",
63 .cra_driver_name= "sha1-asm",
64 .cra_priority = 150,
f0be44f4
DM
65 .cra_blocksize = SHA1_BLOCK_SIZE,
66 .cra_module = THIS_MODULE,
67 }
68};
69
70
71static int __init sha1_mod_init(void)
72{
73 return crypto_register_shash(&alg);
74}
75
76
77static void __exit sha1_mod_fini(void)
78{
79 crypto_unregister_shash(&alg);
80}
81
82
83module_init(sha1_mod_init);
84module_exit(sha1_mod_fini);
85
86MODULE_LICENSE("GPL");
87MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm (ARM)");
5d26a105 88MODULE_ALIAS_CRYPTO("sha1");
f0be44f4 89MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>");