security_mbedtls.c
Go to the documentation of this file.
1 
9 #include "mcl_core/mcl_assert.h"
10 #include "mcl_core/mcl_memory.h"
11 #include "mbedtls/sha256.h"
12 #include "mbedtls/entropy.h"
13 #include "mbedtls/ctr_drbg.h"
14 
15 #define SHA256_DIGEST_LENGTH 32
16 
17 #define KEY_LENGTH_BITS 3072
18 
19 static mbedtls_entropy_context entropy;
20 static mbedtls_ctr_drbg_context ctr_drbg;
22 
23 #ifdef MBEDTLS_ENTROPY_HARDWARE_ALT
24 extern int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen );
25 #endif
26 
28 {
29  MCL_DEBUG_ENTRY("void");
30 
31  if(!is_initialized)
32  {
33  mbedtls_entropy_init(&entropy);
34 #ifdef MBEDTLS_ENTROPY_HARDWARE_ALT
35  (void) mbedtls_entropy_add_source(&entropy, mbedtls_hardware_poll, (void*)NULL, 1, MBEDTLS_ENTROPY_SOURCE_STRONG);
36 #endif
37  (void) mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, MCL_NULL, 0);
39  }
40 
41  MCL_DEBUG_LEAVE("retVal = <%d>", MCL_OK);
42  return MCL_OK;
43 }
44 
45 mcl_error_t security_hash_sha256(const mcl_uint8_t *data, mcl_size_t data_size, mcl_uint8_t **hash, mcl_size_t *hash_size)
46 {
47  mcl_error_t code = MCL_OK;
48 
49  MCL_DEBUG_ENTRY("const mcl_uint8_t *data = <%p>, mcl_size_t data_size = <%u>, mcl_uint8_t **hash = <%p>, mcl_size_t *hash_size = <%p>", data, data_size, hash, hash_size);
50 
51  *hash_size = 0;
52 
53  // Allocate memory to store SHA256 result.
54  *hash = MCL_CALLOC(1, SHA256_DIGEST_LENGTH);
55 
56  if (MCL_NULL == *hash)
57  {
58  code = MCL_OUT_OF_MEMORY;
59  }
60  else
61  {
62  *hash_size = SHA256_DIGEST_LENGTH;
63 
64  // Perform SHA256 calculation.
65  MCL_DEBUG("Calculating SHA256 with mbedTLS.");
66  mbedtls_sha256(data, data_size, *hash, 0);
67  }
68 
69  MCL_DEBUG_LEAVE("retVal = <%d>", code);
70  return code;
71 }
72 
73 mcl_error_t security_rsa_sign(char *rsa_key, char *data, mcl_size_t data_size, mcl_uint8_t **signature, mcl_size_t *signature_size)
74 {
75  return MCL_FAIL;
76 }
77 
78 mcl_error_t security_generate_rsa_key(char **public_key, char **private_key)
79 {
80  return MCL_FAIL;
81 }
82 
83 mcl_error_t security_rsa_get_modulus_and_exponent(char *public_key, char **modulus, char **exponent)
84 {
85  return MCL_FAIL;
86 }
87 
89 {
90  mcl_error_t code = MCL_FAIL;
91 
92  if(is_initialized)
93  {
94  code = (0 == mbedtls_ctr_drbg_random(&ctr_drbg, buffer, size)) ? MCL_OK : MCL_FAIL;
95  }
96 
97  return code;
98 }
size_t mcl_size_t
Assert module header file.
Success.
#define SHA256_DIGEST_LENGTH
#define MCL_DEBUG(...)
Definition: mcl_log_util.h:114
#define MCL_CALLOC(count, bytes)
Definition: mcl_memory.h:56
mcl_int32_t mcl_error_t
mcl_error_t security_generate_random_bytes(unsigned char *buffer, mcl_size_t size)
#define MCL_DEBUG_ENTRY(...)
Definition: mcl_log_util.h:115
#define MCL_FALSE
static mbedtls_entropy_context entropy
#define MCL_NULL
mcl_error_t security_generate_rsa_key(char **public_key, char **private_key)
mcl_error_t security_hash_sha256(const mcl_uint8_t *data, mcl_size_t data_size, mcl_uint8_t **hash, mcl_size_t *hash_size)
uint8_t mcl_uint8_t
static mbedtls_ctr_drbg_context ctr_drbg
mcl_error_t security_initialize(void)
mcl_uint8_t mcl_bool_t
mcl_error_t security_rsa_sign(char *rsa_key, char *data, mcl_size_t data_size, mcl_uint8_t **signature, mcl_size_t *signature_size)
static mcl_bool_t is_initialized
mcl_error_t security_rsa_get_modulus_and_exponent(char *public_key, char **modulus, char **exponent)
Memory allocation fail.
#define MCL_DEBUG_LEAVE(...)
Definition: mcl_log_util.h:116
#define MCL_TRUE
Internal failure in MCL.
Memory module interface header file.