X-Git-Url: https://git.hcoop.net/hcoop/debian/courier-authlib.git/blobdiff_plain/781cfcb8fd50934c470e0dabf79d32ab333dec68:/sha1/sha1.c..f77892e671e1261ec26e5133f86b8a52635f3dd2:/libs/sha1/static/git-favicon.png diff --git a/sha1/sha1.c b/sha1/sha1.c deleted file mode 100644 index d5adb5e..0000000 --- a/sha1/sha1.c +++ /dev/null @@ -1,193 +0,0 @@ -/* -** Copyright 2001 Double Precision, Inc. -** See COPYING for distribution information. -*/ - -#define SHA1_INTERNAL -#include "sha1.h" - -#include -#include - -static const char rcsid[]="$Id: sha1.c,v 1.3 2008/12/18 12:08:26 mrsam Exp $"; - -#define K0 0x5A827999 -#define K1 0x6ED9EBA1 -#define K2 0x8F1BBCDC -#define K3 0XCA62C1D6 - -#define K20(x) x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x - -static SHA1_WORD K[80] = { K20(K0), K20(K1), K20(K2), K20(K3) }; - -void sha1_context_init(struct SHA1_CONTEXT *c) -{ - if (sizeof(SHA1_WORD) != 4) - abort(); - - c->H[0] = 0x67452301; - c->H[1] = 0xEFCDAB89; - c->H[2] = 0x98BADCFE; - c->H[3] = 0x10325476; - c->H[4] = 0xC3D2E1F0; - c->blk_ptr=0; -} - -void sha1_context_hash(struct SHA1_CONTEXT *c, - const unsigned char blk[SHA1_BLOCK_SIZE]) -{ -SHA1_WORD A,B,C,D,E; -SHA1_WORD TEMP; -SHA1_WORD W[80]; -unsigned i, t; - -#define f(t,B,C,D) ( \ - (t) < 20 ? ( (B) & (C) ) | ( (~(B)) & (D) ) : \ - (t) >= 40 && (t) < 60 ? ( (B) & (C) ) | ( (B) & (D) ) | ( (C) & (D) ):\ - (B) ^ (C) ^ (D) ) - -#define S(a,b) ( ((SHA1_WORD)(a) << (b)) | ((SHA1_WORD)(a) >> (32 - (b)))) - - for (i=t=0; t<16; t++) - { - W[t]= blk[i]; i++; - W[t] = (W[t] << 8) | blk[i]; i++; - W[t] = (W[t] << 8) | blk[i]; i++; - W[t] = (W[t] << 8) | blk[i]; i++; - } - - for (t=16; t<80; t++) - { - TEMP= W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]; - W[t]= S(TEMP, 1); - } - - A=c->H[0]; - B=c->H[1]; - C=c->H[2]; - D=c->H[3]; - E=c->H[4]; - - for (t=0; t<80; t++) - { - TEMP = S(A,5); - TEMP += f(t, B, C, D); - TEMP += E; - TEMP += W[t]; - TEMP += K[t]; - - E=D; - D=C; - C= S(B, 30); - B=A; - A=TEMP; - } - - c->H[0] += A; - c->H[1] += B; - c->H[2] += C; - c->H[3] += D; - c->H[4] += E; -} - -void sha1_context_hashstream(struct SHA1_CONTEXT *c, const void *p, unsigned l) -{ -const unsigned char *cp=(const unsigned char *)p; -unsigned ll; - - while (l) - { - if (c->blk_ptr == 0 && l >= SHA1_BLOCK_SIZE) - { - sha1_context_hash(c, cp); - cp += SHA1_BLOCK_SIZE; - l -= SHA1_BLOCK_SIZE; - continue; - } - - ll=l; - if (ll > SHA1_BLOCK_SIZE - c->blk_ptr) - ll=SHA1_BLOCK_SIZE - c->blk_ptr; - memcpy(c->blk + c->blk_ptr, cp, ll); - c->blk_ptr += ll; - cp += ll; - l -= ll; - if (c->blk_ptr >= SHA1_BLOCK_SIZE) - { - sha1_context_hash(c, c->blk); - c->blk_ptr=0; - } - } -} - -void sha1_context_endstream(struct SHA1_CONTEXT *c, unsigned long l) -{ - unsigned char buf[8]; - static const unsigned char zero[SHA1_BLOCK_SIZE-8]; - - buf[0]=0x80; - sha1_context_hashstream(c, &buf, 1); - while (c->blk_ptr != SHA1_BLOCK_SIZE-8) - { - if (c->blk_ptr > SHA1_BLOCK_SIZE-8) - { - sha1_context_hashstream(c, zero, - SHA1_BLOCK_SIZE - c->blk_ptr); - continue; - } - sha1_context_hashstream(c, zero, - SHA1_BLOCK_SIZE-8-c->blk_ptr); - } - - l *= 8; - buf[7] = l; - buf[6] = (l >>= 8); - buf[5] = (l >>= 8); - buf[4] = (l >> 8); - buf[3]=buf[2]=buf[1]=buf[0]=0; - - sha1_context_hashstream(c, buf, 8); -} - -void sha1_context_digest(struct SHA1_CONTEXT *c, SHA1_DIGEST d) -{ -unsigned char *dp=d + SHA1_DIGEST_SIZE; -unsigned i; - - for ( i=5; i; ) - { - SHA1_WORD w=c->H[--i]; - - *--dp=w; w >>= 8; - *--dp=w; w >>= 8; - *--dp=w; w >>= 8; - *--dp=w; - } -} - -void sha1_context_restore(struct SHA1_CONTEXT *c, const SHA1_DIGEST d) -{ -const unsigned char *dp=d; -unsigned i; - - for (i=0; i<5; i++) - { - SHA1_WORD w= *dp++; - - w=(w << 8) | *dp++; - w=(w << 8) | *dp++; - w=(w << 8) | *dp++; - c->H[i]=w; - } - c->blk_ptr=0; -} - -void sha1_digest(const void *msg, unsigned len, SHA1_DIGEST d) -{ -struct SHA1_CONTEXT c; - - sha1_context_init( &c ); - sha1_context_hashstream(&c, msg, len); - sha1_context_endstream(&c, len); - sha1_context_digest( &c, d ); -}