00001
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 #ifndef MBEDTLS_ECDSA_H
00057 #define MBEDTLS_ECDSA_H
00058
00059 #if !defined(MBEDTLS_CONFIG_FILE)
00060 #include "config.h"
00061 #else
00062 #include MBEDTLS_CONFIG_FILE
00063 #endif
00064
00065 #include "ecp.h"
00066 #include "md.h"
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #if MBEDTLS_ECP_MAX_BYTES > 124
00083 #error "MBEDTLS_ECP_MAX_BYTES bigger than expected, please fix MBEDTLS_ECDSA_MAX_LEN"
00084 #endif
00085
00086 #define MBEDTLS_ECDSA_MAX_LEN ( 3 + 2 * ( 3 + MBEDTLS_ECP_MAX_BYTES ) )
00087
00091 typedef mbedtls_ecp_keypair mbedtls_ecdsa_context;
00092
00093 #ifdef __cplusplus
00094 extern "C" {
00095 #endif
00096
00123 int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s,
00124 const mbedtls_mpi *d, const unsigned char *buf, size_t blen,
00125 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
00126
00127 #if defined(MBEDTLS_ECDSA_DETERMINISTIC)
00128
00169 int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r,
00170 mbedtls_mpi *s, const mbedtls_mpi *d,
00171 const unsigned char *buf, size_t blen,
00172 mbedtls_md_type_t md_alg );
00212 int mbedtls_ecdsa_sign_det_ext( mbedtls_ecp_group *grp, mbedtls_mpi *r,
00213 mbedtls_mpi *s, const mbedtls_mpi *d,
00214 const unsigned char *buf, size_t blen,
00215 mbedtls_md_type_t md_alg,
00216 int (*f_rng_blind)(void *, unsigned char *,
00217 size_t),
00218 void *p_rng_blind );
00219 #endif
00220
00245 int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp,
00246 const unsigned char *buf, size_t blen,
00247 const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s);
00248
00290 int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg,
00291 const unsigned char *hash, size_t hlen,
00292 unsigned char *sig, size_t *slen,
00293 int (*f_rng)(void *, unsigned char *, size_t),
00294 void *p_rng );
00295
00296 #if defined(MBEDTLS_ECDSA_DETERMINISTIC)
00297 #if ! defined(MBEDTLS_DEPRECATED_REMOVED)
00298 #if defined(MBEDTLS_DEPRECATED_WARNING)
00299 #define MBEDTLS_DEPRECATED __attribute__((deprecated))
00300 #else
00301 #define MBEDTLS_DEPRECATED
00302 #endif
00303
00342 int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx,
00343 const unsigned char *hash, size_t hlen,
00344 unsigned char *sig, size_t *slen,
00345 mbedtls_md_type_t md_alg ) MBEDTLS_DEPRECATED;
00346 #undef MBEDTLS_DEPRECATED
00347 #endif
00348 #endif
00349
00374 int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx,
00375 const unsigned char *hash, size_t hlen,
00376 const unsigned char *sig, size_t slen );
00377
00392 int mbedtls_ecdsa_genkey( mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid,
00393 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng );
00394
00406 int mbedtls_ecdsa_from_keypair( mbedtls_ecdsa_context *ctx, const mbedtls_ecp_keypair *key );
00407
00413 void mbedtls_ecdsa_init( mbedtls_ecdsa_context *ctx );
00414
00420 void mbedtls_ecdsa_free( mbedtls_ecdsa_context *ctx );
00421
00422 #ifdef __cplusplus
00423 }
00424 #endif
00425
00426 #endif