4
* s390 implementation of the SHA1 Secure Hash Algorithm.
6
* Derived from cryptoapi implementation, adapted for in-place
7
* scatterlist interface. Originally based on the public domain
8
* implementation written by Steve Reid.
11
* Copyright IBM Corp. 2003,2007
12
* Author(s): Thomas Spatzier
13
* Jan Glauber (jan.glauber@de.ibm.com)
15
* Derived from "crypto/sha1_generic.c"
16
* Copyright (c) Alan Smithee.
17
* Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
18
* Copyright (c) Jean-Francois Dive <jef@linuxbe.org>
20
* This program is free software; you can redistribute it and/or modify it
21
* under the terms of the GNU General Public License as published by the Free
22
* Software Foundation; either version 2 of the License, or (at your option)
26
#include <crypto/internal/hash.h>
27
#include <linux/init.h>
28
#include <linux/module.h>
29
#include <crypto/sha.h>
31
#include "crypt_s390.h"
34
static int sha1_init(struct shash_desc *desc)
36
struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
38
sctx->state[0] = SHA1_H0;
39
sctx->state[1] = SHA1_H1;
40
sctx->state[2] = SHA1_H2;
41
sctx->state[3] = SHA1_H3;
42
sctx->state[4] = SHA1_H4;
44
sctx->func = KIMD_SHA_1;
49
static int sha1_export(struct shash_desc *desc, void *out)
51
struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
52
struct sha1_state *octx = out;
54
octx->count = sctx->count;
55
memcpy(octx->state, sctx->state, sizeof(octx->state));
56
memcpy(octx->buffer, sctx->buf, sizeof(octx->buffer));
60
static int sha1_import(struct shash_desc *desc, const void *in)
62
struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
63
const struct sha1_state *ictx = in;
65
sctx->count = ictx->count;
66
memcpy(sctx->state, ictx->state, sizeof(ictx->state));
67
memcpy(sctx->buf, ictx->buffer, sizeof(ictx->buffer));
68
sctx->func = KIMD_SHA_1;
72
static struct shash_alg alg = {
73
.digestsize = SHA1_DIGEST_SIZE,
75
.update = s390_sha_update,
76
.final = s390_sha_final,
77
.export = sha1_export,
78
.import = sha1_import,
79
.descsize = sizeof(struct s390_sha_ctx),
80
.statesize = sizeof(struct sha1_state),
83
.cra_driver_name= "sha1-s390",
84
.cra_priority = CRYPT_S390_PRIORITY,
85
.cra_flags = CRYPTO_ALG_TYPE_SHASH,
86
.cra_blocksize = SHA1_BLOCK_SIZE,
87
.cra_module = THIS_MODULE,
91
static int __init sha1_s390_init(void)
93
if (!crypt_s390_func_available(KIMD_SHA_1, CRYPT_S390_MSA))
95
return crypto_register_shash(&alg);
98
static void __exit sha1_s390_fini(void)
100
crypto_unregister_shash(&alg);
103
module_init(sha1_s390_init);
104
module_exit(sha1_s390_fini);
106
MODULE_ALIAS("sha1");
107
MODULE_LICENSE("GPL");
108
MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm");