14 #include "mbedtls/sha256.h" 15 #include "mbedtls/aes.h" 16 #include "mbedtls/ecdsa.h" 25 #define F_LOG_MAX 8*256 28 Copyright (c) 2019 Fábio Pereira da Silva\n\n\ 29 Permission is hereby granted, free of charge, to any person obtaining a copy\n\ 30 of this software and associated documentation files (the \"Software\"), to deal\n\ 31 in the Software without restriction, including without limitation the rights\n\ 32 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\ 33 copies of the Software, and to permit persons to whom the Software is\n\ 34 furnished to do so, subject to the following conditions:\n\n\ 35 The above copyright notice and this permission notice shall be included in all\n\ 36 copies or substantial portions of the Software.\n\n\ 37 THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\ 38 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\ 39 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\ 40 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\ 41 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\ 42 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\ 49 #define F_WDT_MAX_ENTROPY_TIME 2*120 50 #define F_WDT_PANIC true 51 #define F_WDT_MIN_TIME 20//4 104 int f_verify_system_entropy_begin();
105 void f_verify_system_entropy_finish();
106 int f_file_exists(
char *);
107 int f_find_str(
size_t *,
char *,
size_t,
char *);
108 int f_find_replace(
char *,
size_t *,
size_t,
char *,
size_t,
char *,
char *);
109 int f_is_integer(
char *,
size_t);
110 int is_filled_with_value(uint8_t *,
size_t, uint8_t);
119 #define F_ENTROPY_TYPE_PARANOIC (uint32_t)1477682819 126 #define F_ENTROPY_TYPE_EXCELENT (uint32_t)1476885281 133 #define F_ENTROPY_TYPE_GOOD (uint32_t)1472531015 140 #define F_ENTROPY_TYPE_NOT_ENOUGH (uint32_t)1471001808 147 #define F_ENTROPY_TYPE_NOT_RECOMENDED (uint32_t)1470003345 154 #define ENTROPY_BEGIN f_verify_system_entropy_begin(); 161 #define ENTROPY_END f_verify_system_entropy_finish(); 167 #define F_PASS_MUST_HAVE_AT_LEAST_NONE (int)0 173 #define F_PASS_MUST_HAVE_AT_LEAST_ONE_NUMBER (int)1 179 #define F_PASS_MUST_HAVE_AT_LEAST_ONE_SYMBOL (int)2 185 #define F_PASS_MUST_HAVE_AT_LEAST_ONE_UPPER_CASE (int)4 191 #define F_PASS_MUST_HAVE_AT_LEAST_ONE_LOWER_CASE (int)8 197 #define F_PASS_IS_TOO_LONG (int)256 203 #define F_PASS_IS_TOO_SHORT (int)512 209 #define F_PASS_IS_OUT_OVF (int)1024//768 213 #define F_PBKDF2_ITER_SZ 2*4096 215 typedef enum f_pbkdf2_err_t {
216 F_PBKDF2_RESULT_OK=0,
219 F_PBKDF2_ERR_INFO_SHA
222 typedef enum f_aes_err {
227 F_AES_UNKNOW_DIRECTION,
228 F_ERR_ENC_DECRYPT_FAILED
231 typedef enum f_md_hmac_sha512_t {
232 F_HMAC_SHA512_OK = 0,
233 F_HMAC_SHA512_MALLOC = 304,
234 F_HMAC_SHA512_ERR_INFO,
235 F_HMAC_SHA512_ERR_SETUP,
236 F_HMAC_SHA512_DIGEST_ERROR
239 typedef enum f_ecdsa_key_pair_err_t {
240 F_ECDSA_KEY_PAIR_OK = 0,
241 F_ECDSA_KEY_PAIR_NULL = 330,
242 F_ECDSA_KEY_PAIR_MALLOC
243 } f_ecdsa_key_pair_err;
245 typedef struct f_ecdsa_key_pair_t {
246 size_t public_key_sz;
247 size_t private_key_sz;
248 mbedtls_ecdsa_context *ctx;
249 mbedtls_ecp_group_id gid;
250 unsigned char public_key[MBEDTLS_ECDSA_MAX_LEN];
251 unsigned char private_key[MBEDTLS_ECDSA_MAX_LEN];
258 enum f_encode_decode_error_t {
260 F_ENCODE_BASE64_DEST_SMALL=11300,
261 F_ENCODE_TO_BASE64_MALLOC,
262 F_BASE64_DECODE_MALLOC,
264 F_URL_ENCODE_DEST_SMALL,
265 F_BASE64_URL_DECODE_MALLOC,
266 F_BASE64_URL_DECODE_MEMORY_SMALL,
267 F_BASE64_URL_TO_BASE64_EMPTY_BASE64,
268 F_BASE64_URL_TO_BASE64_MALLOC,
269 F_URL_ENCODE_EMPTY_STRING,
270 F_URL_ENCODE_WAITING_NEXT_NIBBLE,
271 F_URL_INVALID_HEX_STRING,
272 F_URL_NO_SPACE_IN_MEMORY_BUFFER,
273 F_URL_ENCODE_INVALID_STRING
276 char *fhex2strv2(
char *,
const void *,
size_t,
int);
277 int f_sha256_digest(
void **,
int, uint8_t *,
size_t);
278 f_pbkdf2_err f_pbkdf2_hmac(
unsigned char *,
size_t,
unsigned char *,
size_t, uint8_t *);
279 f_aes_err f_aes256cipher(uint8_t *, uint8_t *,
void *,
size_t,
void *,
int);
375 #define F_GET_CH_MODE_NO_ECHO (int)(1<<16) 381 #define F_GET_CH_MODE_ANY_KEY (int)(1<<17) 543 uint32_t
crc32_init(
unsigned char *,
size_t, uint32_t);
545 typedef int (*
fn_det)(
void *,
unsigned char *, size_t);
570 f_md_hmac_sha512
f_hmac_sha512(
unsigned char *,
const unsigned char *,
size_t,
const unsigned char *,
size_t);
613 ERR_ECDSA_SECRET_KEY_VALID
626 ERR_ECDSA_PUBLIC_KEY_VALID
632 int f_url_encode(
char *,
size_t,
size_t *, uint8_t *,
size_t);
640 int f_url_decode(
void *,
size_t,
size_t *,
const char *,
size_t);
642 #define CLEAR_AND_FREE(ptr, size) free(memset(ptr, 0, size)); int f_get_char_no_block(int)
Reads a char from console.
void f_random(void *, size_t)
Random function to be called to generate a random data with random_sz
ERR_ECDSA_SECRET_KEY_VALID f_ecdsa_secret_key_valid(mbedtls_ecp_group_id, unsigned char *, size_t)
Checks is ECDSA secret key is valid.
char * f_get_entropy_name(uint32_t)
Returns a entropy name given a index/ASCII index or entropy value.
enum err_ecdsa_secret_key_valid_e ERR_ECDSA_SECRET_KEY_VALID
Typedef of err_ecdsa_secret_key_valid_e.
void * f_is_random_attached()
Verifies if system random function is attached in myNanoEmbedded API.
int f_url_decode(void *, size_t, size_t *, const char *, size_t)
int f_convert_to_unsigned_int(unsigned int *, char *, size_t)
Converts a string value to unsigned int.
Error alloc memory for check.
int f_convert_to_long_int0(unsigned long int *, char *, size_t)
Converts a octal value in ASCII string to unsigned long int.
int f_encode_to_base64_dynamic(char **, size_t *, void *, size_t)
int f_convert_to_unsigned_int_std(unsigned int *val, char *value, size_t value_sz)
Converts a actal/decimal/hexadecimal into ASCII string to unsigned int.
f_md_hmac_sha512 f_hmac_sha512(unsigned char *, const unsigned char *, size_t, const unsigned char *, size_t)
Calculates SHA512 HMAC.
int f_reverse(unsigned char *, size_t)
Reverse bytes.
int get_console_passwd(char *, size_t)
Reads a password from console.
f_ecdsa_key_pair_err f_gen_ecdsa_key_pair(f_ecdsa_key_pair *, int, fn_det, void *)
void f_random_attach(rnd_fn)
Attachs a function to be called by f_random()
void(* rnd_fn)(void *, size_t)
Pointer caller for random function.
int f_base64_decode_dynamic(void **, size_t *, const char *, size_t)
int f_verify_system_entropy(uint32_t, void *, size_t, int)
Take a random number generator function and returns random value only if randomized data have a desir...
int f_convert_to_unsigned_int0(unsigned int *val, char *value, size_t value_sz)
Converts a octal value in ASCII string to unsigned int.
int f_convert_to_long_int0x(unsigned long int *, char *, size_t)
Converts a hex value in ASCII string to unsigned long int.
Error alloc memory for check.
int f_convert_to_long_int(unsigned long int *, char *, size_t)
Converts a string value to unsigned long int.
int f_base64url_encode(char *, size_t, size_t *, void *, size_t)
void f_random_detach()
Detaches system random numeber genarator from myNanoEmbedded API.
int(* fn_det)(void *, unsigned char *, size_t)
uint32_t crc32_init(unsigned char *, size_t, uint32_t)
Performs a CRC32 of a given data.
uint32_t f_sel_to_entropy_level(int)
Return a given entropy number given a number encoded ASCII or index number.
enum err_ecdsa_public_key_valid_e ERR_ECDSA_PUBLIC_KEY_VALID
Typedef of err_ecdsa_public_key_valid_e.
int f_convert_to_unsigned_int0x(unsigned int *val, char *value, size_t value_sz)
Converts a hex value in ASCII string to unsigned int.
int f_base64url_encode_dynamic(void **, size_t *, void *, size_t)
int f_uncompress_elliptic_curve(uint8_t *, size_t, size_t *, mbedtls_ecp_group_id, uint8_t *, size_t)
int f_base64url_decode(void *, size_t, size_t *, const char *, size_t)
int f_pass_must_have_at_least(char *, size_t, size_t, size_t, int)
Checks if a given password has enought requirements to be parsed to a function.
int f_convert_to_long_int_std(unsigned long int *, char *, size_t)
Converts a actal/decimal/hexadecimal into ASCII string to unsigned long int.
int f_url_encode(char *, size_t, size_t *, uint8_t *, size_t)
uint8_t * f_ripemd160(const uint8_t *, size_t)
int f_encode_to_base64(char *, size_t, size_t *, void *, size_t)
err_ecdsa_secret_key_valid_e
ECDSA secret key error checker enumerator.
int f_convert_to_double(double *, const char *)
Convert any valid number im value and converts it to double val
int f_str_to_hex(uint8_t *, char *)
Converts a str string buffer to raw hex_stream value stream.
err_ecdsa_public_key_valid_e
ECDSA public key error checker enumerator.
int f_passwd_comp_safe(char *, char *, size_t, size_t, size_t)
Compares two passwords values with safe buffer.
int f_url_base64_to_base64_dynamic(char **, size_t *, const char *, size_t)
ERR_ECDSA_PUBLIC_KEY_VALID f_ecdsa_public_key_valid(mbedtls_ecp_group_id, unsigned char *, size_t)
Checks is ECDSA public key is valid.