00001
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef MBEDTLS_ECDSA_H
00032 #define MBEDTLS_ECDSA_H
00033
00034 #if !defined(MBEDTLS_CONFIG_FILE)
00035 #include "config.h"
00036 #else
00037 #include MBEDTLS_CONFIG_FILE
00038 #endif
00039
00040 #include "ecp.h"
00041 #include "md.h"
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #if MBEDTLS_ECP_MAX_BYTES > 124
00058 #error "MBEDTLS_ECP_MAX_BYTES bigger than expected, please fix MBEDTLS_ECDSA_MAX_LEN"
00059 #endif
00060
00061 #define MBEDTLS_ECDSA_MAX_LEN ( 3 + 2 * ( 3 + MBEDTLS_ECP_MAX_BYTES ) )
00062
00066 typedef mbedtls_ecp_keypair mbedtls_ecdsa_context;
00067
00068 #ifdef __cplusplus
00069 extern "C" {
00070 #endif
00071
00098 int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s,
00099 const mbedtls_mpi *d, const unsigned char *buf, size_t blen,
00100 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
00101
00102 #if defined(MBEDTLS_ECDSA_DETERMINISTIC)
00103
00144 int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r,
00145 mbedtls_mpi *s, const mbedtls_mpi *d,
00146 const unsigned char *buf, size_t blen,
00147 mbedtls_md_type_t md_alg );
00187 int mbedtls_ecdsa_sign_det_ext( mbedtls_ecp_group *grp, mbedtls_mpi *r,
00188 mbedtls_mpi *s, const mbedtls_mpi *d,
00189 const unsigned char *buf, size_t blen,
00190 mbedtls_md_type_t md_alg,
00191 int (*f_rng_blind)(void *, unsigned char *,
00192 size_t),
00193 void *p_rng_blind );
00194 #endif
00195
00220 int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp,
00221 const unsigned char *buf, size_t blen,
00222 const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s);
00223
00265 int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg,
00266 const unsigned char *hash, size_t hlen,
00267 unsigned char *sig, size_t *slen,
00268 int (*f_rng)(void *, unsigned char *, size_t),
00269 void *p_rng );
00270
00271 #if defined(MBEDTLS_ECDSA_DETERMINISTIC)
00272 #if ! defined(MBEDTLS_DEPRECATED_REMOVED)
00273 #if defined(MBEDTLS_DEPRECATED_WARNING)
00274 #define MBEDTLS_DEPRECATED __attribute__((deprecated))
00275 #else
00276 #define MBEDTLS_DEPRECATED
00277 #endif
00278
00317 int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx,
00318 const unsigned char *hash, size_t hlen,
00319 unsigned char *sig, size_t *slen,
00320 mbedtls_md_type_t md_alg ) MBEDTLS_DEPRECATED;
00321 #undef MBEDTLS_DEPRECATED
00322 #endif
00323 #endif
00324
00349 int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx,
00350 const unsigned char *hash, size_t hlen,
00351 const unsigned char *sig, size_t slen );
00352
00367 int mbedtls_ecdsa_genkey( mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid,
00368 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
00369
00381 int mbedtls_ecdsa_from_keypair( mbedtls_ecdsa_context *ctx, const mbedtls_ecp_keypair *key );
00382
00388 void mbedtls_ecdsa_init( mbedtls_ecdsa_context *ctx );
00389
00395 void mbedtls_ecdsa_free( mbedtls_ecdsa_context *ctx );
00396
00397 #ifdef __cplusplus
00398 }
00399 #endif
00400
00401 #endif