Linux Audio

Check our new training course

Loading...
v5.4
  1// SPDX-License-Identifier: GPL-2.0+
  2/*
  3 * Cryptographic API.
  4 *
  5 * s390 implementation of the SHA1 Secure Hash Algorithm.
  6 *
  7 * Derived from cryptoapi implementation, adapted for in-place
  8 * scatterlist interface.  Originally based on the public domain
  9 * implementation written by Steve Reid.
 10 *
 11 * s390 Version:
 12 *   Copyright IBM Corp. 2003, 2007
 13 *   Author(s): Thomas Spatzier
 14 *		Jan Glauber (jan.glauber@de.ibm.com)
 15 *
 16 * Derived from "crypto/sha1_generic.c"
 17 *   Copyright (c) Alan Smithee.
 18 *   Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
 19 *   Copyright (c) Jean-Francois Dive <jef@linuxbe.org>
 20 */
 21#include <crypto/internal/hash.h>
 22#include <linux/init.h>
 23#include <linux/module.h>
 24#include <linux/cpufeature.h>
 25#include <crypto/sha.h>
 26#include <asm/cpacf.h>
 27
 28#include "sha.h"
 29
 30static int sha1_init(struct shash_desc *desc)
 31{
 32	struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
 33
 34	sctx->state[0] = SHA1_H0;
 35	sctx->state[1] = SHA1_H1;
 36	sctx->state[2] = SHA1_H2;
 37	sctx->state[3] = SHA1_H3;
 38	sctx->state[4] = SHA1_H4;
 39	sctx->count = 0;
 40	sctx->func = CPACF_KIMD_SHA_1;
 41
 42	return 0;
 43}
 44
 45static int sha1_export(struct shash_desc *desc, void *out)
 46{
 47	struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
 48	struct sha1_state *octx = out;
 49
 50	octx->count = sctx->count;
 51	memcpy(octx->state, sctx->state, sizeof(octx->state));
 52	memcpy(octx->buffer, sctx->buf, sizeof(octx->buffer));
 53	return 0;
 54}
 55
 56static int sha1_import(struct shash_desc *desc, const void *in)
 57{
 58	struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
 59	const struct sha1_state *ictx = in;
 60
 61	sctx->count = ictx->count;
 62	memcpy(sctx->state, ictx->state, sizeof(ictx->state));
 63	memcpy(sctx->buf, ictx->buffer, sizeof(ictx->buffer));
 64	sctx->func = CPACF_KIMD_SHA_1;
 65	return 0;
 66}
 67
 68static struct shash_alg alg = {
 69	.digestsize	=	SHA1_DIGEST_SIZE,
 70	.init		=	sha1_init,
 71	.update		=	s390_sha_update,
 72	.final		=	s390_sha_final,
 73	.export		=	sha1_export,
 74	.import		=	sha1_import,
 75	.descsize	=	sizeof(struct s390_sha_ctx),
 76	.statesize	=	sizeof(struct sha1_state),
 77	.base		=	{
 78		.cra_name	=	"sha1",
 79		.cra_driver_name=	"sha1-s390",
 80		.cra_priority	=	300,
 81		.cra_blocksize	=	SHA1_BLOCK_SIZE,
 82		.cra_module	=	THIS_MODULE,
 83	}
 84};
 85
 86static int __init sha1_s390_init(void)
 87{
 88	if (!cpacf_query_func(CPACF_KIMD, CPACF_KIMD_SHA_1))
 89		return -ENODEV;
 90	return crypto_register_shash(&alg);
 91}
 92
 93static void __exit sha1_s390_fini(void)
 94{
 95	crypto_unregister_shash(&alg);
 96}
 97
 98module_cpu_feature_match(MSA, sha1_s390_init);
 99module_exit(sha1_s390_fini);
