#include #include 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;ix ); 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>4) & 0x0f ]; s[ (i<<1) +1 ]= hexdigits[ (p[i]) & 0x0f ]; } s[minsize-1] = 0x00; return s; }