b24413180f560 (Greg Kroah-Hartman 2017-11-01 15:07:57 +0100 1) // SPDX-License-Identifier: GPL-2.0
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 2) /*
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 3) * SHA1 routine optimized to do word accesses rather than byte accesses,
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 4) * and to avoid unnecessary copies into the context array.
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 5) *
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 6) * This was based on the git SHA1 implementation.
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 7) */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 8)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 9) #include <linux/kernel.h>
8bc3bcc93a2b4 (Paul Gortmaker 2011-11-16 21:29:17 -0500 10) #include <linux/export.h>
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 11) #include <linux/bitops.h>
a24d22b225ce1 (Eric Biggers 2020-11-12 21:20:21 -0800 12) #include <crypto/sha1.h>
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 13) #include <asm/unaligned.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 14)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 15) /*
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 16) * If you have 32 registers or more, the compiler can (and should)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 17) * try to change the array[] accesses into registers. However, on
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 18) * machines with less than ~25 registers, that won't really work,
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 19) * and at least gcc will make an unholy mess of it.
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 20) *
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 21) * So to avoid that mess which just slows things down, we force
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 22) * the stores to memory to actually happen (we might be better off
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 23) * with a 'W(t)=(val);asm("":"+m" (W(t))' there instead, as
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 24) * suggested by Artur Skawina - that will also make gcc unable to
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 25) * try to do the silly "optimize away loads" part because it won't
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 26) * see what the value will be).
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 27) *
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 28) * Ben Herrenschmidt reports that on PPC, the C version comes close
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 29) * to the optimized asm with this (ie on PPC you don't want that
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 30) * 'volatile', since there are lots of registers).
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 31) *
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 32) * On ARM we get the best code generation by forcing a full memory barrier
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 33) * between each SHA_ROUND, otherwise gcc happily get wild with spilling and
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 34) * the stack frame size simply explode and performance goes down the drain.
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 35) */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 36)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 37) #ifdef CONFIG_X86
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 38) #define setW(x, val) (*(volatile __u32 *)&W(x) = (val))
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 39) #elif defined(CONFIG_ARM)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 40) #define setW(x, val) do { W(x) = (val); __asm__("":::"memory"); } while (0)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 41) #else
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 42) #define setW(x, val) (W(x) = (val))
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 43) #endif
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 44)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 45) /* This "rolls" over the 512-bit array */
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 46) #define W(x) (array[(x)&15])
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 47)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 48) /*
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 49) * Where do we get the source from? The first 16 iterations get it from
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 50) * the input data, the next mix it from the 512-bit array.
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 51) */
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 52) #define SHA_SRC(t) get_unaligned_be32((__u32 *)data + t)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 53) #define SHA_MIX(t) rol32(W(t+13) ^ W(t+8) ^ W(t+2) ^ W(t), 1)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 54)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 55) #define SHA_ROUND(t, input, fn, constant, A, B, C, D, E) do { \
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 56) __u32 TEMP = input(t); setW(t, TEMP); \
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 57) E += TEMP + rol32(A,5) + (fn) + (constant); \
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 58) B = ror32(B, 2); } while (0)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 59)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 60) #define T_0_15(t, A, B, C, D, E) SHA_ROUND(t, SHA_SRC, (((C^D)&B)^D) , 0x5a827999, A, B, C, D, E )
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 61) #define T_16_19(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (((C^D)&B)^D) , 0x5a827999, A, B, C, D, E )
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 62) #define T_20_39(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0x6ed9eba1, A, B, C, D, E )
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 63) #define T_40_59(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, ((B&C)+(D&(B^C))) , 0x8f1bbcdc, A, B, C, D, E )
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 64) #define T_60_79(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0xca62c1d6, A, B, C, D, E )
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 65)
72fd4a35a8243 (Robert P. J. Day 2007-02-10 01:45:59 -0800 66) /**
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 67) * sha1_transform - single block SHA1 transform (deprecated)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 68) *
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 69) * @digest: 160 bit digest to update
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 70) * @data: 512 bits of data to hash
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 71) * @array: 16 words of workspace (see note)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 72) *
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 73) * This function executes SHA-1's internal compression function. It updates the
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 74) * 160-bit internal state (@digest) with a single 512-bit data block (@data).
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 75) *
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 76) * Don't use this function. SHA-1 is no longer considered secure. And even if
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 77) * you do have to use SHA-1, this isn't the correct way to hash something with
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 78) * SHA-1 as this doesn't handle padding and finalization.
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 79) *
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 80) * Note: If the hash is security sensitive, the caller should be sure
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 81) * to clear the workspace. This is left to the caller to avoid
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 82) * unnecessary clears between chained hashing operations.
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 83) */
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 84) void sha1_transform(__u32 *digest, const char *data, __u32 *array)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 85) {
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 86) __u32 A, B, C, D, E;
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 87)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 88) A = digest[0];
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 89) B = digest[1];
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 90) C = digest[2];
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 91) D = digest[3];
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 92) E = digest[4];
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 93)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 94) /* Round 1 - iterations 0-16 take their input from 'data' */
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 95) T_0_15( 0, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 96) T_0_15( 1, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 97) T_0_15( 2, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 98) T_0_15( 3, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 99) T_0_15( 4, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 100) T_0_15( 5, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 101) T_0_15( 6, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 102) T_0_15( 7, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 103) T_0_15( 8, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 104) T_0_15( 9, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 105) T_0_15(10, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 106) T_0_15(11, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 107) T_0_15(12, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 108) T_0_15(13, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 109) T_0_15(14, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 110) T_0_15(15, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 111)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 112) /* Round 1 - tail. Input from 512-bit mixing array */
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 113) T_16_19(16, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 114) T_16_19(17, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 115) T_16_19(18, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 116) T_16_19(19, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 117)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 118) /* Round 2 */
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 119) T_20_39(20, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 120) T_20_39(21, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 121) T_20_39(22, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 122) T_20_39(23, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 123) T_20_39(24, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 124) T_20_39(25, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 125) T_20_39(26, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 126) T_20_39(27, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 127) T_20_39(28, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 128) T_20_39(29, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 129) T_20_39(30, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 130) T_20_39(31, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 131) T_20_39(32, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 132) T_20_39(33, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 133) T_20_39(34, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 134) T_20_39(35, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 135) T_20_39(36, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 136) T_20_39(37, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 137) T_20_39(38, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 138) T_20_39(39, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 139)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 140) /* Round 3 */
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 141) T_40_59(40, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 142) T_40_59(41, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 143) T_40_59(42, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 144) T_40_59(43, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 145) T_40_59(44, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 146) T_40_59(45, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 147) T_40_59(46, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 148) T_40_59(47, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 149) T_40_59(48, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 150) T_40_59(49, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 151) T_40_59(50, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 152) T_40_59(51, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 153) T_40_59(52, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 154) T_40_59(53, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 155) T_40_59(54, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 156) T_40_59(55, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 157) T_40_59(56, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 158) T_40_59(57, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 159) T_40_59(58, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 160) T_40_59(59, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 161)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 162) /* Round 4 */
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 163) T_60_79(60, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 164) T_60_79(61, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 165) T_60_79(62, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 166) T_60_79(63, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 167) T_60_79(64, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 168) T_60_79(65, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 169) T_60_79(66, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 170) T_60_79(67, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 171) T_60_79(68, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 172) T_60_79(69, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 173) T_60_79(70, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 174) T_60_79(71, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 175) T_60_79(72, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 176) T_60_79(73, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 177) T_60_79(74, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 178) T_60_79(75, A, B, C, D, E);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 179) T_60_79(76, E, A, B, C, D);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 180) T_60_79(77, D, E, A, B, C);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 181) T_60_79(78, C, D, E, A, B);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 182) T_60_79(79, B, C, D, E, A);
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 183)
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 184) digest[0] += A;
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 185) digest[1] += B;
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 186) digest[2] += C;
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 187) digest[3] += D;
1eb19a12bd221 (Mandeep Singh Baines 2011-08-05 18:46:27 -0700 188) digest[4] += E;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 189) }
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 190) EXPORT_SYMBOL(sha1_transform);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 191)
72fd4a35a8243 (Robert P. J. Day 2007-02-10 01:45:59 -0800 192) /**
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 193) * sha1_init - initialize the vectors for a SHA1 digest
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 194) * @buf: vector to initialize
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 195) */
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 196) void sha1_init(__u32 *buf)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 197) {
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 198) buf[0] = 0x67452301;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 199) buf[1] = 0xefcdab89;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 200) buf[2] = 0x98badcfe;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 201) buf[3] = 0x10325476;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 202) buf[4] = 0xc3d2e1f0;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 203) }
6b0b0fa2bce61 (Eric Biggers 2020-05-02 11:24:25 -0700 204) EXPORT_SYMBOL(sha1_init);