libssh
0.12.2
The SSH library
Toggle main menu visibility
Loading...
Searching...
No Matches
libmbedcrypto.h
1
/*
2
* This file is part of the SSH Library
3
*
4
* Copyright (c) 2017 Sartura d.o.o.
5
*
6
* Author: Juraj Vijtiuk <juraj.vijtiuk@sartura.hr>
7
*
8
* The SSH Library is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU Lesser General Public License as published by
10
* the Free Software Foundation; either version 2.1 of the License, or (at your
11
* option) any later version.
12
*
13
* The SSH Library is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16
* License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public License
19
* along with the SSH Library; see the file COPYING. If not, write to
20
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21
* MA 02111-1307, USA.
22
*/
23
24
#ifndef LIBMBEDCRYPTO_H_
25
#define LIBMBEDCRYPTO_H_
26
27
#include "config.h"
28
29
#ifdef HAVE_LIBMBEDCRYPTO
30
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>
37
#include <mbedtls/platform.h>
38
39
typedef
mbedtls_md_context_t *SHACTX;
40
typedef
mbedtls_md_context_t *SHA256CTX;
41
typedef
mbedtls_md_context_t *SHA384CTX;
42
typedef
mbedtls_md_context_t *SHA512CTX;
43
typedef
mbedtls_md_context_t *MD5CTX;
44
typedef
mbedtls_md_context_t *HMACCTX;
45
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
55
56
#ifndef EVP_MAX_MD_SIZE
57
#define EVP_MAX_MD_SIZE 64
58
#endif
59
60
#define EVP_DIGEST_LEN EVP_MAX_MD_SIZE
61
62
#define ssh_crypto_free(x) mbedtls_free(x)
63
64
typedef
mbedtls_mpi *bignum;
65
typedef
const
mbedtls_mpi *const_bignum;
66
typedef
void
* bignum_CTX;
67
68
/* Constants for curves */
69
#define NID_mbedtls_nistp256 0
70
#define NID_mbedtls_nistp384 1
71
#define NID_mbedtls_nistp521 2
72
73
struct
mbedtls_ecdsa_sig {
74
bignum r;
75
bignum s;
76
};
77
78
#ifdef __cplusplus
79
extern
"C"
{
80
#endif
81
82
bignum ssh_mbedcry_bn_new(
void
);
83
void
ssh_mbedcry_bn_free(bignum num);
84
char
*ssh_mbedcry_bn2num(const_bignum num,
int
radix);
85
int
ssh_mbedcry_rand(bignum rnd,
int
bits,
int
top,
int
bottom);
86
int
ssh_mbedcry_is_bit_set(bignum num,
size_t
pos);
87
int
ssh_mbedcry_rand_range(bignum dest, bignum max);
88
int
ssh_mbedcry_hex2bn(bignum *dest,
char
*data);
89
90
#define bignum_new() ssh_mbedcry_bn_new()
91
#define bignum_safe_free(num) do { \
92
if ((num) != NULL) { \
93
ssh_mbedcry_bn_free(num); \
94
(num)=NULL; \
95
} \
96
} while(0)
97
#define bignum_ctx_new() NULL
98
#define bignum_ctx_free(num) do {(num) = NULL;} while(0)
99
#define bignum_ctx_invalid(ctx) (ctx == NULL?0:1)
100
#define bignum_set_word(bn, n) (mbedtls_mpi_lset(bn, n)==0?1:0)
/* TODO fix
101
overflow/underflow */
102
#define bignum_bin2bn(data, datalen, bn) do { \
103
*(bn) = bignum_new(); \
104
if (*(bn) != NULL) { \
105
mbedtls_mpi_read_binary(*(bn), data, datalen); \
106
} \
107
} while(0)
108
#define bignum_bn2dec(num) ssh_mbedcry_bn2num(num, 10)
109
#define bignum_dec2bn(data, bn) mbedtls_mpi_read_string(bn, 10, data)
110
#define bignum_bn2hex(num, dest) (*dest)=(unsigned char *)ssh_mbedcry_bn2num(num, 16)
111
#define bignum_hex2bn(data, dest) ssh_mbedcry_hex2bn(dest, data)
112
#define bignum_rand(rnd, bits) ssh_mbedcry_rand((rnd), (bits), 0, 1)
113
#define bignum_rand_range(rnd, max) ssh_mbedcry_rand_range(rnd, max)
114
#define bignum_mod_exp(dest, generator, exp, modulo, ctx) \
115
(mbedtls_mpi_exp_mod(dest, generator, exp, modulo, NULL)==0?1:0)
116
#define bignum_add(dest, a, b) mbedtls_mpi_add_mpi(dest, a, b)
117
#define bignum_sub(dest, a, b) mbedtls_mpi_sub_mpi(dest, a, b)
118
#define bignum_mod(dest, a, b, ctx) \
119
(mbedtls_mpi_mod_mpi(dest, a, b) == 0 ? 1 : 0)
120
#define bignum_num_bytes(num) mbedtls_mpi_size(num)
121
#define bignum_num_bits(num) mbedtls_mpi_bitlen(num)
122
#define bignum_is_bit_set(num, bit) ssh_mbedcry_is_bit_set(num, bit)
123
#define bignum_bn2bin(num, len, ptr) mbedtls_mpi_write_binary(num, ptr, \
124
mbedtls_mpi_size(num))
125
#define bignum_cmp(num1, num2) mbedtls_mpi_cmp_mpi(num1, num2)
126
#define bignum_rshift1(dest, src) mbedtls_mpi_copy(dest, src), mbedtls_mpi_shift_r(dest, 1)
127
#define bignum_dup(orig, dest) do { \
128
if (*(dest) == NULL) { \
129
*(dest) = bignum_new(); \
130
} \
131
if (*(dest) != NULL) { \
132
mbedtls_mpi_copy(*(dest), orig); \
133
} \
134
} while(0)
135
136
mbedtls_ctr_drbg_context *ssh_get_mbedtls_ctr_drbg_context(
void
);
137
138
int
ssh_mbedtls_random(
void
*where,
int
len,
int
strong);
139
140
ssh_string make_ecpoint_string(
const
mbedtls_ecp_group *g,
const
141
mbedtls_ecp_point *p);
142
143
#define ssh_fips_mode() false
144
145
#ifdef __cplusplus
146
}
147
#endif
148
149
#endif
/* HAVE_LIBMBEDCRYPTO */
150
#endif
/* LIBMBEDCRYPTO_H_ */
include
libssh
libmbedcrypto.h
Generated by
1.18.0