Browse Source

fix #404

pull/405/head
Max Lv 9 years ago
parent
commit
5be0c9c55d
3 changed files with 51 additions and 51 deletions
  1. 8
      src/encrypt.c
  2. 72
      src/hmac-sha1.c
  3. 22
      src/hmac-sha1.h

8
src/encrypt.c

@ -1039,7 +1039,7 @@ int ss_onetimeauth(char *auth, char *msg, int msg_len, uint8_t *iv)
#if defined(USE_CRYPTO_OPENSSL)
HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)auth, NULL);
#else
sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)auth);
ss_sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)auth);
#endif
return 0;
@ -1055,7 +1055,7 @@ int ss_onetimeauth_verify(char *auth, char *msg, int msg_len, uint8_t *iv)
#if defined(USE_CRYPTO_OPENSSL)
HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, hash, NULL);
#else
sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, hash);
ss_sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, hash);
#endif
return memcmp(auth, hash, ONETIMEAUTH_BYTES);
@ -1548,7 +1548,7 @@ int ss_check_hash(char **buf_ptr, ssize_t *buf_len, struct chunk *chunk, struct
HMAC(EVP_sha1(), key, enc_iv_len + sizeof(uint32_t),
(uint8_t *)chunk->buf + AUTH_BYTES, chunk->len, hash, NULL);
#else
sha1_hmac(key, enc_iv_len + sizeof(uint32_t),
ss_sha1_hmac(key, enc_iv_len + sizeof(uint32_t),
(uint8_t *)chunk->buf + AUTH_BYTES, chunk->len, hash);
#endif
@ -1594,7 +1594,7 @@ char *ss_gen_hash(char *buf, ssize_t *buf_len, uint32_t *counter, struct enc_ctx
#if defined(USE_CRYPTO_OPENSSL)
HMAC(EVP_sha1(), key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf, blen, hash, NULL);
#else
sha1_hmac(key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf, blen, hash);
ss_sha1_hmac(key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf, blen, hash);
#endif
memmove(buf + AUTH_BYTES, buf, blen);

72
src/hmac-sha1.c

@ -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 ) );
}

22
src/hmac-sha1.h

@ -66,14 +66,14 @@ typedef struct
unsigned char ipad[64]; /*!< HMAC: inner padding */
unsigned char opad[64]; /*!< HMAC: outer padding */
}
sha1_context;
ss_sha1_context;
/**
* \brief SHA-1 context setup
*
* \param ctx context to be initialized
*/
void sha1_starts( sha1_context *ctx );
void ss_sha1_starts( ss_sha1_context *ctx );
/**
* \brief SHA-1 process buffer
@ -82,7 +82,7 @@ void sha1_starts( sha1_context *ctx );
* \param input buffer holding the data
* \param ilen length of the input data
*/
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 );
/**
* \brief SHA-1 final digest
@ -90,10 +90,10 @@ void sha1_update( sha1_context *ctx, const unsigned char *input, size_t ilen );
* \param ctx SHA-1 context
* \param output SHA-1 checksum result
*/
void sha1_finish( sha1_context *ctx, unsigned char output[20] );
void ss_sha1_finish( ss_sha1_context *ctx, unsigned char output[20] );
/* Internal use */
void sha1_process( sha1_context *ctx, const unsigned char data[64] );
void ss_sha1_process( ss_sha1_context *ctx, const unsigned char data[64] );
/**
@ -103,7 +103,7 @@ void sha1_process( sha1_context *ctx, const unsigned char data[64] );
* \param ilen length of the input data
* \param output SHA-1 checksum result
*/
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] );
/**
@ -113,7 +113,7 @@ void sha1( const unsigned char *input, size_t ilen, unsigned char output[20] );
* \param key HMAC secret key
* \param keylen length of the HMAC key
*/
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 );
/**
* \brief SHA-1 HMAC process buffer
@ -122,7 +122,7 @@ void sha1_hmac_starts( sha1_context *ctx, const unsigned char *key, size_t keyle
* \param input buffer holding the data
* \param ilen length of the input data
*/
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 );
/**
* \brief SHA-1 HMAC final digest
@ -130,14 +130,14 @@ void sha1_hmac_update( sha1_context *ctx, const unsigned char *input, size_t ile
* \param ctx HMAC context
* \param output SHA-1 HMAC checksum result
*/
void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] );
void ss_sha1_hmac_finish( ss_sha1_context *ctx, unsigned char output[20] );
/**
* \brief SHA-1 HMAC context reset
*
* \param ctx HMAC context to be reset
*/
void sha1_hmac_reset( sha1_context *ctx );
void ss_sha1_hmac_reset( ss_sha1_context *ctx );
/**
* \brief Output = HMAC-SHA-1( hmac key, input buffer )
@ -148,7 +148,7 @@ void sha1_hmac_reset( sha1_context *ctx );
* \param ilen length of the input data
* \param output HMAC-SHA-1 result
*/
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] );

Loading…
Cancel
Save