~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/s390/crypto/sha1_s390.c

Version: ~ [ linux-4.14 ] ~ [ linux-4.13.12 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.61 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.97 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.46 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.80 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.50 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.95 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.27.62 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp