23 #ifndef WOLF_CRYPT_SP_INT_H 24 #define WOLF_CRYPT_SP_INT_H 30 #if !defined(WOLFSSL_SP_ASM) && ( \ 31 defined(WOLFSSL_SP_X86_64_ASM) || defined(WOLFSSL_SP_ARM32_ASM) || \ 32 defined(WOLFSSL_SP_ARM64_ASM) || defined(WOLFSSL_SP_ARM_THUMB_ASM) || \ 33 defined(WOLFSSL_SP_ARM_CORTEX_M_ASM)) 34 #define WOLFSSL_SP_ASM 38 #ifdef WOLFSSL_SP_X86_64_ASM 39 #define SP_WORD_SIZE 64 41 #define HAVE_INTEL_AVX1 42 #define HAVE_INTEL_AVX2 43 #elif defined(WOLFSSL_SP_ARM64_ASM) 44 #define SP_WORD_SIZE 64 45 #elif defined(WOLFSSL_SP_ARM32_ASM) 46 #define SP_WORD_SIZE 32 47 #elif defined(WOLFSSL_SP_ARM_THUMB_ASM) 48 #define SP_WORD_SIZE 32 52 #if defined(NO_64BIT) || !defined(HAVE___UINT128_T) 53 #define SP_WORD_SIZE 32 55 #define SP_WORD_SIZE 64 59 #ifdef WOLFSSL_DSP_BUILD 60 typedef int32 sp_digit;
61 typedef uint32 sp_int_digit;
62 typedef uint64 sp_int_word;
64 #define SP_WORD_SIZE 32 65 #elif !defined(WOLFSSL_SP_ASM) 66 #if SP_WORD_SIZE == 32 67 typedef int32_t sp_digit;
68 typedef uint32_t sp_int_digit;
69 typedef uint64_t sp_int_word;
70 #elif SP_WORD_SIZE == 64 71 typedef int64_t sp_digit;
72 typedef uint64_t sp_int_digit;
73 #ifdef __SIZEOF_INT128__ 74 typedef __uint128_t uint128_t;
75 typedef __int128_t int128_t;
77 typedef unsigned long uint128_t __attribute__ ((mode(TI)));
78 typedef long int128_t __attribute__ ((mode(TI)));
80 typedef uint128_t sp_int_word;
82 #error Word size not defined 85 #if SP_WORD_SIZE == 32 86 typedef uint32_t sp_digit;
87 typedef uint32_t sp_int_digit;
88 typedef uint64_t sp_int_word;
89 #elif SP_WORD_SIZE == 64 90 typedef uint64_t sp_digit;
91 typedef uint64_t sp_int_digit;
92 #ifdef __SIZEOF_INT128__ 93 typedef __uint128_t uint128_t;
94 typedef __int128_t int128_t;
96 typedef unsigned long uint128_t __attribute__ ((mode(TI)));
97 typedef long int128_t __attribute__ ((mode(TI)));
99 typedef uint128_t sp_int_word;
101 #error Word size not defined 105 #define SP_MASK (sp_digit)(-1) 107 #ifdef WOLFSSL_SP_MATH 110 #if !defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_HAVE_SP_DH) 111 #if !defined(NO_PWDBASED) && defined(WOLFSSL_SHA512) 112 #define SP_INT_DIGITS ((512 + SP_WORD_SIZE) / SP_WORD_SIZE) 113 #elif defined(WOLFSSL_SP_384) 114 #define SP_INT_DIGITS ((384 + SP_WORD_SIZE) / SP_WORD_SIZE) 116 #define SP_INT_DIGITS ((256 + SP_WORD_SIZE) / SP_WORD_SIZE) 118 #elif defined(WOLFSSL_SP_4096) 119 #if defined(WOLFSSL_HAVE_SP_DH) 120 #define SP_INT_DIGITS ((8192 + SP_WORD_SIZE) / SP_WORD_SIZE) 122 #define SP_INT_DIGITS ((4096 + SP_WORD_SIZE) / SP_WORD_SIZE) 124 #elif !defined(WOLFSSL_SP_NO_3072) 125 #if defined(WOLFSSL_HAVE_SP_DH) 126 #define SP_INT_DIGITS ((6144 + SP_WORD_SIZE) / SP_WORD_SIZE) 128 #define SP_INT_DIGITS ((3072 + SP_WORD_SIZE) / SP_WORD_SIZE) 131 #if defined(WOLFSSL_HAVE_SP_DH) 132 #define SP_INT_DIGITS ((4096 + SP_WORD_SIZE) / SP_WORD_SIZE) 134 #define SP_INT_DIGITS ((2048 + SP_WORD_SIZE) / SP_WORD_SIZE) 138 #define sp_isodd(a) ((a)->used != 0 && ((a)->dp[0] & 1)) 139 #define sp_iseven(a) ((a)->used != 0 && ((a)->dp[0] & 1) == 0) 140 #define sp_iszero(a) ((a)->used == 0) 141 #define sp_isone(a) ((a)->used == 1 && (a)->dp[0] == 1) 142 #define sp_abs(a, b) sp_copy(a, b) 144 #ifdef HAVE_WOLF_BIGINT 151 #define WOLF_BIGINT_DEFINED 157 sp_int_digit dp[SP_INT_DIGITS];
158 #ifdef HAVE_WOLF_BIGINT 164 typedef sp_int_digit mp_digit;
166 #include <wolfssl/wolfcrypt/wolfmath.h> 169 MP_API
int sp_init(
sp_int* a);
172 MP_API
void sp_clear(
sp_int* a);
173 MP_API
int sp_unsigned_bin_size(
sp_int* a);
174 MP_API
int sp_read_unsigned_bin(
sp_int* a,
const byte* in,
int inSz);
175 MP_API
int sp_read_radix(
sp_int* a,
const char* in,
int radix);
177 MP_API
int sp_count_bits(
sp_int* a);
178 MP_API
int sp_leading_bit(
sp_int* a);
179 MP_API
int sp_to_unsigned_bin(
sp_int* a, byte* out);
180 MP_API
int sp_to_unsigned_bin_len(
sp_int* a, byte* out,
int outSz);
181 MP_API
void sp_forcezero(
sp_int* a);
183 MP_API
int sp_set(
sp_int* a, sp_int_digit d);
184 MP_API
void sp_clamp(
sp_int* a);
185 MP_API
int sp_grow(
sp_int* a,
int l);
186 MP_API
int sp_sub_d(
sp_int* a, sp_int_digit d,
sp_int* r);
187 MP_API
int sp_cmp_d(
sp_int* a, sp_int_digit d);
190 MP_API
void sp_zero(
sp_int* a);
191 MP_API
int sp_add_d(
sp_int* a, sp_int_digit d,
sp_int* r);
192 MP_API
int sp_lshd(
sp_int* a,
int s);
194 MP_API
int sp_set_int(
sp_int* a,
unsigned long b);
195 MP_API
int sp_tohex(
sp_int* a,
char* str);
196 MP_API
int sp_set_bit(
sp_int* a,
int i);
197 MP_API
int sp_2expt(
sp_int* a,
int e);
198 MP_API
int sp_rand_prime(
sp_int* r,
int len,
WC_RNG* rng,
void* heap);
205 MP_API
int sp_prime_is_prime(
mp_int* a,
int t,
int* result);
206 MP_API
int sp_prime_is_prime_ex(
mp_int* a,
int t,
int* result,
WC_RNG* rng);
208 MP_API
int sp_get_digit_count(
sp_int *a);
211 MP_API
int sp_mul_d(
sp_int* a, sp_int_digit n,
sp_int* r);
218 #define MP_RADIX_HEX 16 227 #define DIGIT_BIT SP_WORD_SIZE 228 #define MP_MASK SP_MASK 230 #define CheckFastMathSettings() 1 234 #define mp_isodd sp_isodd 235 #define mp_iseven sp_iseven 236 #define mp_iszero sp_iszero 237 #define mp_isone sp_isone 238 #define mp_abs sp_abs 240 #define mp_init sp_init 241 #define mp_init_multi sp_init_multi 242 #define mp_clear sp_clear 243 #define mp_read_unsigned_bin sp_read_unsigned_bin 244 #define mp_unsigned_bin_size sp_unsigned_bin_size 245 #define mp_read_radix sp_read_radix 246 #define mp_cmp sp_cmp 247 #define mp_count_bits sp_count_bits 248 #define mp_leading_bit sp_leading_bit 249 #define mp_to_unsigned_bin sp_to_unsigned_bin 250 #define mp_to_unsigned_bin_len sp_to_unsigned_bin_len 251 #define mp_forcezero sp_forcezero 252 #define mp_copy sp_copy 253 #define mp_set sp_set 254 #define mp_clamp sp_clamp 255 #define mp_grow sp_grow 256 #define mp_sub_d sp_sub_d 257 #define mp_cmp_d sp_cmp_d 258 #define mp_sub sp_sub 259 #define mp_mod sp_mod 260 #define mp_zero sp_zero 261 #define mp_add_d sp_add_d 262 #define mp_lshd sp_lshd 263 #define mp_add sp_add 264 #define mp_set_int sp_set_int 265 #define mp_tohex sp_tohex 266 #define mp_set_bit sp_set_bit 267 #define mp_2expt sp_2expt 268 #define mp_rand_prime sp_rand_prime 269 #define mp_mul sp_mul 270 #define mp_mulmod sp_mulmod 271 #define mp_gcd sp_gcd 272 #define mp_invmod sp_invmod 273 #define mp_lcm sp_lcm 274 #define mp_exptmod sp_exptmod 275 #define mp_exptmod_nct sp_exptmod 276 #define mp_prime_is_prime sp_prime_is_prime 277 #define mp_prime_is_prime_ex sp_prime_is_prime_ex 278 #define mp_exch sp_exch 279 #define get_digit_count sp_get_digit_count 280 #define mp_init_copy sp_init_copy 281 #define mp_rshb(A,x) sp_rshb(A,x,A) 282 #define mp_mul_d sp_mul_d
Definition: integer.h:200
Definition: integer.h:191