Blame include/libssh/libmbedcrypto.h

Packit Service 31306d
/*
Packit Service 31306d
 * This file is part of the SSH Library
Packit Service 31306d
 *
Packit Service 31306d
 * Copyright (c) 2017 Sartura d.o.o.
Packit Service 31306d
 *
Packit Service 31306d
 * Author: Juraj Vijtiuk <juraj.vijtiuk@sartura.hr>
Packit Service 31306d
 *
Packit Service 31306d
 * The SSH Library is free software; you can redistribute it and/or modify
Packit Service 31306d
 * it under the terms of the GNU Lesser General Public License as published by
Packit Service 31306d
 * the Free Software Foundation; either version 2.1 of the License, or (at your
Packit Service 31306d
 * option) any later version.
Packit Service 31306d
 *
Packit Service 31306d
 * The SSH Library is distributed in the hope that it will be useful, but
Packit Service 31306d
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
Packit Service 31306d
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
Packit Service 31306d
 * License for more details.
Packit Service 31306d
 *
Packit Service 31306d
 * You should have received a copy of the GNU Lesser General Public License
Packit Service 31306d
 * along with the SSH Library; see the file COPYING.  If not, write to
Packit Service 31306d
 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
Packit Service 31306d
 * MA 02111-1307, USA.
Packit Service 31306d
 */
Packit Service 31306d
Packit Service 31306d
#ifndef LIBMBEDCRYPTO_H_
Packit Service 31306d
#define LIBMBEDCRYPTO_H_
Packit Service 31306d
Packit Service 31306d
#include "config.h"
Packit Service 31306d
Packit Service 31306d
#ifdef HAVE_LIBMBEDCRYPTO
Packit Service 31306d
Packit Service 31306d
#include <mbedtls/md.h>
Packit Service 31306d
#include <mbedtls/bignum.h>
Packit Service 31306d
#include <mbedtls/pk.h>
Packit Service 31306d
#include <mbedtls/cipher.h>
Packit Service 31306d
#include <mbedtls/entropy.h>
Packit Service 31306d
#include <mbedtls/ctr_drbg.h>
Packit Service 31306d
Packit Service 31306d
typedef mbedtls_md_context_t *SHACTX;
Packit Service 31306d
typedef mbedtls_md_context_t *SHA256CTX;
Packit Service 31306d
typedef mbedtls_md_context_t *SHA384CTX;
Packit Service 31306d
typedef mbedtls_md_context_t *SHA512CTX;
Packit Service 31306d
typedef mbedtls_md_context_t *MD5CTX;
Packit Service 31306d
typedef mbedtls_md_context_t *HMACCTX;
Packit Service 31306d
typedef mbedtls_md_context_t *EVPCTX;
Packit Service 31306d
Packit Service 31306d
#define SHA_DIGEST_LENGTH 20
Packit Service 31306d
#define SHA_DIGEST_LEN SHA_DIGEST_LENGTH
Packit Service 31306d
#define MD5_DIGEST_LEN 16
Packit Service 31306d
#define SHA256_DIGEST_LENGTH 32
Packit Service 31306d
#define SHA256_DIGEST_LEN SHA256_DIGEST_LENGTH
Packit Service 31306d
#define SHA384_DIGEST_LENGTH 48
Packit Service 31306d
#define SHA384_DIGEST_LEN SHA384_DIGEST_LENGTH
Packit Service 31306d
#define SHA512_DIGEST_LENGTH 64
Packit Service 31306d
#define SHA512_DIGEST_LEN SHA512_DIGEST_LENGTH
Packit Service 31306d
Packit Service 31306d
#ifndef EVP_MAX_MD_SIZE
Packit Service 31306d
#define EVP_MAX_MD_SIZE 64
Packit Service 31306d
#endif
Packit Service 31306d
Packit Service 31306d
#define EVP_DIGEST_LEN EVP_MAX_MD_SIZE
Packit Service 31306d
Packit Service 31306d
typedef mbedtls_mpi *bignum;
Packit Service 31306d
typedef const mbedtls_mpi *const_bignum;
Packit Service 31306d
typedef void* bignum_CTX;
Packit Service 31306d
Packit Service 31306d
/* Constants for curves */
Packit Service 31306d
#define NID_mbedtls_nistp256 0
Packit Service 31306d
#define NID_mbedtls_nistp384 1
Packit Service 31306d
#define NID_mbedtls_nistp521 2
Packit Service 31306d
Packit Service 31306d
struct mbedtls_ecdsa_sig {
Packit Service 31306d
    bignum r;
Packit Service 31306d
    bignum s;
Packit Service 31306d
};
Packit Service 31306d
Packit Service 31306d
bignum ssh_mbedcry_bn_new(void);
Packit Service 31306d
void ssh_mbedcry_bn_free(bignum num);
Packit Service 31306d
unsigned char *ssh_mbedcry_bn2num(const_bignum num, int radix);
Packit Service 31306d
int ssh_mbedcry_rand(bignum rnd, int bits, int top, int bottom);
Packit Service 31306d
int ssh_mbedcry_is_bit_set(bignum num, size_t pos);
Packit Service 31306d
int ssh_mbedcry_rand_range(bignum dest, bignum max);
Packit Service 31306d
int ssh_mbedcry_hex2bn(bignum *dest, char *data);
Packit Service 31306d
Packit Service 31306d
#define bignum_new() ssh_mbedcry_bn_new()
Packit Service 31306d
#define bignum_safe_free(num) do { \
Packit Service 31306d
    if ((num) != NULL) { \
Packit Service 31306d
        ssh_mbedcry_bn_free(num); \
Packit Service 31306d
        (num)=NULL; \
Packit Service 31306d
    } \
