clang-format
This commit is contained in:
parent
7c5fef9b71
commit
6f6e2d30a8
@ -27,18 +27,15 @@
|
||||
|
||||
#ifdef LTC_BLAKE2B
|
||||
|
||||
enum blake2b_constant
|
||||
{
|
||||
BLAKE2B_BLOCKBYTES = 128,
|
||||
BLAKE2B_OUTBYTES = 64,
|
||||
BLAKE2B_KEYBYTES = 64,
|
||||
BLAKE2B_SALTBYTES = 16,
|
||||
BLAKE2B_PERSONALBYTES = 16
|
||||
};
|
||||
enum blake2b_constant {
|
||||
BLAKE2B_BLOCKBYTES = 128,
|
||||
BLAKE2B_OUTBYTES = 64,
|
||||
BLAKE2B_KEYBYTES = 64,
|
||||
BLAKE2B_SALTBYTES = 16,
|
||||
BLAKE2B_PERSONALBYTES = 16
|
||||
};
|
||||
|
||||
|
||||
struct blake2b_param
|
||||
{
|
||||
struct blake2b_param {
|
||||
unsigned char digest_length;
|
||||
unsigned char key_length;
|
||||
unsigned char fanout;
|
||||
@ -138,75 +135,68 @@ static const unsigned char blake2b_sigma[12][16] =
|
||||
{ 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 }
|
||||
};
|
||||
|
||||
|
||||
static void blake2b_set_lastnode( hash_state *md )
|
||||
{
|
||||
md->blake2b.f[1] = CONST64(0xffffffffffffffff);
|
||||
}
|
||||
static void blake2b_set_lastnode(hash_state *md) { md->blake2b.f[1] = CONST64(0xffffffffffffffff); }
|
||||
|
||||
/* Some helper functions, not necessarily useful */
|
||||
static int blake2b_is_lastblock( const hash_state *md )
|
||||
static int blake2b_is_lastblock(const hash_state *md) { return md->blake2b.f[0] != 0; }
|
||||
|
||||
static void blake2b_set_lastblock(hash_state *md)
|
||||
{
|
||||
return md->blake2b.f[0] != 0;
|
||||
if (md->blake2b.last_node)
|
||||
blake2b_set_lastnode(md);
|
||||
|
||||
md->blake2b.f[0] = CONST64(0xffffffffffffffff);
|
||||
}
|
||||
|
||||
static void blake2b_set_lastblock( hash_state *md )
|
||||
static void blake2b_increment_counter(hash_state *md, ulong64 inc)
|
||||
{
|
||||
if( md->blake2b.last_node ) blake2b_set_lastnode( md );
|
||||
|
||||
md->blake2b.f[0] = CONST64(0xffffffffffffffff);
|
||||
md->blake2b.t[0] += inc;
|
||||
md->blake2b.t[1] += (md->blake2b.t[0] < inc);
|
||||
}
|
||||
|
||||
static void blake2b_increment_counter( hash_state *md, ulong64 inc )
|
||||
static void blake2b_init0(hash_state *md)
|
||||
{
|
||||
md->blake2b.t[0] += inc;
|
||||
md->blake2b.t[1] += ( md->blake2b.t[0] < inc );
|
||||
}
|
||||
unsigned long i;
|
||||
XMEMSET(&md->blake2b, 0, sizeof(md->blake2b));
|
||||
|
||||
static void blake2b_init0( hash_state *md )
|
||||
{
|
||||
unsigned long i;
|
||||
XMEMSET( &md->blake2b, 0, sizeof( md->blake2b ) );
|
||||
|
||||
for( i = 0; i < 8; ++i ) md->blake2b.h[i] = blake2b_IV[i];
|
||||
for (i = 0; i < 8; ++i)
|
||||
md->blake2b.h[i] = blake2b_IV[i];
|
||||
}
|
||||
|
||||
/* init xors IV with input parameter block */
|
||||
int blake2b_init_param( hash_state *md, const struct blake2b_param *P )
|
||||
int blake2b_init_param(hash_state *md, const struct blake2b_param *P)
|
||||
{
|
||||
const unsigned char *p = ( const unsigned char * )( P );
|
||||
unsigned long i;
|
||||
const unsigned char *p = (const unsigned char *)(P);
|
||||
unsigned long i;
|
||||
|
||||
blake2b_init0( md );
|
||||
blake2b_init0(md);
|
||||
|
||||
/* IV XOR ParamBlock */
|
||||
for( i = 0; i < 8; ++i ) {
|
||||
ulong64 tmp;
|
||||
LOAD64L(tmp, p + sizeof( md->blake2b.h[i] ) * i );
|
||||
md->blake2b.h[i] ^= tmp;
|
||||
}
|
||||
/* IV XOR ParamBlock */
|
||||
for (i = 0; i < 8; ++i) {
|
||||
ulong64 tmp;
|
||||
LOAD64L(tmp, p + sizeof(md->blake2b.h[i]) * i);
|
||||
md->blake2b.h[i] ^= tmp;
|
||||
}
|
||||
|
||||
md->blake2b.outlen = P->digest_length;
|
||||
return CRYPT_OK;
|
||||
md->blake2b.outlen = P->digest_length;
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int blake2b_init( hash_state *md, unsigned long outlen )
|
||||
int blake2b_init(hash_state *md, unsigned long outlen)
|
||||
{
|
||||
struct blake2b_param P;
|
||||
struct blake2b_param P;
|
||||
|
||||
LTC_ARGCHK(md != NULL);
|
||||
LTC_ARGCHK(md != NULL);
|
||||
|
||||
if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) )
|
||||
return CRYPT_INVALID_ARG;
|
||||
if ((!outlen) || (outlen > BLAKE2B_OUTBYTES))
|
||||
return CRYPT_INVALID_ARG;
|
||||
|
||||
XMEMSET(&P, 0, sizeof(P));
|
||||
XMEMSET(&P, 0, sizeof(P));
|
||||
|
||||
P.digest_length = (unsigned char)outlen;
|
||||
P.fanout = 1;
|
||||
P.depth = 1;
|
||||
return blake2b_init_param( md, &P );
|
||||
P.digest_length = (unsigned char)outlen;
|
||||
P.fanout = 1;
|
||||
P.depth = 1;
|
||||
return blake2b_init_param(md, &P);
|
||||
}
|
||||
|
||||
int blake2b_160_init(hash_state *md) { return blake2b_init(md, 20); }
|
||||
@ -217,32 +207,29 @@ int blake2b_384_init(hash_state *md) { return blake2b_init(md, 48); }
|
||||
|
||||
int blake2b_512_init(hash_state *md) { return blake2b_init(md, 64); }
|
||||
|
||||
#define G(r, i, a, b, c, d) \
|
||||
do { \
|
||||
a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \
|
||||
d = ROR64(d ^ a, 32); \
|
||||
c = c + d; \
|
||||
b = ROR64(b ^ c, 24); \
|
||||
a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \
|
||||
d = ROR64(d ^ a, 16); \
|
||||
c = c + d; \
|
||||
b = ROR64(b ^ c, 63); \
|
||||
} while (0)
|
||||
|
||||
|
||||
|
||||
#define G(r,i,a,b,c,d) \
|
||||
do { \
|
||||
a = a + b + m[blake2b_sigma[r][2*i+0]]; \
|
||||
d = ROR64(d ^ a, 32); \
|
||||
c = c + d; \
|
||||
b = ROR64(b ^ c, 24); \
|
||||
a = a + b + m[blake2b_sigma[r][2*i+1]]; \
|
||||
d = ROR64(d ^ a, 16); \
|
||||
c = c + d; \
|
||||
b = ROR64(b ^ c, 63); \
|
||||
} while(0)
|
||||
|
||||
#define ROUND(r) \
|
||||
do { \
|
||||
G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \
|
||||
G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \
|
||||
G(r,2,v[ 2],v[ 6],v[10],v[14]); \
|
||||
G(r,3,v[ 3],v[ 7],v[11],v[15]); \
|
||||
G(r,4,v[ 0],v[ 5],v[10],v[15]); \
|
||||
G(r,5,v[ 1],v[ 6],v[11],v[12]); \
|
||||
G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \
|
||||
G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \
|
||||
} while(0)
|
||||
#define ROUND(r) \
|
||||
do { \
|
||||
G(r, 0, v[0], v[4], v[8], v[12]); \
|
||||
G(r, 1, v[1], v[5], v[9], v[13]); \
|
||||
G(r, 2, v[2], v[6], v[10], v[14]); \
|
||||
G(r, 3, v[3], v[7], v[11], v[15]); \
|
||||
G(r, 4, v[0], v[5], v[10], v[15]); \
|
||||
G(r, 5, v[1], v[6], v[11], v[12]); \
|
||||
G(r, 6, v[2], v[7], v[8], v[13]); \
|
||||
G(r, 7, v[3], v[4], v[9], v[14]); \
|
||||
} while (0)
|
||||
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
static int _blake2b_compress(hash_state *md, const unsigned char *buf)
|
||||
@ -250,44 +237,44 @@ static int _blake2b_compress(hash_state *md, const unsigned char *buf)
|
||||
static int blake2b_compress(hash_state *md, const unsigned char *buf)
|
||||
#endif
|
||||
{
|
||||
ulong64 m[16];
|
||||
ulong64 v[16];
|
||||
unsigned long i;
|
||||
ulong64 m[16];
|
||||
ulong64 v[16];
|
||||
unsigned long i;
|
||||
|
||||
for( i = 0; i < 16; ++i ) {
|
||||
LOAD64L(m[i], buf + i * sizeof( m[i] ) );
|
||||
}
|
||||
for (i = 0; i < 16; ++i) {
|
||||
LOAD64L(m[i], buf + i * sizeof(m[i]));
|
||||
}
|
||||
|
||||
for( i = 0; i < 8; ++i ) {
|
||||
v[i] = md->blake2b.h[i];
|
||||
}
|
||||
for (i = 0; i < 8; ++i) {
|
||||
v[i] = md->blake2b.h[i];
|
||||
}
|
||||
|
||||
v[ 8] = blake2b_IV[0];
|
||||
v[ 9] = blake2b_IV[1];
|
||||
v[10] = blake2b_IV[2];
|
||||
v[11] = blake2b_IV[3];
|
||||
v[12] = blake2b_IV[4] ^ md->blake2b.t[0];
|
||||
v[13] = blake2b_IV[5] ^ md->blake2b.t[1];
|
||||
v[14] = blake2b_IV[6] ^ md->blake2b.f[0];
|
||||
v[15] = blake2b_IV[7] ^ md->blake2b.f[1];
|
||||
v[8] = blake2b_IV[0];
|
||||
v[9] = blake2b_IV[1];
|
||||
v[10] = blake2b_IV[2];
|
||||
v[11] = blake2b_IV[3];
|
||||
v[12] = blake2b_IV[4] ^ md->blake2b.t[0];
|
||||
v[13] = blake2b_IV[5] ^ md->blake2b.t[1];
|
||||
v[14] = blake2b_IV[6] ^ md->blake2b.f[0];
|
||||
v[15] = blake2b_IV[7] ^ md->blake2b.f[1];
|
||||
|
||||
ROUND( 0 );
|
||||
ROUND( 1 );
|
||||
ROUND( 2 );
|
||||
ROUND( 3 );
|
||||
ROUND( 4 );
|
||||
ROUND( 5 );
|
||||
ROUND( 6 );
|
||||
ROUND( 7 );
|
||||
ROUND( 8 );
|
||||
ROUND( 9 );
|
||||
ROUND( 10 );
|
||||
ROUND( 11 );
|
||||
ROUND(0);
|
||||
ROUND(1);
|
||||
ROUND(2);
|
||||
ROUND(3);
|
||||
ROUND(4);
|
||||
ROUND(5);
|
||||
ROUND(6);
|
||||
ROUND(7);
|
||||
ROUND(8);
|
||||
ROUND(9);
|
||||
ROUND(10);
|
||||
ROUND(11);
|
||||
|
||||
for( i = 0; i < 8; ++i ) {
|
||||
md->blake2b.h[i] = md->blake2b.h[i] ^ v[i] ^ v[i + 8];
|
||||
}
|
||||
return CRYPT_OK;
|
||||
for (i = 0; i < 8; ++i) {
|
||||
md->blake2b.h[i] = md->blake2b.h[i] ^ v[i] ^ v[i + 8];
|
||||
}
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
#undef G
|
||||
@ -303,63 +290,60 @@ static int blake2b_compress(hash_state *md, const unsigned char *buf)
|
||||
}
|
||||
#endif
|
||||
|
||||
int blake2b_process( hash_state *md, const unsigned char *in, unsigned long inlen )
|
||||
int blake2b_process(hash_state *md, const unsigned char *in, unsigned long inlen)
|
||||
{
|
||||
if( inlen > 0 )
|
||||
{
|
||||
unsigned long left = md->blake2b.curlen;
|
||||
unsigned long fill = BLAKE2B_BLOCKBYTES - left;
|
||||
if( inlen > fill )
|
||||
{
|
||||
md->blake2b.curlen = 0;
|
||||
XMEMCPY( md->blake2b.buf + left, in, fill ); /* Fill buffer */
|
||||
blake2b_increment_counter( md, BLAKE2B_BLOCKBYTES );
|
||||
blake2b_compress( md, md->blake2b.buf ); /* Compress */
|
||||
in += fill; inlen -= fill;
|
||||
while(inlen > BLAKE2B_BLOCKBYTES) {
|
||||
blake2b_increment_counter(md, BLAKE2B_BLOCKBYTES);
|
||||
blake2b_compress( md, in );
|
||||
in += BLAKE2B_BLOCKBYTES;
|
||||
inlen -= BLAKE2B_BLOCKBYTES;
|
||||
if (inlen > 0) {
|
||||
unsigned long left = md->blake2b.curlen;
|
||||
unsigned long fill = BLAKE2B_BLOCKBYTES - left;
|
||||
if (inlen > fill) {
|
||||
md->blake2b.curlen = 0;
|
||||
XMEMCPY(md->blake2b.buf + left, in, fill); /* Fill buffer */
|
||||
blake2b_increment_counter(md, BLAKE2B_BLOCKBYTES);
|
||||
blake2b_compress(md, md->blake2b.buf); /* Compress */
|
||||
in += fill;
|
||||
inlen -= fill;
|
||||
while (inlen > BLAKE2B_BLOCKBYTES) {
|
||||
blake2b_increment_counter(md, BLAKE2B_BLOCKBYTES);
|
||||
blake2b_compress(md, in);
|
||||
in += BLAKE2B_BLOCKBYTES;
|
||||
inlen -= BLAKE2B_BLOCKBYTES;
|
||||
}
|
||||
}
|
||||
}
|
||||
XMEMCPY( md->blake2b.buf + md->blake2b.curlen, in, inlen );
|
||||
md->blake2b.curlen += inlen;
|
||||
}
|
||||
return CRYPT_OK;
|
||||
XMEMCPY(md->blake2b.buf + md->blake2b.curlen, in, inlen);
|
||||
md->blake2b.curlen += inlen;
|
||||
}
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
int blake2b_done( hash_state *md, unsigned char *out)
|
||||
int blake2b_done(hash_state *md, unsigned char *out)
|
||||
{
|
||||
unsigned char buffer[BLAKE2B_OUTBYTES] = {0};
|
||||
unsigned long i;
|
||||
unsigned char buffer[BLAKE2B_OUTBYTES] = { 0 };
|
||||
unsigned long i;
|
||||
|
||||
LTC_ARGCHK(md != NULL);
|
||||
LTC_ARGCHK(out != NULL);
|
||||
|
||||
/* if(md->blakebs.outlen != outlen) return CRYPT_INVALID_ARG; */
|
||||
|
||||
if (blake2b_is_lastblock(md))
|
||||
return CRYPT_ERROR;
|
||||
|
||||
if( blake2b_is_lastblock( md ) )
|
||||
return CRYPT_ERROR;
|
||||
blake2b_increment_counter(md, md->blake2b.curlen);
|
||||
blake2b_set_lastblock(md);
|
||||
XMEMSET(md->blake2b.buf + md->blake2b.curlen, 0, BLAKE2B_BLOCKBYTES - md->blake2b.curlen); /* Padding */
|
||||
blake2b_compress(md, md->blake2b.buf);
|
||||
|
||||
blake2b_increment_counter( md, md->blake2b.curlen );
|
||||
blake2b_set_lastblock( md );
|
||||
XMEMSET( md->blake2b.buf + md->blake2b.curlen, 0, BLAKE2B_BLOCKBYTES - md->blake2b.curlen ); /* Padding */
|
||||
blake2b_compress( md, md->blake2b.buf );
|
||||
for (i = 0; i < 8; ++i) /* Output full hash to temp buffer */
|
||||
STORE64L(md->blake2b.h[i], buffer + sizeof(md->blake2b.h[i]) * i);
|
||||
|
||||
for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */
|
||||
STORE64L( md->blake2b.h[i], buffer + sizeof( md->blake2b.h[i] ) * i );
|
||||
|
||||
XMEMCPY( out, buffer, md->blake2b.outlen );
|
||||
XMEMCPY(out, buffer, md->blake2b.outlen);
|
||||
#ifdef LTC_CLEAN_STACK
|
||||
zeromem(buffer, sizeof(buffer));
|
||||
zeromem(md, sizeof(hash_state));
|
||||
zeromem(buffer, sizeof(buffer));
|
||||
zeromem(md, sizeof(hash_state));
|
||||
#endif
|
||||
return CRYPT_OK;
|
||||
return CRYPT_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Self-test the hash
|
||||
@return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled
|
||||
@ -542,5 +526,4 @@ int blake2b_160_test(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user