libcurve/src/utils.c

60 lines
1.2 KiB
C

#include <curve.h>
#include <sha256.h>
char hexdigits[] = "0123456789ABCDEF";
void sha256(char *message, int len, char *hash)
{
SHA256_CTX sha;
sha256_init( &sha );
sha256_update( &sha, message, len );
sha256_final( &sha, hash );
}
void sha256_curve_points(ec_point_t* points, int points_length, curve_t curve, char *hash)
{
SHA256_CTX sha;
int blen = curve->bitwidth >> 3;
char b[blen];
sha256_init( &sha );
for (int i=0;i<points_length;i++)
{
memset( b, 0x00, blen );
mpz_export( b, NULL, -1, 1, -1, 0, points[i]->x );
sha256_update( &sha, b, blen );
memset( b, 0x00, blen );
mpz_export( b, NULL, -1, 1, -1, 0, points[i]->y );
sha256_update( &sha, b, blen );
}
sha256_final( &sha, hash);
}
char *print_hex(char *p, int len)
{
static char *s = NULL;
static int slen = 0;
int minsize = (len<<1)+1;
if (slen < minsize)
{
if (s)
free(s);
s = malloc(minsize);
slen = minsize;
}
for (int i=0; i<len; i++)
{
s[ (i<<1) ] = hexdigits[ (p[i]>>4) & 0x0f ];
s[ (i<<1) +1 ]= hexdigits[ (p[i]) & 0x0f ];
}
s[minsize-1] = 0x00;
return s;
}