1 // SPDX-License-Identifier: GPL-2.0-or-later 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> 12 */ 13 14 #include <crypto/internal/hash.h> 15 #include <linux/init.h> 16 #include <linux/module.h> 17 #include <linux/types.h> 18 #include <crypto/sha1.h> 19 #include <crypto/sha1_base.h> 20 #include <asm/byteorder.h> 21 22 #include "sha1.h" 23 24 asmlinkage void sha1_block_data_order(struct sha1_state *digest, 25 const u8 *data, int rounds); 26 27 int sha1_update_arm(struct shash_desc *desc, const u8 *data, 28 unsigned int len) 29 { 30 /* make sure signature matches sha1_block_fn() */ 31 BUILD_BUG_ON(offsetof(struct sha1_state, state) != 0); 32 33 return sha1_base_do_update(desc, data, len, sha1_block_data_order); 34 } 35 EXPORT_SYMBOL_GPL(sha1_update_arm); 36 37 static int sha1_final(struct shash_desc *desc, u8 *out) 38 { 39 sha1_base_do_finalize(desc, sha1_block_data_order); 40 return sha1_base_finish(desc, out); 41 } 42 43 int sha1_finup_arm(struct shash_desc *desc, const u8 *data, 44 unsigned int len, u8 *out) 45 { 46 sha1_base_do_update(desc, data, len, sha1_block_data_order); 47 return sha1_final(desc, out); 48 } 49 EXPORT_SYMBOL_GPL(sha1_finup_arm); 50 51 static struct shash_alg alg = { 52 .digestsize = SHA1_DIGEST_SIZE, 53 .init = sha1_base_init, 54 .update = sha1_update_arm, 55 .final = sha1_final, 56 .finup = sha1_finup_arm, 57 .descsize = sizeof(struct sha1_state), 58 .base = { 59 .cra_name = "sha1", 60 .cra_driver_name= "sha1-asm", 61 .cra_priority = 150, 62 .cra_blocksize = SHA1_BLOCK_SIZE, 63 .cra_module = THIS_MODULE, 64 } 65 }; 66 67 68 static int __init sha1_mod_init(void) 69 { 70 return crypto_register_shash(&alg); 71 } 72 73 74 static void __exit sha1_mod_fini(void) 75 { 76 crypto_unregister_shash(&alg); 77 } 78 79 80 module_init(sha1_mod_init); 81 module_exit(sha1_mod_fini); 82 83 MODULE_LICENSE("GPL"); 84 MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm (ARM)"); 85 MODULE_ALIAS_CRYPTO("sha1"); 86 MODULE_AUTHOR("David McCullough <ucdevel@gmail.com>"); 87