Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.31 119 lines 3.2 kB view raw
1/* 2 * Cryptographic API. 3 * 4 * s390 implementation of the SHA512 and SHA38 Secure Hash Algorithm. 5 * 6 * Copyright IBM Corp. 2007 7 * Author(s): Jan Glauber (jang@de.ibm.com) 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU General Public License as published by the Free 11 * Software Foundation; either version 2 of the License, or (at your option) 12 * any later version. 13 * 14 */ 15#include <crypto/internal/hash.h> 16#include <linux/init.h> 17#include <linux/module.h> 18 19#include "sha.h" 20#include "crypt_s390.h" 21 22static int sha512_init(struct shash_desc *desc) 23{ 24 struct s390_sha_ctx *ctx = shash_desc_ctx(desc); 25 26 *(__u64 *)&ctx->state[0] = 0x6a09e667f3bcc908ULL; 27 *(__u64 *)&ctx->state[2] = 0xbb67ae8584caa73bULL; 28 *(__u64 *)&ctx->state[4] = 0x3c6ef372fe94f82bULL; 29 *(__u64 *)&ctx->state[6] = 0xa54ff53a5f1d36f1ULL; 30 *(__u64 *)&ctx->state[8] = 0x510e527fade682d1ULL; 31 *(__u64 *)&ctx->state[10] = 0x9b05688c2b3e6c1fULL; 32 *(__u64 *)&ctx->state[12] = 0x1f83d9abfb41bd6bULL; 33 *(__u64 *)&ctx->state[14] = 0x5be0cd19137e2179ULL; 34 ctx->count = 0; 35 ctx->func = KIMD_SHA_512; 36 37 return 0; 38} 39 40static struct shash_alg sha512_alg = { 41 .digestsize = SHA512_DIGEST_SIZE, 42 .init = sha512_init, 43 .update = s390_sha_update, 44 .final = s390_sha_final, 45 .descsize = sizeof(struct s390_sha_ctx), 46 .base = { 47 .cra_name = "sha512", 48 .cra_driver_name= "sha512-s390", 49 .cra_priority = CRYPT_S390_PRIORITY, 50 .cra_flags = CRYPTO_ALG_TYPE_SHASH, 51 .cra_blocksize = SHA512_BLOCK_SIZE, 52 .cra_module = THIS_MODULE, 53 } 54}; 55 56MODULE_ALIAS("sha512"); 57 58static int sha384_init(struct shash_desc *desc) 59{ 60 struct s390_sha_ctx *ctx = shash_desc_ctx(desc); 61 62 *(__u64 *)&ctx->state[0] = 0xcbbb9d5dc1059ed8ULL; 63 *(__u64 *)&ctx->state[2] = 0x629a292a367cd507ULL; 64 *(__u64 *)&ctx->state[4] = 0x9159015a3070dd17ULL; 65 *(__u64 *)&ctx->state[6] = 0x152fecd8f70e5939ULL; 66 *(__u64 *)&ctx->state[8] = 0x67332667ffc00b31ULL; 67 *(__u64 *)&ctx->state[10] = 0x8eb44a8768581511ULL; 68 *(__u64 *)&ctx->state[12] = 0xdb0c2e0d64f98fa7ULL; 69 *(__u64 *)&ctx->state[14] = 0x47b5481dbefa4fa4ULL; 70 ctx->count = 0; 71 ctx->func = KIMD_SHA_512; 72 73 return 0; 74} 75 76static struct shash_alg sha384_alg = { 77 .digestsize = SHA384_DIGEST_SIZE, 78 .init = sha384_init, 79 .update = s390_sha_update, 80 .final = s390_sha_final, 81 .descsize = sizeof(struct s390_sha_ctx), 82 .base = { 83 .cra_name = "sha384", 84 .cra_driver_name= "sha384-s390", 85 .cra_priority = CRYPT_S390_PRIORITY, 86 .cra_flags = CRYPTO_ALG_TYPE_SHASH, 87 .cra_blocksize = SHA384_BLOCK_SIZE, 88 .cra_ctxsize = sizeof(struct s390_sha_ctx), 89 .cra_module = THIS_MODULE, 90 } 91}; 92 93MODULE_ALIAS("sha384"); 94 95static int __init init(void) 96{ 97 int ret; 98 99 if (!crypt_s390_func_available(KIMD_SHA_512)) 100 return -EOPNOTSUPP; 101 if ((ret = crypto_register_shash(&sha512_alg)) < 0) 102 goto out; 103 if ((ret = crypto_register_shash(&sha384_alg)) < 0) 104 crypto_unregister_shash(&sha512_alg); 105out: 106 return ret; 107} 108 109static void __exit fini(void) 110{ 111 crypto_unregister_shash(&sha512_alg); 112 crypto_unregister_shash(&sha384_alg); 113} 114 115module_init(init); 116module_exit(fini); 117 118MODULE_LICENSE("GPL"); 119MODULE_DESCRIPTION("SHA512 and SHA-384 Secure Hash Algorithm");