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

TOMOYO Linux Cross Reference
Linux/crypto/sha3_generic.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /crypto/sha3_generic.c (Architecture i386) and /crypto/sha3_generic.c (Architecture ppc)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /*                                                  2 /*
  3  * Cryptographic API.                               3  * Cryptographic API.
  4  *                                                  4  *
  5  * SHA-3, as specified in                           5  * SHA-3, as specified in
  6  * https://nvlpubs.nist.gov/nistpubs/FIPS/NIST      6  * https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf
  7  *                                                  7  *
  8  * SHA-3 code by Jeff Garzik <jeff@garzik.org>      8  * SHA-3 code by Jeff Garzik <jeff@garzik.org>
  9  *               Ard Biesheuvel <ard.biesheuve      9  *               Ard Biesheuvel <ard.biesheuvel@linaro.org>
 10  */                                                10  */
 11 #include <crypto/internal/hash.h>                  11 #include <crypto/internal/hash.h>
 12 #include <linux/init.h>                            12 #include <linux/init.h>
 13 #include <linux/module.h>                          13 #include <linux/module.h>
 14 #include <linux/types.h>                           14 #include <linux/types.h>
 15 #include <crypto/sha3.h>                           15 #include <crypto/sha3.h>
 16 #include <linux/unaligned.h>                       16 #include <linux/unaligned.h>
 17                                                    17 
 18 /*                                                 18 /*
 19  * On some 32-bit architectures (h8300), GCC e     19  * On some 32-bit architectures (h8300), GCC ends up using
 20  * over 1 KB of stack if we inline the round c     20  * over 1 KB of stack if we inline the round calculation into the loop
 21  * in keccakf(). On the other hand, on 64-bit      21  * in keccakf(). On the other hand, on 64-bit architectures with plenty
 22  * of [64-bit wide] general purpose registers,     22  * of [64-bit wide] general purpose registers, not inlining it severely
 23  * hurts performance. So let's use 64-bitness      23  * hurts performance. So let's use 64-bitness as a heuristic to decide
 24  * whether to inline or not.                       24  * whether to inline or not.
 25  */                                                25  */
 26 #ifdef CONFIG_64BIT                                26 #ifdef CONFIG_64BIT
 27 #define SHA3_INLINE     inline                     27 #define SHA3_INLINE     inline
 28 #else                                              28 #else
 29 #define SHA3_INLINE     noinline                   29 #define SHA3_INLINE     noinline
 30 #endif                                             30 #endif
 31                                                    31 
 32 #define KECCAK_ROUNDS 24                           32 #define KECCAK_ROUNDS 24
 33                                                    33 
 34 static const u64 keccakf_rndc[24] = {              34 static const u64 keccakf_rndc[24] = {
 35         0x0000000000000001ULL, 0x0000000000008     35         0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL,
 36         0x8000000080008000ULL, 0x0000000000008     36         0x8000000080008000ULL, 0x000000000000808bULL, 0x0000000080000001ULL,
 37         0x8000000080008081ULL, 0x8000000000008     37         0x8000000080008081ULL, 0x8000000000008009ULL, 0x000000000000008aULL,
 38         0x0000000000000088ULL, 0x0000000080008     38         0x0000000000000088ULL, 0x0000000080008009ULL, 0x000000008000000aULL,
 39         0x000000008000808bULL, 0x8000000000000     39         0x000000008000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL,
 40         0x8000000000008003ULL, 0x8000000000008     40         0x8000000000008003ULL, 0x8000000000008002ULL, 0x8000000000000080ULL,
 41         0x000000000000800aULL, 0x8000000080000     41         0x000000000000800aULL, 0x800000008000000aULL, 0x8000000080008081ULL,
 42         0x8000000000008080ULL, 0x0000000080000     42         0x8000000000008080ULL, 0x0000000080000001ULL, 0x8000000080008008ULL
 43 };                                                 43 };
 44                                                    44 
 45 /* update the state with given number of round     45 /* update the state with given number of rounds */
 46                                                    46 
 47 static SHA3_INLINE void keccakf_round(u64 st[2     47 static SHA3_INLINE void keccakf_round(u64 st[25])
 48 {                                                  48 {
 49         u64 t[5], tt, bc[5];                       49         u64 t[5], tt, bc[5];
 50                                                    50 
 51         /* Theta */                                51         /* Theta */
 52         bc[0] = st[0] ^ st[5] ^ st[10] ^ st[15     52         bc[0] = st[0] ^ st[5] ^ st[10] ^ st[15] ^ st[20];
 53         bc[1] = st[1] ^ st[6] ^ st[11] ^ st[16     53         bc[1] = st[1] ^ st[6] ^ st[11] ^ st[16] ^ st[21];
 54         bc[2] = st[2] ^ st[7] ^ st[12] ^ st[17     54         bc[2] = st[2] ^ st[7] ^ st[12] ^ st[17] ^ st[22];
 55         bc[3] = st[3] ^ st[8] ^ st[13] ^ st[18     55         bc[3] = st[3] ^ st[8] ^ st[13] ^ st[18] ^ st[23];
 56         bc[4] = st[4] ^ st[9] ^ st[14] ^ st[19     56         bc[4] = st[4] ^ st[9] ^ st[14] ^ st[19] ^ st[24];
 57                                                    57 
 58         t[0] = bc[4] ^ rol64(bc[1], 1);            58         t[0] = bc[4] ^ rol64(bc[1], 1);
 59         t[1] = bc[0] ^ rol64(bc[2], 1);            59         t[1] = bc[0] ^ rol64(bc[2], 1);
 60         t[2] = bc[1] ^ rol64(bc[3], 1);            60         t[2] = bc[1] ^ rol64(bc[3], 1);
 61         t[3] = bc[2] ^ rol64(bc[4], 1);            61         t[3] = bc[2] ^ rol64(bc[4], 1);
 62         t[4] = bc[3] ^ rol64(bc[0], 1);            62         t[4] = bc[3] ^ rol64(bc[0], 1);
 63                                                    63 
 64         st[0] ^= t[0];                             64         st[0] ^= t[0];
 65                                                    65 
 66         /* Rho Pi */                               66         /* Rho Pi */
 67         tt = st[1];                                67         tt = st[1];
 68         st[ 1] = rol64(st[ 6] ^ t[1], 44);         68         st[ 1] = rol64(st[ 6] ^ t[1], 44);
 69         st[ 6] = rol64(st[ 9] ^ t[4], 20);         69         st[ 6] = rol64(st[ 9] ^ t[4], 20);
 70         st[ 9] = rol64(st[22] ^ t[2], 61);         70         st[ 9] = rol64(st[22] ^ t[2], 61);
 71         st[22] = rol64(st[14] ^ t[4], 39);         71         st[22] = rol64(st[14] ^ t[4], 39);
 72         st[14] = rol64(st[20] ^ t[0], 18);         72         st[14] = rol64(st[20] ^ t[0], 18);
 73         st[20] = rol64(st[ 2] ^ t[2], 62);         73         st[20] = rol64(st[ 2] ^ t[2], 62);
 74         st[ 2] = rol64(st[12] ^ t[2], 43);         74         st[ 2] = rol64(st[12] ^ t[2], 43);
 75         st[12] = rol64(st[13] ^ t[3], 25);         75         st[12] = rol64(st[13] ^ t[3], 25);
 76         st[13] = rol64(st[19] ^ t[4],  8);         76         st[13] = rol64(st[19] ^ t[4],  8);
 77         st[19] = rol64(st[23] ^ t[3], 56);         77         st[19] = rol64(st[23] ^ t[3], 56);
 78         st[23] = rol64(st[15] ^ t[0], 41);         78         st[23] = rol64(st[15] ^ t[0], 41);
 79         st[15] = rol64(st[ 4] ^ t[4], 27);         79         st[15] = rol64(st[ 4] ^ t[4], 27);
 80         st[ 4] = rol64(st[24] ^ t[4], 14);         80         st[ 4] = rol64(st[24] ^ t[4], 14);
 81         st[24] = rol64(st[21] ^ t[1],  2);         81         st[24] = rol64(st[21] ^ t[1],  2);
 82         st[21] = rol64(st[ 8] ^ t[3], 55);         82         st[21] = rol64(st[ 8] ^ t[3], 55);
 83         st[ 8] = rol64(st[16] ^ t[1], 45);         83         st[ 8] = rol64(st[16] ^ t[1], 45);
 84         st[16] = rol64(st[ 5] ^ t[0], 36);         84         st[16] = rol64(st[ 5] ^ t[0], 36);
 85         st[ 5] = rol64(st[ 3] ^ t[3], 28);         85         st[ 5] = rol64(st[ 3] ^ t[3], 28);
 86         st[ 3] = rol64(st[18] ^ t[3], 21);         86         st[ 3] = rol64(st[18] ^ t[3], 21);
 87         st[18] = rol64(st[17] ^ t[2], 15);         87         st[18] = rol64(st[17] ^ t[2], 15);
 88         st[17] = rol64(st[11] ^ t[1], 10);         88         st[17] = rol64(st[11] ^ t[1], 10);
 89         st[11] = rol64(st[ 7] ^ t[2],  6);         89         st[11] = rol64(st[ 7] ^ t[2],  6);
 90         st[ 7] = rol64(st[10] ^ t[0],  3);         90         st[ 7] = rol64(st[10] ^ t[0],  3);
 91         st[10] = rol64(    tt ^ t[1],  1);         91         st[10] = rol64(    tt ^ t[1],  1);
 92                                                    92 
 93         /* Chi */                                  93         /* Chi */
 94         bc[ 0] = ~st[ 1] & st[ 2];                 94         bc[ 0] = ~st[ 1] & st[ 2];
 95         bc[ 1] = ~st[ 2] & st[ 3];                 95         bc[ 1] = ~st[ 2] & st[ 3];
 96         bc[ 2] = ~st[ 3] & st[ 4];                 96         bc[ 2] = ~st[ 3] & st[ 4];
 97         bc[ 3] = ~st[ 4] & st[ 0];                 97         bc[ 3] = ~st[ 4] & st[ 0];
 98         bc[ 4] = ~st[ 0] & st[ 1];                 98         bc[ 4] = ~st[ 0] & st[ 1];
 99         st[ 0] ^= bc[ 0];                          99         st[ 0] ^= bc[ 0];
100         st[ 1] ^= bc[ 1];                         100         st[ 1] ^= bc[ 1];
101         st[ 2] ^= bc[ 2];                         101         st[ 2] ^= bc[ 2];
102         st[ 3] ^= bc[ 3];                         102         st[ 3] ^= bc[ 3];
103         st[ 4] ^= bc[ 4];                         103         st[ 4] ^= bc[ 4];
104                                                   104 
105         bc[ 0] = ~st[ 6] & st[ 7];                105         bc[ 0] = ~st[ 6] & st[ 7];
106         bc[ 1] = ~st[ 7] & st[ 8];                106         bc[ 1] = ~st[ 7] & st[ 8];
107         bc[ 2] = ~st[ 8] & st[ 9];                107         bc[ 2] = ~st[ 8] & st[ 9];
108         bc[ 3] = ~st[ 9] & st[ 5];                108         bc[ 3] = ~st[ 9] & st[ 5];
109         bc[ 4] = ~st[ 5] & st[ 6];                109         bc[ 4] = ~st[ 5] & st[ 6];
110         st[ 5] ^= bc[ 0];                         110         st[ 5] ^= bc[ 0];
111         st[ 6] ^= bc[ 1];                         111         st[ 6] ^= bc[ 1];
112         st[ 7] ^= bc[ 2];                         112         st[ 7] ^= bc[ 2];
113         st[ 8] ^= bc[ 3];                         113         st[ 8] ^= bc[ 3];
114         st[ 9] ^= bc[ 4];                         114         st[ 9] ^= bc[ 4];
115                                                   115 
116         bc[ 0] = ~st[11] & st[12];                116         bc[ 0] = ~st[11] & st[12];
117         bc[ 1] = ~st[12] & st[13];                117         bc[ 1] = ~st[12] & st[13];
118         bc[ 2] = ~st[13] & st[14];                118         bc[ 2] = ~st[13] & st[14];
119         bc[ 3] = ~st[14] & st[10];                119         bc[ 3] = ~st[14] & st[10];
120         bc[ 4] = ~st[10] & st[11];                120         bc[ 4] = ~st[10] & st[11];
121         st[10] ^= bc[ 0];                         121         st[10] ^= bc[ 0];
122         st[11] ^= bc[ 1];                         122         st[11] ^= bc[ 1];
123         st[12] ^= bc[ 2];                         123         st[12] ^= bc[ 2];
124         st[13] ^= bc[ 3];                         124         st[13] ^= bc[ 3];
125         st[14] ^= bc[ 4];                         125         st[14] ^= bc[ 4];
126                                                   126 
127         bc[ 0] = ~st[16] & st[17];                127         bc[ 0] = ~st[16] & st[17];
128         bc[ 1] = ~st[17] & st[18];                128         bc[ 1] = ~st[17] & st[18];
129         bc[ 2] = ~st[18] & st[19];                129         bc[ 2] = ~st[18] & st[19];
130         bc[ 3] = ~st[19] & st[15];                130         bc[ 3] = ~st[19] & st[15];
131         bc[ 4] = ~st[15] & st[16];                131         bc[ 4] = ~st[15] & st[16];
132         st[15] ^= bc[ 0];                         132         st[15] ^= bc[ 0];
133         st[16] ^= bc[ 1];                         133         st[16] ^= bc[ 1];
134         st[17] ^= bc[ 2];                         134         st[17] ^= bc[ 2];
135         st[18] ^= bc[ 3];                         135         st[18] ^= bc[ 3];
136         st[19] ^= bc[ 4];                         136         st[19] ^= bc[ 4];
137                                                   137 
138         bc[ 0] = ~st[21] & st[22];                138         bc[ 0] = ~st[21] & st[22];
139         bc[ 1] = ~st[22] & st[23];                139         bc[ 1] = ~st[22] & st[23];
140         bc[ 2] = ~st[23] & st[24];                140         bc[ 2] = ~st[23] & st[24];
141         bc[ 3] = ~st[24] & st[20];                141         bc[ 3] = ~st[24] & st[20];
142         bc[ 4] = ~st[20] & st[21];                142         bc[ 4] = ~st[20] & st[21];
143         st[20] ^= bc[ 0];                         143         st[20] ^= bc[ 0];
144         st[21] ^= bc[ 1];                         144         st[21] ^= bc[ 1];
145         st[22] ^= bc[ 2];                         145         st[22] ^= bc[ 2];
146         st[23] ^= bc[ 3];                         146         st[23] ^= bc[ 3];
147         st[24] ^= bc[ 4];                         147         st[24] ^= bc[ 4];
148 }                                                 148 }
149                                                   149 
150 static void keccakf(u64 st[25])                   150 static void keccakf(u64 st[25])
151 {                                                 151 {
152         int round;                                152         int round;
153                                                   153 
154         for (round = 0; round < KECCAK_ROUNDS;    154         for (round = 0; round < KECCAK_ROUNDS; round++) {
155                 keccakf_round(st);                155                 keccakf_round(st);
156                 /* Iota */                        156                 /* Iota */
157                 st[0] ^= keccakf_rndc[round];     157                 st[0] ^= keccakf_rndc[round];
158         }                                         158         }
159 }                                                 159 }
160                                                   160 
161 int crypto_sha3_init(struct shash_desc *desc)     161 int crypto_sha3_init(struct shash_desc *desc)
162 {                                                 162 {
163         struct sha3_state *sctx = shash_desc_c    163         struct sha3_state *sctx = shash_desc_ctx(desc);
164         unsigned int digest_size = crypto_shas    164         unsigned int digest_size = crypto_shash_digestsize(desc->tfm);
165                                                   165 
166         sctx->rsiz = 200 - 2 * digest_size;       166         sctx->rsiz = 200 - 2 * digest_size;
167         sctx->rsizw = sctx->rsiz / 8;             167         sctx->rsizw = sctx->rsiz / 8;
168         sctx->partial = 0;                        168         sctx->partial = 0;
169                                                   169 
170         memset(sctx->st, 0, sizeof(sctx->st));    170         memset(sctx->st, 0, sizeof(sctx->st));
171         return 0;                                 171         return 0;
172 }                                                 172 }
173 EXPORT_SYMBOL(crypto_sha3_init);                  173 EXPORT_SYMBOL(crypto_sha3_init);
174                                                   174 
175 int crypto_sha3_update(struct shash_desc *desc    175 int crypto_sha3_update(struct shash_desc *desc, const u8 *data,
176                        unsigned int len)          176                        unsigned int len)
177 {                                                 177 {
178         struct sha3_state *sctx = shash_desc_c    178         struct sha3_state *sctx = shash_desc_ctx(desc);
179         unsigned int done;                        179         unsigned int done;
180         const u8 *src;                            180         const u8 *src;
181                                                   181 
182         done = 0;                                 182         done = 0;
183         src = data;                               183         src = data;
184                                                   184 
185         if ((sctx->partial + len) > (sctx->rsi    185         if ((sctx->partial + len) > (sctx->rsiz - 1)) {
186                 if (sctx->partial) {              186                 if (sctx->partial) {
187                         done = -sctx->partial;    187                         done = -sctx->partial;
188                         memcpy(sctx->buf + sct    188                         memcpy(sctx->buf + sctx->partial, data,
189                                done + sctx->rs    189                                done + sctx->rsiz);
190                         src = sctx->buf;          190                         src = sctx->buf;
191                 }                                 191                 }
192                                                   192 
193                 do {                              193                 do {
194                         unsigned int i;           194                         unsigned int i;
195                                                   195 
196                         for (i = 0; i < sctx->    196                         for (i = 0; i < sctx->rsizw; i++)
197                                 sctx->st[i] ^=    197                                 sctx->st[i] ^= get_unaligned_le64(src + 8 * i);
198                         keccakf(sctx->st);        198                         keccakf(sctx->st);
199                                                   199 
200                         done += sctx->rsiz;       200                         done += sctx->rsiz;
201                         src = data + done;        201                         src = data + done;
202                 } while (done + (sctx->rsiz -     202                 } while (done + (sctx->rsiz - 1) < len);
203                                                   203 
204                 sctx->partial = 0;                204                 sctx->partial = 0;
205         }                                         205         }
206         memcpy(sctx->buf + sctx->partial, src,    206         memcpy(sctx->buf + sctx->partial, src, len - done);
207         sctx->partial += (len - done);            207         sctx->partial += (len - done);
208                                                   208 
209         return 0;                                 209         return 0;
210 }                                                 210 }
211 EXPORT_SYMBOL(crypto_sha3_update);                211 EXPORT_SYMBOL(crypto_sha3_update);
212                                                   212 
213 int crypto_sha3_final(struct shash_desc *desc,    213 int crypto_sha3_final(struct shash_desc *desc, u8 *out)
214 {                                                 214 {
215         struct sha3_state *sctx = shash_desc_c    215         struct sha3_state *sctx = shash_desc_ctx(desc);
216         unsigned int i, inlen = sctx->partial;    216         unsigned int i, inlen = sctx->partial;
217         unsigned int digest_size = crypto_shas    217         unsigned int digest_size = crypto_shash_digestsize(desc->tfm);
218         __le64 *digest = (__le64 *)out;           218         __le64 *digest = (__le64 *)out;
219                                                   219 
220         sctx->buf[inlen++] = 0x06;                220         sctx->buf[inlen++] = 0x06;
221         memset(sctx->buf + inlen, 0, sctx->rsi    221         memset(sctx->buf + inlen, 0, sctx->rsiz - inlen);
222         sctx->buf[sctx->rsiz - 1] |= 0x80;        222         sctx->buf[sctx->rsiz - 1] |= 0x80;
223                                                   223 
224         for (i = 0; i < sctx->rsizw; i++)         224         for (i = 0; i < sctx->rsizw; i++)
225                 sctx->st[i] ^= get_unaligned_l    225                 sctx->st[i] ^= get_unaligned_le64(sctx->buf + 8 * i);
226                                                   226 
227         keccakf(sctx->st);                        227         keccakf(sctx->st);
228                                                   228 
229         for (i = 0; i < digest_size / 8; i++)     229         for (i = 0; i < digest_size / 8; i++)
230                 put_unaligned_le64(sctx->st[i]    230                 put_unaligned_le64(sctx->st[i], digest++);
231                                                   231 
232         if (digest_size & 4)                      232         if (digest_size & 4)
233                 put_unaligned_le32(sctx->st[i]    233                 put_unaligned_le32(sctx->st[i], (__le32 *)digest);
234                                                   234 
235         memset(sctx, 0, sizeof(*sctx));           235         memset(sctx, 0, sizeof(*sctx));
236         return 0;                                 236         return 0;
237 }                                                 237 }
238 EXPORT_SYMBOL(crypto_sha3_final);                 238 EXPORT_SYMBOL(crypto_sha3_final);
239                                                   239 
240 static struct shash_alg algs[] = { {              240 static struct shash_alg algs[] = { {
241         .digestsize             = SHA3_224_DIG    241         .digestsize             = SHA3_224_DIGEST_SIZE,
242         .init                   = crypto_sha3_    242         .init                   = crypto_sha3_init,
243         .update                 = crypto_sha3_    243         .update                 = crypto_sha3_update,
244         .final                  = crypto_sha3_    244         .final                  = crypto_sha3_final,
245         .descsize               = sizeof(struc    245         .descsize               = sizeof(struct sha3_state),
246         .base.cra_name          = "sha3-224",     246         .base.cra_name          = "sha3-224",
247         .base.cra_driver_name   = "sha3-224-ge    247         .base.cra_driver_name   = "sha3-224-generic",
248         .base.cra_blocksize     = SHA3_224_BLO    248         .base.cra_blocksize     = SHA3_224_BLOCK_SIZE,
249         .base.cra_module        = THIS_MODULE,    249         .base.cra_module        = THIS_MODULE,
250 }, {                                              250 }, {
251         .digestsize             = SHA3_256_DIG    251         .digestsize             = SHA3_256_DIGEST_SIZE,
252         .init                   = crypto_sha3_    252         .init                   = crypto_sha3_init,
253         .update                 = crypto_sha3_    253         .update                 = crypto_sha3_update,
254         .final                  = crypto_sha3_    254         .final                  = crypto_sha3_final,
255         .descsize               = sizeof(struc    255         .descsize               = sizeof(struct sha3_state),
256         .base.cra_name          = "sha3-256",     256         .base.cra_name          = "sha3-256",
257         .base.cra_driver_name   = "sha3-256-ge    257         .base.cra_driver_name   = "sha3-256-generic",
258         .base.cra_blocksize     = SHA3_256_BLO    258         .base.cra_blocksize     = SHA3_256_BLOCK_SIZE,
259         .base.cra_module        = THIS_MODULE,    259         .base.cra_module        = THIS_MODULE,
260 }, {                                              260 }, {
261         .digestsize             = SHA3_384_DIG    261         .digestsize             = SHA3_384_DIGEST_SIZE,
262         .init                   = crypto_sha3_    262         .init                   = crypto_sha3_init,
263         .update                 = crypto_sha3_    263         .update                 = crypto_sha3_update,
264         .final                  = crypto_sha3_    264         .final                  = crypto_sha3_final,
265         .descsize               = sizeof(struc    265         .descsize               = sizeof(struct sha3_state),
266         .base.cra_name          = "sha3-384",     266         .base.cra_name          = "sha3-384",
267         .base.cra_driver_name   = "sha3-384-ge    267         .base.cra_driver_name   = "sha3-384-generic",
268         .base.cra_blocksize     = SHA3_384_BLO    268         .base.cra_blocksize     = SHA3_384_BLOCK_SIZE,
269         .base.cra_module        = THIS_MODULE,    269         .base.cra_module        = THIS_MODULE,
270 }, {                                              270 }, {
271         .digestsize             = SHA3_512_DIG    271         .digestsize             = SHA3_512_DIGEST_SIZE,
272         .init                   = crypto_sha3_    272         .init                   = crypto_sha3_init,
273         .update                 = crypto_sha3_    273         .update                 = crypto_sha3_update,
274         .final                  = crypto_sha3_    274         .final                  = crypto_sha3_final,
275         .descsize               = sizeof(struc    275         .descsize               = sizeof(struct sha3_state),
276         .base.cra_name          = "sha3-512",     276         .base.cra_name          = "sha3-512",
277         .base.cra_driver_name   = "sha3-512-ge    277         .base.cra_driver_name   = "sha3-512-generic",
278         .base.cra_blocksize     = SHA3_512_BLO    278         .base.cra_blocksize     = SHA3_512_BLOCK_SIZE,
279         .base.cra_module        = THIS_MODULE,    279         .base.cra_module        = THIS_MODULE,
280 } };                                              280 } };
281                                                   281 
282 static int __init sha3_generic_mod_init(void)     282 static int __init sha3_generic_mod_init(void)
283 {                                                 283 {
284         return crypto_register_shashes(algs, A    284         return crypto_register_shashes(algs, ARRAY_SIZE(algs));
285 }                                                 285 }
286                                                   286 
287 static void __exit sha3_generic_mod_fini(void)    287 static void __exit sha3_generic_mod_fini(void)
288 {                                                 288 {
289         crypto_unregister_shashes(algs, ARRAY_    289         crypto_unregister_shashes(algs, ARRAY_SIZE(algs));
290 }                                                 290 }
291                                                   291 
292 subsys_initcall(sha3_generic_mod_init);           292 subsys_initcall(sha3_generic_mod_init);
293 module_exit(sha3_generic_mod_fini);               293 module_exit(sha3_generic_mod_fini);
294                                                   294 
295 MODULE_LICENSE("GPL");                            295 MODULE_LICENSE("GPL");
296 MODULE_DESCRIPTION("SHA-3 Secure Hash Algorith    296 MODULE_DESCRIPTION("SHA-3 Secure Hash Algorithm");
297                                                   297 
298 MODULE_ALIAS_CRYPTO("sha3-224");                  298 MODULE_ALIAS_CRYPTO("sha3-224");
299 MODULE_ALIAS_CRYPTO("sha3-224-generic");          299 MODULE_ALIAS_CRYPTO("sha3-224-generic");
300 MODULE_ALIAS_CRYPTO("sha3-256");                  300 MODULE_ALIAS_CRYPTO("sha3-256");
301 MODULE_ALIAS_CRYPTO("sha3-256-generic");          301 MODULE_ALIAS_CRYPTO("sha3-256-generic");
302 MODULE_ALIAS_CRYPTO("sha3-384");                  302 MODULE_ALIAS_CRYPTO("sha3-384");
303 MODULE_ALIAS_CRYPTO("sha3-384-generic");          303 MODULE_ALIAS_CRYPTO("sha3-384-generic");
304 MODULE_ALIAS_CRYPTO("sha3-512");                  304 MODULE_ALIAS_CRYPTO("sha3-512");
305 MODULE_ALIAS_CRYPTO("sha3-512-generic");          305 MODULE_ALIAS_CRYPTO("sha3-512-generic");
306                                                   306 

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

kernel.org | git.kernel.org | LWN.net | Project Home | 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.

sflogo.php