32 #if !defined(POLARSSL_CONFIG_FILE)
35 #include POLARSSL_CONFIG_FILE
38 #if defined(POLARSSL_ECDSA_C)
43 #if defined(POLARSSL_ECDSA_DETERMINISTIC)
47 #if defined(POLARSSL_ECDSA_DETERMINISTIC)
56 static const md_info_t *md_info_by_size(
size_t min_size )
58 const md_info_t *md_cur, *md_picked = NULL;
61 for( md_alg =
md_list(); *md_alg != 0; md_alg++ )
64 (
size_t) md_cur->
size < min_size ||
65 ( md_picked != NULL && md_cur->
size > md_picked->
size ) )
80 const unsigned char *buf,
size_t blen )
83 size_t n_size = ( grp->
nbits + 7 ) / 8;
84 size_t use_size = blen > n_size ? n_size : blen;
87 if( use_size * 8 > grp->
nbits )
103 const mpi *d,
const unsigned char *buf,
size_t blen,
104 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
106 int ret, key_tries, sign_tries, blind_tries;
111 if( grp->
N.
p == NULL )
130 if( key_tries++ > 10 )
141 MPI_CHK( derive_mpi( grp, &e, buf, blen ) );
150 size_t n_size = ( grp->
nbits + 7 ) / 8;
155 if( ++blind_tries > 30 )
172 if( sign_tries++ > 10 )
187 #if defined(POLARSSL_ECDSA_DETERMINISTIC)
192 const mpi *d,
const unsigned char *buf,
size_t blen,
198 size_t grp_len = ( grp->
nbits + 7 ) / 8;
204 md_info = md_info_by_size( blen );
208 if( md_info == NULL )
216 MPI_CHK( derive_mpi( grp, &h, buf, blen ) );
236 const unsigned char *buf,
size_t blen,
240 mpi e, s_inv, u1, u2;
247 if( grp->
N.
p == NULL )
268 MPI_CHK( derive_mpi( grp, &e, buf, blen ) );
333 #if POLARSSL_ECP_MAX_BYTES > 124
334 #error "POLARSSL_ECP_MAX_BYTES bigger than expected, please fix MAX_SIG_LEN"
336 #define MAX_SIG_LEN ( 3 + 2 * ( 2 + POLARSSL_ECP_MAX_BYTES ) )
342 unsigned char *sig,
size_t *slen )
345 unsigned char buf[MAX_SIG_LEN];
346 unsigned char *p = buf +
sizeof( buf );
356 memcpy( sig, p, len );
366 const unsigned char *hash,
size_t hlen,
367 unsigned char *sig,
size_t *slen,
368 int (*f_rng)(
void *,
unsigned char *,
size_t),
374 hash, hlen, f_rng, p_rng ) ) != 0 )
379 return( ecdsa_signature_to_asn1( ctx, sig, slen ) );
382 #if defined(POLARSSL_ECDSA_DETERMINISTIC)
387 const unsigned char *hash,
size_t hlen,
388 unsigned char *sig,
size_t *slen,
394 hash, hlen, md_alg ) ) != 0 )
399 return( ecdsa_signature_to_asn1( ctx, sig, slen ) );
407 const unsigned char *hash,
size_t hlen,
408 const unsigned char *sig,
size_t slen )
411 unsigned char *p = (
unsigned char *) sig;
412 const unsigned char *end = sig + slen;
430 &ctx->
Q, &ctx->
r, &ctx->
s ) ) != 0 )
443 int (*f_rng)(
void *,
unsigned char *,
size_t),
void *p_rng )
457 ( ret =
mpi_copy( &ctx->
d, &key->
d ) ) != 0 ||
490 #if defined(POLARSSL_SELF_TEST)