9 RCSID(
"$Id: 0bcccca9037e19df3bb39d453cc44e9107c626dd $")
11 #include <freeradius-devel/util/sha1.h>
14 #ifndef WITH_OPENSSL_SHA1
15 # define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
20 # define blk0(i) (block->l[i] = htonl(block->l[i]))
22 # define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
23 ^block->l[(i+2)&15]^block->l[i&15],1))
26 # define R0(v,w,x,y,z,i) do { z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); } while (0)
27 # define R1(v,w,x,y,z,i) do { z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); } while (0)
28 # define R2(v,w,x,y,z,i) do { z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); } while (0)
29 # define R3(v,w,x,y,z,i) do { z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); } while (0)
30 # define R4(v,w,x,y,z,i) do { z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); } while (0)
45 block = (CHAR64LONG16*)workspace;
56 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);
57 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);
58 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);
59 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);
60 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);
61 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);
62 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);
63 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);
64 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);
65 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);
66 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);
67 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);
68 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);
69 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);
70 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);
71 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);
72 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);
73 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);
74 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);
75 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);
84 # ifndef STATIC_ANALYZER
86 a = b = c = d = e = 0;
100 context->state[4] = 0xC3D2E1F0;
117 if (len == 0)
return;
119 j = (
context->count[0] >> 3) & 63;
120 if ((
context->count[0] += len << 3) < (len << 3)) {
124 context->count[1] += (len >> 29);
125 if ((j + len) > 63) {
126 memcpy(&
context->buffer[j],
in, (i = 64-j));
128 for ( ; i + 63 < len; i += 64) {
135 memcpy(&
context->buffer[j], &
in[i], len - i);
146 for (i = 0; i < 8; i++) {
147 finalcount[i] = (
uint8_t)((
context->count[(i >= 4 ? 0 : 1)] >> ((3-(i & 3)) * 8) ) & 255);
152 while ((
context->count[0] & 504) != 448) {
156 for (i = 0; i < 20; i++) {
157 digest[i] = (
uint8_t)((
context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
160 # ifndef STATIC_ANALYZER
163 memset(
context->buffer, 0, 64);
166 memset(&finalcount, 0, 8);
178 for (i = 0; i < 20; i++) {
179 digest[i] = (
uint8_t)((
context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
182 # ifndef STATIC_ANALYZER
185 memset(
context->buffer, 0, 64);
static int const char char buffer[256]
#define R1(v, w, x, y, z, i)
void fr_sha1_init(fr_sha1_ctx *context)
#define R2(v, w, x, y, z, i)
#define R0(v, w, x, y, z, i)
void fr_sha1_final_no_len(uint8_t digest[static SHA1_DIGEST_LENGTH], fr_sha1_ctx *context)
#define R3(v, w, x, y, z, i)
void fr_sha1_final(uint8_t digest[static SHA1_DIGEST_LENGTH], fr_sha1_ctx *context)
void fr_sha1_update(fr_sha1_ctx *context, uint8_t const *in, size_t len)
#define R4(v, w, x, y, z, i)
void fr_sha1_transform(uint32_t state[static 5], uint8_t const buffer[static 64])
#define SHA1_DIGEST_LENGTH