00001 00027 #ifndef POLARSSL_ECDSA_H 00028 #define POLARSSL_ECDSA_H 00029 00030 #include "ecp.h" 00031 00037 typedef struct 00038 { 00039 ecp_group grp; 00040 mpi d; 00041 ecp_point Q; 00042 mpi r; 00043 mpi s; 00044 } 00045 ecdsa_context; 00046 00047 #ifdef __cplusplus 00048 extern "C" { 00049 #endif 00050 00066 int ecdsa_sign( ecp_group *grp, mpi *r, mpi *s, 00067 const mpi *d, const unsigned char *buf, size_t blen, 00068 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); 00069 00084 int ecdsa_verify( ecp_group *grp, 00085 const unsigned char *buf, size_t blen, 00086 const ecp_point *Q, const mpi *r, const mpi *s); 00087 00109 int ecdsa_write_signature( ecdsa_context *ctx, 00110 const unsigned char *hash, size_t hlen, 00111 unsigned char *sig, size_t *slen, 00112 int (*f_rng)(void *, unsigned char *, size_t), 00113 void *p_rng ); 00114 00128 int ecdsa_read_signature( ecdsa_context *ctx, 00129 const unsigned char *hash, size_t hlen, 00130 const unsigned char *sig, size_t slen ); 00131 00143 int ecdsa_genkey( ecdsa_context *ctx, ecp_group_id gid, 00144 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); 00145 00154 int ecdsa_from_keypair( ecdsa_context *ctx, const ecp_keypair *key ); 00155 00161 void ecdsa_init( ecdsa_context *ctx ); 00162 00168 void ecdsa_free( ecdsa_context *ctx ); 00169 00175 int ecdsa_self_test( int verbose ); 00176 00177 #ifdef __cplusplus 00178 } 00179 #endif 00180 00181 #endif