Packit Service 31306d
    } while(0)
Packit Service 31306d
#define bignum_ctx_new() NULL
Packit Service 31306d
#define bignum_ctx_free(num) do {(num) = NULL;} while(0)
Packit Service 31306d
#define bignum_ctx_invalid(ctx) (ctx == NULL?0:1)
Packit Service 31306d
#define bignum_set_word(bn, n) (mbedtls_mpi_lset(bn, n)==0?1:0) /* TODO fix
Packit Service 31306d
                                                          overflow/underflow */
Packit Service 31306d
#define bignum_bin2bn(data, datalen, bn) do { \
Packit Service 31306d
    *(bn) = bignum_new(); \
Packit Service 31306d
    if (*(bn) != NULL) { \
Packit Service 31306d
        mbedtls_mpi_read_binary(*(bn), data, datalen); \
Packit Service 31306d
    } \
Packit Service 31306d
    } while(0)
Packit Service 31306d
#define bignum_bn2dec(num) ssh_mbedcry_bn2num(num, 10)
Packit Service 31306d
#define bignum_dec2bn(data, bn) mbedtls_mpi_read_string(bn, 10, data)
Packit Service 31306d
#define bignum_bn2hex(num, dest) (*dest)=ssh_mbedcry_bn2num(num, 16)
Packit Service 31306d
#define bignum_hex2bn(data, dest) ssh_mbedcry_hex2bn(dest, data)
Packit Service 31306d
#define bignum_rand(rnd, bits) ssh_mbedcry_rand((rnd), (bits), 0, 1)
Packit Service 31306d
#define bignum_rand_range(rnd, max) ssh_mbedcry_rand_range(rnd, max)
Packit Service 31306d
#define bignum_mod_exp(dest, generator, exp, modulo, ctx) \
Packit Service 31306d
        (mbedtls_mpi_exp_mod(dest, generator, exp, modulo, NULL)==0?1:0)
Packit Service 31306d
#define bignum_add(dest, a, b) mbedtls_mpi_add_mpi(dest, a, b)
Packit Service 31306d
#define bignum_sub(dest, a, b) mbedtls_mpi_sub_mpi(dest, a, b)
Packit Service 31306d
#define bignum_mod(dest, a, b, ctx) \
Packit Service 31306d
    (mbedtls_mpi_mod_mpi(dest, a, b) == 0 ? 1 : 0)
Packit Service 31306d
#define bignum_num_bytes(num) mbedtls_mpi_size(num)
Packit Service 31306d
#define bignum_num_bits(num) mbedtls_mpi_bitlen(num)
Packit Service 31306d
#define bignum_is_bit_set(num, bit) ssh_mbedcry_is_bit_set(num, bit)
Packit Service 31306d
#define bignum_bn2bin(num, len, ptr) mbedtls_mpi_write_binary(num, ptr, \
Packit Service 31306d
        mbedtls_mpi_size(num))
Packit Service 31306d
#define bignum_cmp(num1, num2) mbedtls_mpi_cmp_mpi(num1, num2)
Packit Service 31306d
#define bignum_rshift1(dest, src) mbedtls_mpi_copy(dest, src), mbedtls_mpi_shift_r(dest, 1)
Packit Service 31306d
#define bignum_dup(orig, dest) do { \
Packit Service 31306d
    if (*(dest) == NULL) { \
Packit Service 31306d
        *(dest) = bignum_new(); \
Packit Service 31306d
    } \
Packit Service 31306d
    if (*(dest) != NULL) { \
Packit Service 31306d
        mbedtls_mpi_copy(orig, *(dest)); \
Packit Service 31306d
    } \
Packit Service 31306d
    } while(0)
Packit Service 31306d
Packit Service 31306d
mbedtls_ctr_drbg_context *ssh_get_mbedtls_ctr_drbg_context(void);
Packit Service 31306d
Packit Service 31306d
int ssh_mbedtls_random(void *where, int len, int strong);
Packit Service 31306d
Packit Service 31306d
ssh_string make_ecpoint_string(const mbedtls_ecp_group *g, const
Packit Service 31306d
        mbedtls_ecp_point *p);
Packit Service 31306d
Packit Service 31306d
#define ssh_fips_mode() false
Packit Service 31306d
Packit Service 31306d
#endif /* HAVE_LIBMBEDCRYPTO */
Packit Service 31306d
#endif /* LIBMBEDCRYPTO_H_ */