|
|
@ -33,7 +33,7 @@ |
|
|
|
/* |
|
|
|
* SHA-1 context setup |
|
|
|
*/ |
|
|
|
void sha1_starts( sha1_context *ctx ) |
|
|
|
void ss_sha1_starts( ss_sha1_context *ctx ) |
|
|
|
{ |
|
|
|
ctx->total[0] = 0; |
|
|
|
ctx->total[1] = 0; |
|
|
@ -45,7 +45,7 @@ void sha1_starts( sha1_context *ctx ) |
|
|
|
ctx->state[4] = 0xC3D2E1F0; |
|
|
|
} |
|
|
|
|
|
|
|
void sha1_process( sha1_context *ctx, const unsigned char data[64] ) |
|
|
|
void ss_sha1_process( ss_sha1_context *ctx, const unsigned char data[64] ) |
|
|
|
{ |
|
|
|
uint32_t temp, W[16], A, B, C, D, E; |
|
|
|
|
|
|
@ -204,7 +204,7 @@ void sha1_process( sha1_context *ctx, const unsigned char data[64] ) |
|
|
|
/* |
|
|
|
* SHA-1 process buffer |
|
|
|
*/ |
|
|
|
void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen ) |
|
|
|
void ss_sha1_update( ss_sha1_context *ctx, const unsigned char *input, size_t ilen ) |
|
|
|
{ |
|
|
|
size_t fill; |
|
|
|
uint32_t left; |
|
|
@ -224,7 +224,7 @@ void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen ) |
|
|
|
if( left && ilen >= fill ) |
|
|
|
{ |
|
|
|
memcpy( (void *) (ctx->buffer + left), input, fill ); |
|
|
|
sha1_process( ctx, ctx->buffer ); |
|
|
|
ss_sha1_process( ctx, ctx->buffer ); |
|
|
|
input += fill; |
|
|
|
ilen -= fill; |
|
|
|
left = 0; |
|
|
@ -232,7 +232,7 @@ void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen ) |
|
|
|
|
|
|
|
while( ilen >= 64 ) |
|
|
|
{ |
|
|
|
sha1_process( ctx, input ); |
|
|
|
ss_sha1_process( ctx, input ); |
|
|
|
input += 64; |
|
|
|
ilen -= 64; |
|
|
|
} |
|
|
@ -241,7 +241,7 @@ void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen ) |
|
|
|
memcpy( (void *) (ctx->buffer + left), input, ilen ); |
|
|
|
} |
|
|
|
|
|
|
|
static const unsigned char sha1_padding[64] = |
|
|
|
static const unsigned char ss_sha1_padding[64] = |
|
|
|
{ |
|
|
|
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
|
@ -252,7 +252,7 @@ static const unsigned char sha1_padding[64] = |
|
|
|
/* |
|
|
|
* SHA-1 final digest |
|
|
|
*/ |
|
|
|
void sha1_finish( sha1_context *ctx, unsigned char output[20] ) |
|
|
|
void ss_sha1_finish( ss_sha1_context *ctx, unsigned char output[20] ) |
|
|
|
{ |
|
|
|
uint32_t last, padn; |
|
|
|
uint32_t high, low; |
|
|
@ -268,8 +268,8 @@ void sha1_finish( sha1_context *ctx, unsigned char output[20] ) |
|
|
|
last = ctx->total[0] & 0x3F; |
|
|
|
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); |
|
|
|
|
|
|
|
sha1_update( ctx, sha1_padding, padn ); |
|
|
|
sha1_update( ctx, msglen, 8 ); |
|
|
|
ss_sha1_update( ctx, ss_sha1_padding, padn ); |
|
|
|
ss_sha1_update( ctx, msglen, 8 ); |
|
|
|
|
|
|
|
PUT_UINT32_BE( ctx->state[0], output, 0 ); |
|
|
|
PUT_UINT32_BE( ctx->state[1], output, 4 ); |
|
|
@ -280,28 +280,28 @@ void sha1_finish( sha1_context *ctx, unsigned char output[20] ) |
|
|
|
/* |
|
|
|
* output = SHA-1( input buffer ) |
|
|
|
*/ |
|
|
|
void sha1( const unsigned char *input, size_t ilen, unsigned char output[20] ) |
|
|
|
void ss_sha1( const unsigned char *input, size_t ilen, unsigned char output[20] ) |
|
|
|
{ |
|
|
|
sha1_context ctx; |
|
|
|
ss_sha1_context ctx; |
|
|
|
|
|
|
|
sha1_starts( &ctx ); |
|
|
|
sha1_update( &ctx, input, ilen ); |
|
|
|
sha1_finish( &ctx, output ); |
|
|
|
ss_sha1_starts( &ctx ); |
|
|
|
ss_sha1_update( &ctx, input, ilen ); |
|
|
|
ss_sha1_finish( &ctx, output ); |
|
|
|
|
|
|
|
memset( &ctx, 0, sizeof( sha1_context ) ); |
|
|
|
memset( &ctx, 0, sizeof( ss_sha1_context ) ); |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* SHA-1 HMAC context setup |
|
|
|
*/ |
|
|
|
void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, size_t keylen ) |
|
|
|
void ss_sha1_hmac_starts( ss_sha1_context *ctx, const unsigned char *key, size_t keylen ) |
|
|
|
{ |
|
|
|
size_t i; |
|
|
|
unsigned char sum[20]; |
|
|
|
|
|
|
|
if( keylen > 64 ) |
|
|
|
{ |
|
|
|
sha1( key, keylen, sum ); |
|
|
|
ss_sha1( key, keylen, sum ); |
|
|
|
keylen = 20; |
|
|
|
key = sum; |
|
|
|
} |
|
|
@ -315,8 +315,8 @@ void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, size_t keyle |
|
|
|
ctx->opad[i] = (unsigned char)( ctx->opad[i] ^ key[i] ); |
|
|
|
} |
|
|
|
|
|
|
|
sha1_starts( ctx ); |
|
|
|
sha1_update( ctx, ctx->ipad, 64 ); |
|
|
|
ss_sha1_starts( ctx ); |
|
|
|
ss_sha1_update( ctx, ctx->ipad, 64 ); |
|
|
|
|
|
|
|
memset( sum, 0, sizeof( sum ) ); |
|
|
|
} |
|
|
@ -324,23 +324,23 @@ void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, size_t keyle |
|
|
|
/* |
|
|
|
* SHA-1 HMAC process buffer |
|
|
|
*/ |
|
|
|
void sha1_hmac_update( sha1_context *ctx, const unsigned char *input, size_t ilen ) |
|
|
|
void ss_sha1_hmac_update( ss_sha1_context *ctx, const unsigned char *input, size_t ilen ) |
|
|
|
{ |
|
|
|
sha1_update( ctx, input, ilen ); |
|
|
|
ss_sha1_update( ctx, input, ilen ); |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* SHA-1 HMAC final digest |
|
|
|
*/ |
|
|
|
void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ) |
|
|
|
void ss_sha1_hmac_finish( ss_sha1_context *ctx, unsigned char output[20] ) |
|
|
|
{ |
|
|
|
unsigned char tmpbuf[20]; |
|
|
|
|
|
|
|
sha1_finish( ctx, tmpbuf ); |
|
|
|
sha1_starts( ctx ); |
|
|
|
sha1_update( ctx, ctx->opad, 64 ); |
|
|
|
sha1_update( ctx, tmpbuf, 20 ); |
|
|
|
sha1_finish( ctx, output ); |
|
|
|
ss_sha1_finish( ctx, tmpbuf ); |
|
|
|
ss_sha1_starts( ctx ); |
|
|
|
ss_sha1_update( ctx, ctx->opad, 64 ); |
|
|
|
ss_sha1_update( ctx, tmpbuf, 20 ); |
|
|
|
ss_sha1_finish( ctx, output ); |
|
|
|
|
|
|
|
memset( tmpbuf, 0, sizeof( tmpbuf ) ); |
|
|
|
} |
|
|
@ -348,26 +348,26 @@ void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] ) |
|
|
|
/* |
|
|
|
* SHA1 HMAC context reset |
|
|
|
*/ |
|
|
|
void sha1_hmac_reset( sha1_context *ctx ) |
|
|
|
void ss_sha1_hmac_reset( ss_sha1_context *ctx ) |
|
|
|
{ |
|
|
|
sha1_starts( ctx ); |
|
|
|
sha1_update( ctx, ctx->ipad, 64 ); |
|
|
|
ss_sha1_starts( ctx ); |
|
|
|
ss_sha1_update( ctx, ctx->ipad, 64 ); |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* output = HMAC-SHA-1( hmac key, input buffer ) |
|
|
|
*/ |
|
|
|
void sha1_hmac( const unsigned char *key, size_t keylen, |
|
|
|
void ss_sha1_hmac( const unsigned char *key, size_t keylen, |
|
|
|
const unsigned char *input, size_t ilen, |
|
|
|
unsigned char output[20] ) |
|
|
|
{ |
|
|
|
sha1_context ctx; |
|
|
|
ss_sha1_context ctx; |
|
|
|
|
|
|
|
sha1_hmac_starts( &ctx, key, keylen ); |
|
|
|
sha1_hmac_update( &ctx, input, ilen ); |
|
|
|
sha1_hmac_finish( &ctx, output ); |
|
|
|
ss_sha1_hmac_starts( &ctx, key, keylen ); |
|
|
|
ss_sha1_hmac_update( &ctx, input, ilen ); |
|
|
|
ss_sha1_hmac_finish( &ctx, output ); |
|
|
|
|
|
|
|
memset( &ctx, 0, sizeof( sha1_context ) ); |
|
|
|
memset( &ctx, 0, sizeof( ss_sha1_context ) ); |
|
|
|
} |
|
|
|
|
|
|
|
|