Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: MiniTLS-HTTPS-Example
crypto/crypto_sha256.c@2:527a66d0a1a9, 2014-06-09 (annotated)
- Committer:
- MiniTLS
- Date:
- Mon Jun 09 14:57:54 2014 +0000
- Revision:
- 2:527a66d0a1a9
Change name to MiniTLS and added doc
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MiniTLS | 2:527a66d0a1a9 | 1 | /* |
| MiniTLS | 2:527a66d0a1a9 | 2 | MiniTLS - A super trimmed down TLS/SSL Library for embedded devices |
| MiniTLS | 2:527a66d0a1a9 | 3 | Author: Donatien Garnier |
| MiniTLS | 2:527a66d0a1a9 | 4 | Copyright (C) 2013-2014 AppNearMe Ltd |
| MiniTLS | 2:527a66d0a1a9 | 5 | |
| MiniTLS | 2:527a66d0a1a9 | 6 | This program is free software; you can redistribute it and/or |
| MiniTLS | 2:527a66d0a1a9 | 7 | modify it under the terms of the GNU General Public License |
| MiniTLS | 2:527a66d0a1a9 | 8 | as published by the Free Software Foundation; either version 2 |
| MiniTLS | 2:527a66d0a1a9 | 9 | of the License, or (at your option) any later version. |
| MiniTLS | 2:527a66d0a1a9 | 10 | |
| MiniTLS | 2:527a66d0a1a9 | 11 | This program is distributed in the hope that it will be useful, |
| MiniTLS | 2:527a66d0a1a9 | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MiniTLS | 2:527a66d0a1a9 | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| MiniTLS | 2:527a66d0a1a9 | 14 | GNU General Public License for more details. |
| MiniTLS | 2:527a66d0a1a9 | 15 | |
| MiniTLS | 2:527a66d0a1a9 | 16 | You should have received a copy of the GNU General Public License |
| MiniTLS | 2:527a66d0a1a9 | 17 | along with this program; if not, write to the Free Software |
| MiniTLS | 2:527a66d0a1a9 | 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| MiniTLS | 2:527a66d0a1a9 | 19 | *//** |
| MiniTLS | 2:527a66d0a1a9 | 20 | * \file crypto_sha256.c |
| MiniTLS | 2:527a66d0a1a9 | 21 | * \copyright Copyright (c) AppNearMe Ltd 2013 |
| MiniTLS | 2:527a66d0a1a9 | 22 | * \author Donatien Garnier |
| MiniTLS | 2:527a66d0a1a9 | 23 | */ |
| MiniTLS | 2:527a66d0a1a9 | 24 | |
| MiniTLS | 2:527a66d0a1a9 | 25 | #define __DEBUG__ 0 |
| MiniTLS | 2:527a66d0a1a9 | 26 | #define __MODULE__ "crypto_sha256.c" |
| MiniTLS | 2:527a66d0a1a9 | 27 | |
| MiniTLS | 2:527a66d0a1a9 | 28 | //This module has been adapted from libtomcrypt (http://libtom.org/) |
| MiniTLS | 2:527a66d0a1a9 | 29 | |
| MiniTLS | 2:527a66d0a1a9 | 30 | #include "core/fwk.h" |
| MiniTLS | 2:527a66d0a1a9 | 31 | #include "crypto_sha256.h" |
| MiniTLS | 2:527a66d0a1a9 | 32 | #include "inc/minitls_errors.h" |
| MiniTLS | 2:527a66d0a1a9 | 33 | #include "crypto_macros.h" |
| MiniTLS | 2:527a66d0a1a9 | 34 | |
| MiniTLS | 2:527a66d0a1a9 | 35 | #define fatal(x) do{ ERR("Fatal error %s - %d", #x, x); while(1); }while(0) |
| MiniTLS | 2:527a66d0a1a9 | 36 | |
| MiniTLS | 2:527a66d0a1a9 | 37 | static void crypto_sha256_compress(crypto_sha256_t* hash, unsigned char *buf); |
| MiniTLS | 2:527a66d0a1a9 | 38 | |
| MiniTLS | 2:527a66d0a1a9 | 39 | void crypto_sha256_init(crypto_sha256_t* hash) |
| MiniTLS | 2:527a66d0a1a9 | 40 | { |
| MiniTLS | 2:527a66d0a1a9 | 41 | hash->state[0] = 0x6A09E667UL; |
| MiniTLS | 2:527a66d0a1a9 | 42 | hash->state[1] = 0xBB67AE85UL; |
| MiniTLS | 2:527a66d0a1a9 | 43 | hash->state[2] = 0x3C6EF372UL; |
| MiniTLS | 2:527a66d0a1a9 | 44 | hash->state[3] = 0xA54FF53AUL; |
| MiniTLS | 2:527a66d0a1a9 | 45 | hash->state[4] = 0x510E527FUL; |
| MiniTLS | 2:527a66d0a1a9 | 46 | hash->state[5] = 0x9B05688CUL; |
| MiniTLS | 2:527a66d0a1a9 | 47 | hash->state[6] = 0x1F83D9ABUL; |
| MiniTLS | 2:527a66d0a1a9 | 48 | hash->state[7] = 0x5BE0CD19UL; |
| MiniTLS | 2:527a66d0a1a9 | 49 | hash->curlen = 0; |
| MiniTLS | 2:527a66d0a1a9 | 50 | hash->length = 0; |
| MiniTLS | 2:527a66d0a1a9 | 51 | } |
| MiniTLS | 2:527a66d0a1a9 | 52 | |
| MiniTLS | 2:527a66d0a1a9 | 53 | void crypto_sha256_update(crypto_sha256_t* hash, const uint8_t* data, size_t size) |
| MiniTLS | 2:527a66d0a1a9 | 54 | { |
| MiniTLS | 2:527a66d0a1a9 | 55 | unsigned long n; |
| MiniTLS | 2:527a66d0a1a9 | 56 | |
| MiniTLS | 2:527a66d0a1a9 | 57 | if ( hash->curlen > sizeof( hash->buf)) { |
| MiniTLS | 2:527a66d0a1a9 | 58 | //return CRYPTO_ERR_PARAMETERS; |
| MiniTLS | 2:527a66d0a1a9 | 59 | fatal(CRYPTO_ERR_PARAMETERS); |
| MiniTLS | 2:527a66d0a1a9 | 60 | } |
| MiniTLS | 2:527a66d0a1a9 | 61 | while (size > 0) { |
| MiniTLS | 2:527a66d0a1a9 | 62 | if ( hash->curlen == 0 && size >= 64) { |
| MiniTLS | 2:527a66d0a1a9 | 63 | crypto_sha256_compress(hash, (unsigned char *)data); |
| MiniTLS | 2:527a66d0a1a9 | 64 | hash->length += 64 * 8; |
| MiniTLS | 2:527a66d0a1a9 | 65 | data += 64; |
| MiniTLS | 2:527a66d0a1a9 | 66 | size -= 64; |
| MiniTLS | 2:527a66d0a1a9 | 67 | } else { |
| MiniTLS | 2:527a66d0a1a9 | 68 | n = ( ((size)<((64 - hash->curlen)))?(size):((64 - hash->curlen)) ); |
| MiniTLS | 2:527a66d0a1a9 | 69 | memcpy( hash->buf + hash->curlen, data, (size_t)n); |
| MiniTLS | 2:527a66d0a1a9 | 70 | hash->curlen += n; |
| MiniTLS | 2:527a66d0a1a9 | 71 | data += n; |
| MiniTLS | 2:527a66d0a1a9 | 72 | size -= n; |
| MiniTLS | 2:527a66d0a1a9 | 73 | if ( hash->curlen == 64) { |
| MiniTLS | 2:527a66d0a1a9 | 74 | crypto_sha256_compress (hash, hash->buf); |
| MiniTLS | 2:527a66d0a1a9 | 75 | hash->length += 8*64; |
| MiniTLS | 2:527a66d0a1a9 | 76 | hash->curlen = 0; |
| MiniTLS | 2:527a66d0a1a9 | 77 | } |
| MiniTLS | 2:527a66d0a1a9 | 78 | } |
| MiniTLS | 2:527a66d0a1a9 | 79 | } |
| MiniTLS | 2:527a66d0a1a9 | 80 | } |
| MiniTLS | 2:527a66d0a1a9 | 81 | |
| MiniTLS | 2:527a66d0a1a9 | 82 | void crypto_sha256_end(crypto_sha256_t* hash, uint8_t* out) |
| MiniTLS | 2:527a66d0a1a9 | 83 | { |
| MiniTLS | 2:527a66d0a1a9 | 84 | int i; |
| MiniTLS | 2:527a66d0a1a9 | 85 | |
| MiniTLS | 2:527a66d0a1a9 | 86 | if (hash->curlen >= sizeof(hash->buf)) { |
| MiniTLS | 2:527a66d0a1a9 | 87 | fatal(CRYPTO_ERR_PARAMETERS); |
| MiniTLS | 2:527a66d0a1a9 | 88 | } |
| MiniTLS | 2:527a66d0a1a9 | 89 | |
| MiniTLS | 2:527a66d0a1a9 | 90 | /* increase the length of the message */ |
| MiniTLS | 2:527a66d0a1a9 | 91 | hash->length += hash->curlen * 8; |
| MiniTLS | 2:527a66d0a1a9 | 92 | |
| MiniTLS | 2:527a66d0a1a9 | 93 | /* append the '1' bit */ |
| MiniTLS | 2:527a66d0a1a9 | 94 | hash->buf[hash->curlen++] = (unsigned char)0x80; |
| MiniTLS | 2:527a66d0a1a9 | 95 | |
| MiniTLS | 2:527a66d0a1a9 | 96 | /* if the length is currently above 56 bytes we append zeros |
| MiniTLS | 2:527a66d0a1a9 | 97 | * then compress. Then we can fall back to padding zeros and length |
| MiniTLS | 2:527a66d0a1a9 | 98 | * encoding like normal. |
| MiniTLS | 2:527a66d0a1a9 | 99 | */ |
| MiniTLS | 2:527a66d0a1a9 | 100 | if (hash->curlen > 56) { |
| MiniTLS | 2:527a66d0a1a9 | 101 | while (hash->curlen < 64) { |
| MiniTLS | 2:527a66d0a1a9 | 102 | hash->buf[hash->curlen++] = (unsigned char)0; |
| MiniTLS | 2:527a66d0a1a9 | 103 | } |
| MiniTLS | 2:527a66d0a1a9 | 104 | crypto_sha256_compress(hash, hash->buf); |
| MiniTLS | 2:527a66d0a1a9 | 105 | hash->curlen = 0; |
| MiniTLS | 2:527a66d0a1a9 | 106 | } |
| MiniTLS | 2:527a66d0a1a9 | 107 | |
| MiniTLS | 2:527a66d0a1a9 | 108 | /* pad upto 56 bytes of zeroes */ |
| MiniTLS | 2:527a66d0a1a9 | 109 | while (hash->curlen < 56) { |
| MiniTLS | 2:527a66d0a1a9 | 110 | hash->buf[hash->curlen++] = (unsigned char)0; |
| MiniTLS | 2:527a66d0a1a9 | 111 | } |
| MiniTLS | 2:527a66d0a1a9 | 112 | |
| MiniTLS | 2:527a66d0a1a9 | 113 | /* store length */ |
| MiniTLS | 2:527a66d0a1a9 | 114 | STORE64H(hash->length, hash->buf+56); |
| MiniTLS | 2:527a66d0a1a9 | 115 | crypto_sha256_compress(hash, hash->buf); |
| MiniTLS | 2:527a66d0a1a9 | 116 | |
| MiniTLS | 2:527a66d0a1a9 | 117 | /* copy output */ |
| MiniTLS | 2:527a66d0a1a9 | 118 | for (i = 0; i < 8; i++) { |
| MiniTLS | 2:527a66d0a1a9 | 119 | STORE32H(hash->state[i], out+(4*i)); |
| MiniTLS | 2:527a66d0a1a9 | 120 | } |
| MiniTLS | 2:527a66d0a1a9 | 121 | #ifdef CRYPT_CLEAN_STACK |
| MiniTLS | 2:527a66d0a1a9 | 122 | zeromem(hash, sizeof(hash)); |
| MiniTLS | 2:527a66d0a1a9 | 123 | #endif |
| MiniTLS | 2:527a66d0a1a9 | 124 | } |
| MiniTLS | 2:527a66d0a1a9 | 125 | |
| MiniTLS | 2:527a66d0a1a9 | 126 | void crypto_sha256_copy(crypto_sha256_t* hashTo, crypto_sha256_t* hashFrom) |
| MiniTLS | 2:527a66d0a1a9 | 127 | { |
| MiniTLS | 2:527a66d0a1a9 | 128 | memcpy(hashTo, hashFrom, sizeof(crypto_sha256_t)); |
| MiniTLS | 2:527a66d0a1a9 | 129 | } |
| MiniTLS | 2:527a66d0a1a9 | 130 | |
| MiniTLS | 2:527a66d0a1a9 | 131 | /* Various logical functions */ |
| MiniTLS | 2:527a66d0a1a9 | 132 | #define Ch(x,y,z) (z ^ (x & (y ^ z))) |
| MiniTLS | 2:527a66d0a1a9 | 133 | #define Maj(x,y,z) (((x | y) & z) | (x & y)) |
| MiniTLS | 2:527a66d0a1a9 | 134 | #define S(x, n) RORc((x),(n)) |
| MiniTLS | 2:527a66d0a1a9 | 135 | #define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) |
| MiniTLS | 2:527a66d0a1a9 | 136 | #define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) |
| MiniTLS | 2:527a66d0a1a9 | 137 | #define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) |
| MiniTLS | 2:527a66d0a1a9 | 138 | #define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) |
| MiniTLS | 2:527a66d0a1a9 | 139 | #define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) |
| MiniTLS | 2:527a66d0a1a9 | 140 | |
| MiniTLS | 2:527a66d0a1a9 | 141 | void crypto_sha256_compress(crypto_sha256_t* hash, unsigned char *buf) |
| MiniTLS | 2:527a66d0a1a9 | 142 | { |
| MiniTLS | 2:527a66d0a1a9 | 143 | ulong32 S[8], W[64], t0, t1; |
| MiniTLS | 2:527a66d0a1a9 | 144 | #ifdef LTC_SMALL_CODE |
| MiniTLS | 2:527a66d0a1a9 | 145 | ulong32 t; |
| MiniTLS | 2:527a66d0a1a9 | 146 | #endif |
| MiniTLS | 2:527a66d0a1a9 | 147 | int i; |
| MiniTLS | 2:527a66d0a1a9 | 148 | |
| MiniTLS | 2:527a66d0a1a9 | 149 | /* copy state into S */ |
| MiniTLS | 2:527a66d0a1a9 | 150 | for (i = 0; i < 8; i++) { |
| MiniTLS | 2:527a66d0a1a9 | 151 | S[i] = hash->state[i]; |
| MiniTLS | 2:527a66d0a1a9 | 152 | } |
| MiniTLS | 2:527a66d0a1a9 | 153 | |
| MiniTLS | 2:527a66d0a1a9 | 154 | /* copy the state into 512-bits into W[0..15] */ |
| MiniTLS | 2:527a66d0a1a9 | 155 | for (i = 0; i < 16; i++) { |
| MiniTLS | 2:527a66d0a1a9 | 156 | LOAD32H(W[i], buf + (4*i)); |
| MiniTLS | 2:527a66d0a1a9 | 157 | } |
| MiniTLS | 2:527a66d0a1a9 | 158 | |
| MiniTLS | 2:527a66d0a1a9 | 159 | /* fill W[16..63] */ |
| MiniTLS | 2:527a66d0a1a9 | 160 | for (i = 16; i < 64; i++) { |
| MiniTLS | 2:527a66d0a1a9 | 161 | W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; |
| MiniTLS | 2:527a66d0a1a9 | 162 | } |
| MiniTLS | 2:527a66d0a1a9 | 163 | |
| MiniTLS | 2:527a66d0a1a9 | 164 | /* Compress */ |
| MiniTLS | 2:527a66d0a1a9 | 165 | #ifdef LTC_SMALL_CODE |
| MiniTLS | 2:527a66d0a1a9 | 166 | #define RND(a,b,c,d,e,f,g,h,i) \ |
| MiniTLS | 2:527a66d0a1a9 | 167 | t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ |
| MiniTLS | 2:527a66d0a1a9 | 168 | t1 = Sigma0(a) + Maj(a, b, c); \ |
| MiniTLS | 2:527a66d0a1a9 | 169 | d += t0; \ |
| MiniTLS | 2:527a66d0a1a9 | 170 | h = t0 + t1; |
| MiniTLS | 2:527a66d0a1a9 | 171 | |
| MiniTLS | 2:527a66d0a1a9 | 172 | for (i = 0; i < 64; ++i) { |
| MiniTLS | 2:527a66d0a1a9 | 173 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i); |
| MiniTLS | 2:527a66d0a1a9 | 174 | t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4]; |
| MiniTLS | 2:527a66d0a1a9 | 175 | S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t; |
| MiniTLS | 2:527a66d0a1a9 | 176 | } |
| MiniTLS | 2:527a66d0a1a9 | 177 | #else |
| MiniTLS | 2:527a66d0a1a9 | 178 | #define RND(a,b,c,d,e,f,g,h,i,ki) \ |
| MiniTLS | 2:527a66d0a1a9 | 179 | t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; \ |
| MiniTLS | 2:527a66d0a1a9 | 180 | t1 = Sigma0(a) + Maj(a, b, c); \ |
| MiniTLS | 2:527a66d0a1a9 | 181 | d += t0; \ |
| MiniTLS | 2:527a66d0a1a9 | 182 | h = t0 + t1; |
| MiniTLS | 2:527a66d0a1a9 | 183 | |
| MiniTLS | 2:527a66d0a1a9 | 184 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98); |
| MiniTLS | 2:527a66d0a1a9 | 185 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491); |
| MiniTLS | 2:527a66d0a1a9 | 186 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf); |
| MiniTLS | 2:527a66d0a1a9 | 187 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5); |
| MiniTLS | 2:527a66d0a1a9 | 188 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b); |
| MiniTLS | 2:527a66d0a1a9 | 189 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1); |
| MiniTLS | 2:527a66d0a1a9 | 190 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4); |
| MiniTLS | 2:527a66d0a1a9 | 191 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5); |
| MiniTLS | 2:527a66d0a1a9 | 192 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98); |
| MiniTLS | 2:527a66d0a1a9 | 193 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01); |
| MiniTLS | 2:527a66d0a1a9 | 194 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be); |
| MiniTLS | 2:527a66d0a1a9 | 195 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3); |
| MiniTLS | 2:527a66d0a1a9 | 196 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74); |
| MiniTLS | 2:527a66d0a1a9 | 197 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe); |
| MiniTLS | 2:527a66d0a1a9 | 198 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7); |
| MiniTLS | 2:527a66d0a1a9 | 199 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174); |
| MiniTLS | 2:527a66d0a1a9 | 200 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1); |
| MiniTLS | 2:527a66d0a1a9 | 201 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786); |
| MiniTLS | 2:527a66d0a1a9 | 202 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6); |
| MiniTLS | 2:527a66d0a1a9 | 203 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc); |
| MiniTLS | 2:527a66d0a1a9 | 204 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f); |
| MiniTLS | 2:527a66d0a1a9 | 205 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa); |
| MiniTLS | 2:527a66d0a1a9 | 206 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc); |
| MiniTLS | 2:527a66d0a1a9 | 207 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da); |
| MiniTLS | 2:527a66d0a1a9 | 208 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152); |
| MiniTLS | 2:527a66d0a1a9 | 209 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d); |
| MiniTLS | 2:527a66d0a1a9 | 210 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8); |
| MiniTLS | 2:527a66d0a1a9 | 211 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7); |
| MiniTLS | 2:527a66d0a1a9 | 212 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3); |
| MiniTLS | 2:527a66d0a1a9 | 213 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147); |
| MiniTLS | 2:527a66d0a1a9 | 214 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351); |
| MiniTLS | 2:527a66d0a1a9 | 215 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967); |
| MiniTLS | 2:527a66d0a1a9 | 216 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85); |
| MiniTLS | 2:527a66d0a1a9 | 217 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138); |
| MiniTLS | 2:527a66d0a1a9 | 218 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc); |
| MiniTLS | 2:527a66d0a1a9 | 219 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13); |
| MiniTLS | 2:527a66d0a1a9 | 220 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354); |
| MiniTLS | 2:527a66d0a1a9 | 221 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb); |
| MiniTLS | 2:527a66d0a1a9 | 222 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e); |
| MiniTLS | 2:527a66d0a1a9 | 223 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85); |
| MiniTLS | 2:527a66d0a1a9 | 224 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1); |
| MiniTLS | 2:527a66d0a1a9 | 225 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b); |
| MiniTLS | 2:527a66d0a1a9 | 226 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70); |
| MiniTLS | 2:527a66d0a1a9 | 227 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3); |
| MiniTLS | 2:527a66d0a1a9 | 228 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819); |
| MiniTLS | 2:527a66d0a1a9 | 229 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624); |
| MiniTLS | 2:527a66d0a1a9 | 230 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585); |
| MiniTLS | 2:527a66d0a1a9 | 231 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070); |
| MiniTLS | 2:527a66d0a1a9 | 232 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116); |
| MiniTLS | 2:527a66d0a1a9 | 233 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08); |
| MiniTLS | 2:527a66d0a1a9 | 234 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c); |
| MiniTLS | 2:527a66d0a1a9 | 235 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5); |
| MiniTLS | 2:527a66d0a1a9 | 236 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3); |
| MiniTLS | 2:527a66d0a1a9 | 237 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a); |
| MiniTLS | 2:527a66d0a1a9 | 238 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f); |
| MiniTLS | 2:527a66d0a1a9 | 239 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3); |
| MiniTLS | 2:527a66d0a1a9 | 240 | RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee); |
| MiniTLS | 2:527a66d0a1a9 | 241 | RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f); |
| MiniTLS | 2:527a66d0a1a9 | 242 | RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814); |
| MiniTLS | 2:527a66d0a1a9 | 243 | RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208); |
| MiniTLS | 2:527a66d0a1a9 | 244 | RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa); |
| MiniTLS | 2:527a66d0a1a9 | 245 | RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb); |
| MiniTLS | 2:527a66d0a1a9 | 246 | RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7); |
| MiniTLS | 2:527a66d0a1a9 | 247 | RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2); |
| MiniTLS | 2:527a66d0a1a9 | 248 | |
| MiniTLS | 2:527a66d0a1a9 | 249 | #undef RND |
| MiniTLS | 2:527a66d0a1a9 | 250 | |
| MiniTLS | 2:527a66d0a1a9 | 251 | #endif |
| MiniTLS | 2:527a66d0a1a9 | 252 | |
| MiniTLS | 2:527a66d0a1a9 | 253 | /* feedback */ |
| MiniTLS | 2:527a66d0a1a9 | 254 | for (i = 0; i < 8; i++) { |
| MiniTLS | 2:527a66d0a1a9 | 255 | hash->state[i] = hash->state[i] + S[i]; |
| MiniTLS | 2:527a66d0a1a9 | 256 | } |
| MiniTLS | 2:527a66d0a1a9 | 257 | |
| MiniTLS | 2:527a66d0a1a9 | 258 | #if CRYPT_CLEAN_STACK |
| MiniTLS | 2:527a66d0a1a9 | 259 | burn_stack(sizeof(ulong32) * 74); |
| MiniTLS | 2:527a66d0a1a9 | 260 | #endif |
| MiniTLS | 2:527a66d0a1a9 | 261 | } |
