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