Hash a single 512-bit block. This is the core of the algorithm. */
| 29 | |
| 30 | /* Hash a single 512-bit block. This is the core of the algorithm. */ |
| 31 | void SHA1Transform(uint32 state[5], uint32 workspace[16], const byte buffer[64], bool inplace) |
| 32 | { |
| 33 | uint32 a, b, c, d, e; |
| 34 | |
| 35 | union CHAR64LONG16 |
| 36 | { |
| 37 | unsigned char c[64]; |
| 38 | uint32 l[16]; |
| 39 | } *block; |
| 40 | |
| 41 | if (inplace) |
| 42 | block = (CHAR64LONG16*)buffer; |
| 43 | else |
| 44 | { |
| 45 | block = (CHAR64LONG16*)workspace; |
| 46 | memcpy(block, buffer, 64); |
| 47 | } |
| 48 | |
| 49 | /* Copy context->state[] to working vars */ |
| 50 | a = state[0]; |
| 51 | b = state[1]; |
| 52 | c = state[2]; |
| 53 | d = state[3]; |
| 54 | e = state[4]; |
| 55 | |
| 56 | #ifdef SHA1_UNROLL |
| 57 | /* 4 rounds of 20 operations each. Loop unrolled. */ |
| 58 | R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); |
| 59 | R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); |
| 60 | R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); |
| 61 | R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); |
| 62 | R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); |
| 63 | R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); |
| 64 | R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); |
| 65 | R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); |
| 66 | R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); |
| 67 | R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); |
| 68 | R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); |
| 69 | R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); |
| 70 | R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); |
| 71 | R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); |
| 72 | R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); |
| 73 | R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); |
| 74 | R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); |
| 75 | R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); |
| 76 | R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); |
| 77 | R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); |
| 78 | #else |
| 79 | for (uint I=0;;I+=5) |
| 80 | { |
| 81 | R0(a,b,c,d,e, I+0); if (I==15) break; |
| 82 | R0(e,a,b,c,d, I+1); R0(d,e,a,b,c, I+2); |
| 83 | R0(c,d,e,a,b, I+3); R0(b,c,d,e,a, I+4); |
| 84 | } |
| 85 | R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); |
| 86 | for (uint I=20;I<=35;I+=5) |
| 87 | { |
| 88 | R2(a,b,c,d,e,I+0); R2(e,a,b,c,d,I+1); R2(d,e,a,b,c,I+2); |
no outgoing calls
no test coverage detected