24 #ifndef LIBMBEDCRYPTO_H_    25 #define LIBMBEDCRYPTO_H_    29 #ifdef HAVE_LIBMBEDCRYPTO    31 #include <mbedtls/md.h>    32 #include <mbedtls/bignum.h>    33 #include <mbedtls/pk.h>    34 #include <mbedtls/cipher.h>    35 #include <mbedtls/entropy.h>    36 #include <mbedtls/ctr_drbg.h>    38 typedef mbedtls_md_context_t *SHACTX;
    39 typedef mbedtls_md_context_t *SHA256CTX;
    40 typedef mbedtls_md_context_t *SHA384CTX;
    41 typedef mbedtls_md_context_t *SHA512CTX;
    42 typedef mbedtls_md_context_t *MD5CTX;
    43 typedef mbedtls_md_context_t *HMACCTX;
    44 typedef mbedtls_md_context_t *EVPCTX;
    46 #define SHA_DIGEST_LENGTH 20    47 #define SHA_DIGEST_LEN SHA_DIGEST_LENGTH    48 #define MD5_DIGEST_LEN 16    49 #define SHA256_DIGEST_LENGTH 32    50 #define SHA256_DIGEST_LEN SHA256_DIGEST_LENGTH    51 #define SHA384_DIGEST_LENGTH 48    52 #define SHA384_DIGEST_LEN SHA384_DIGEST_LENGTH    53 #define SHA512_DIGEST_LENGTH 64    54 #define SHA512_DIGEST_LEN SHA512_DIGEST_LENGTH    56 #ifndef EVP_MAX_MD_SIZE    57 #define EVP_MAX_MD_SIZE 64    60 #define EVP_DIGEST_LEN EVP_MAX_MD_SIZE    62 typedef mbedtls_mpi *bignum;
    65 #define NID_mbedtls_nistp256 0    66 #define NID_mbedtls_nistp384 1    67 #define NID_mbedtls_nistp521 2    69 struct mbedtls_ecdsa_sig {
    74 bignum ssh_mbedcry_bn_new(
void);
    75 void ssh_mbedcry_bn_free(bignum num);
    76 char *ssh_mbedcry_bn2num(bignum num, 
int radix);
    77 int ssh_mbedcry_rand(bignum rnd, 
int bits, 
int top, 
int bottom);
    78 int ssh_mbedcry_is_bit_set(bignum num, 
size_t pos);
    80 #define bignum_new() ssh_mbedcry_bn_new()    81 #define bignum_safe_free(num) do { \    82     if ((num) != NULL) { \    83         ssh_mbedcry_bn_free(num); \    87 #define bignum_set_word(bn, n) mbedtls_mpi_lset(bn, n)     89 #define bignum_bin2bn(data, datalen, bn) mbedtls_mpi_read_binary(bn, data, \    91 #define bignum_bn2dec(num) ssh_mbedcry_bn2num(num, 10)    92 #define bignum_dec2bn(data, bn) mbedtls_mpi_read_string(bn, 10, data)    93 #define bignum_bn2hex(num) ssh_mbedcry_bn2num(num, 16)    94 #define bignum_rand(rnd, bits) ssh_mbedcry_rand((rnd), (bits), 0, 1)    95 #define bignum_mod_exp(dest, generator, exp, modulo, ctx) \    96         mbedtls_mpi_exp_mod(dest, generator, exp, modulo, NULL)    97 #define bignum_num_bytes(num) mbedtls_mpi_size(num)    98 #define bignum_num_bits(num) mbedtls_mpi_bitlen(num)    99 #define bignum_is_bit_set(num, bit) ssh_mbedcry_is_bit_set(num, bit)   100 #define bignum_bn2bin(num, ptr) mbedtls_mpi_write_binary(num, ptr, \   101         mbedtls_mpi_size(num))   102 #define bignum_cmp(num1, num2) mbedtls_mpi_cmp_mpi(num1, num2)   104 mbedtls_ctr_drbg_context *ssh_get_mbedtls_ctr_drbg_context(
void);
   106 int ssh_mbedtls_random(
void *where, 
int len, 
int strong);
   108 ssh_string make_ecpoint_string(
const mbedtls_ecp_group *g, 
const   109         mbedtls_ecp_point *p);