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>
38typedef mbedtls_md_context_t *SHACTX;
39typedef mbedtls_md_context_t *SHA256CTX;
40typedef mbedtls_md_context_t *SHA384CTX;
41typedef mbedtls_md_context_t *SHA512CTX;
42typedef mbedtls_md_context_t *MD5CTX;
43typedef mbedtls_md_context_t *HMACCTX;
44typedef 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
62typedef mbedtls_mpi *bignum;
65#define NID_mbedtls_nistp256 0
66#define NID_mbedtls_nistp384 1
67#define NID_mbedtls_nistp521 2
69struct mbedtls_ecdsa_sig {
74bignum ssh_mbedcry_bn_new(
void);
75void ssh_mbedcry_bn_free(bignum num);
76char *ssh_mbedcry_bn2num(bignum num,
int radix);
77int ssh_mbedcry_rand(bignum rnd,
int bits,
int top,
int bottom);
78int 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)
104mbedtls_ctr_drbg_context *ssh_get_mbedtls_ctr_drbg_context(
void);
106int ssh_mbedtls_random(
void *where,
int len,
int strong);
108ssh_string make_ecpoint_string(
const mbedtls_ecp_group *g,
const
109 mbedtls_ecp_point *p);