#ifndef _RSA_H #define _RSA_H 1 #include #include #include #include #include #include #include #define RSA_BLOCK_SIZE 64 typedef struct bigint_s { uint32_t *data; size_t len; } bigint_t; typedef struct rsa_s { bigint_t p; bigint_t q; } rsa_t; void *protected_malloc(size_t size); rsa_t rsa_generate_keys(size_t block_size); void bigint_set_random_bytes(bigint_t n); void bigint_set_msb_and_lsb_to_one(bigint_t n); void bigint_bitwise_left_shift(bigint_t n); void bigint_bitwise_right_shift(bigint_t n); void bigint_decrement(bigint_t n); int bigint_cmp(bigint_t a, bigint_t b); bigint_t bigint_prime(size_t len); void bigint_print(bigint_t n); bigint_t bigint_new(size_t len); bigint_t bigint_zero(size_t len); bigint_t bigint_clone(bigint_t src); void bigint_add(bigint_t a, bigint_t b); bigint_t assignable_bigint_mul(bigint_t a, bigint_t b); bigint_t assignable_bigint_modulo(bigint_t a, bigint_t b); bigint_t assignable_bigint_pow_mod(bigint_t a, bigint_t e, bigint_t n); void bigint_set_zeros(bigint_t n); void bigint_destroy(bigint_t n); void array_set_random_bytes(uint32_t *n, size_t size); void array_set_msb_and_lsb_to_one(uint32_t *n, size_t size); void array_bitwise_right_shift(uint32_t *a, size_t len); void array_bitwise_right_shift(uint32_t *a, size_t len); void array_decrement(uint32_t *a, size_t len); #endif