21#ifndef GSSL_MBEDTLS_UTILS_H
22#define GSSL_MBEDTLS_UTILS_H
26#include "gstrmacros.h"
32#define FN( fn ) (#fn),(fn)
37#if MBEDTLS_VERSION_NUMBER >= 0x02070000
38#define FN_RET( fn ) (#fn),(G_STR_PASTE(fn,_ret))
39#if MBEDTLS_VERSION_MAJOR >= 3
40#define FN_RETv3( fn ) (#fn),(fn)
42#define FN_RETv3( fn ) (#fn),(G_STR_PASTE(fn,_ret))
45#define FN_RET( fn ) (#fn),(fn)
46#define FN_RETv3( fn ) (#fn),(fn)
54 template <
typename F,
typename... Args>
55 typename std::enable_if< !std::is_same<void,
typename std::result_of<F(Args...)>::type>::value >::type
56 call(
const char * fname , F fn , Args&&... args )
58 int rc = fn( std::forward<Args>(args)... ) ;
60 throw Error( fname , rc ) ;
64 template <
typename F,
typename... Args>
65 typename std::enable_if< std::is_same<void,
typename std::result_of<F(Args...)>::type>::value >::type
66 call(
const char * , F fn , Args&&... args )
68 fn( std::forward<Args>(args)... ) ;
72 using old_fn = int (*)( mbedtls_pk_context * c ,
const unsigned char * k , std::size_t ks ,
73 const unsigned char * p , std::size_t ps ) ;
74 using new_fn = int (*)( mbedtls_pk_context* c ,
const unsigned char* k , std::size_t ks ,
75 const unsigned char * p , std::size_t ps ,
76 int (*r)(
void*,
unsigned char*,std::size_t) ,
void* rp ) ;
77 inline int call_fn( old_fn fn ,
78 mbedtls_pk_context * c ,
const unsigned char * k , std::size_t ks ,
79 const unsigned char * p , std::size_t ps ,
80 int (*)(
void*,
unsigned char*,std::size_t) ,
void * )
82 return fn( c , k , ks , p , ps ) ;
84 inline int call_fn( new_fn fn ,
85 mbedtls_pk_context * c ,
const unsigned char * k , std::size_t ks ,
86 const unsigned char * p , std::size_t ps ,
87 int (*r)(
void*,
unsigned char*,std::size_t) ,
void * rp )
89 return fn( c , k , ks , p , ps , r , rp ) ;
95 X(
void (*init)(T*) ,
void (*free)(T*) ) : m_free(free) { init(&x) ; }
97 T * ptr() {
return &x ; }
98 const T * ptr()
const {
return &x ; }
101 X * operator&() = delete ;
102 const X * operator&()
const = delete ;
103 X(
const X<T> & ) = delete ;
104 X(
X<T> && ) = delete ;
105 X<T> & operator=(
const X<T> & ) = delete ;
106 X<T> & operator=(
X<T> && ) = delete ;
TLS/SSL transport layer security classes.
Initialises and frees an mbedtls object on construction and destruction.