100
101MODULE_ALIAS_CRYPTO("sha1");
102MODULE_LICENSE("GPL");
103MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm");
v6.8
  1// SPDX-License-Identifier: GPL-2.0+
  2/*
  3 * Cryptographic API.
  4 *
  5 * s390 implementation of the SHA1 Secure Hash Algorithm.
  6 *
  7 * Derived from cryptoapi implementation, adapted for in-place
  8 * scatterlist interface.  Originally based on the public domain
  9 * implementation written by Steve Reid.
 10 *
 11 * s390 Version:
 12 *   Copyright IBM Corp. 2003, 2007
 13 *   Author(s): Thomas Spatzier
 14 *		Jan Glauber (jan.glauber@de.ibm.com)
 15 *
 16 * Derived from "crypto/sha1_generic.c"
 17 *   Copyright (c) Alan Smithee.
 18 *   Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
 19 *   Copyright (c) Jean-Francois Dive <jef@linuxbe.org>
 20 */
 21#include <crypto/internal/hash.h>
 22#include <linux/init.h>
 23#include <linux/module.h>
 24#include <linux/cpufeature.h>
 25#include <crypto/sha1.h>
 26#include <asm/cpacf.h>
 27
 28#include "sha.h"
 29
 30static int s390_sha1_init(struct shash_desc *desc)
 31{
 32	struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
 33
 34	sctx->state[0] = SHA1_H0;
 35	sctx->state[1] = SHA1_H1;
 36	sctx->state[2] = SHA1_H2;
 37	sctx->state[3] = SHA1_H3;
 38	sctx->state[4] = SHA1_H4;
 39	sctx->count = 0;
 40	sctx->func = CPACF_KIMD_SHA_1;
 41
 42	return 0;
 43}
 44
 45static int s390_sha1_export(struct shash_desc *desc, void *out)
 46{
 47	struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
 48	struct sha1_state *octx = out;
 49
 50	octx->count = sctx->count;
 51	memcpy(octx->state, sctx->state, sizeof(octx->state));
 52	memcpy(octx->buffer, sctx->buf, sizeof(octx->buffer));
 53	return 0;
 54}
 55
 56static int s390_sha1_import(struct shash_desc *desc, const void *in)
 57{
 58	struct s390_sha_ctx *sctx = shash_desc_ctx(desc);
 59	const struct sha1_state *ictx = in;
 60
 61	sctx->count = ictx->count;
 62	memcpy(sctx->state, ictx->state, sizeof(ictx->state));
 63	memcpy(sctx->buf, ictx->buffer, sizeof(ictx->buffer));
 64	sctx->func = CPACF_KIMD_SHA_1;
 65	return 0;
 66}
 67
 68static struct shash_alg alg = {
 69	.digestsize	=	SHA1_DIGEST_SIZE,
 70	.init		=	s390_sha1_init,
 71	.update		=	s390_sha_update,
 72	.final		=	s390_sha_final,
 73	.export		=	s390_sha1_export,
 74	.import		=	s390_sha1_import,
 75	.descsize	=	sizeof(struct s390_sha_ctx),
 76	.statesize	=	sizeof(struct sha1_state),
 77	.base		=	{
 78		.cra_name	=	"sha1",
 79		.cra_driver_name=	"sha1-s390",
 80		.cra_priority	=	300,
 81		.cra_blocksize	=	SHA1_BLOCK_SIZE,
 82		.cra_module	=	THIS_MODULE,
 83	}
 84};
 85
 86static int __init sha1_s390_init(void)
 87{
 88	if (!cpacf_query_func(CPACF_KIMD, CPACF_KIMD_SHA_1))
 89		return -ENODEV;
 90	return crypto_register_shash(&alg);
 91}
 92
 93static void __exit sha1_s390_fini(void)
 94{
 95	crypto_unregister_shash(&alg);
 96}
 97
 98module_cpu_feature_match(S390_CPU_FEATURE_MSA, sha1_s390_init);
 99module_exit(sha1_s390_fini);
100
101MODULE_ALIAS_CRYPTO("sha1");
102MODULE_LICENSE("GPL");
103MODULE_DESCRIPTION("SHA1 Secure Hash Algorithm");