SemiDrive SSDK Appication Program Interface PTG3.0
pke_prime.h
Go to the documentation of this file.
1
9#ifndef PKE_PRIME_H
10#define PKE_PRIME_H
11
12#include "stdint.h"
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18/* 1:use hardware; 2:use software */
19#define BIGINT_DIV_CHOICE (2)
20
21#if (BIGINT_DIV_CHOICE == 1)
22typedef struct {
23 uint32_t low;
24 uint32_t high;
26#elif (BIGINT_DIV_CHOICE == 2)
27typedef uint32_t double_uint32_t;
28#endif
29
30/* 1:use Fermat primality test; 2:use Miller�CRabin primality test */
31#define PRIMALITY_TEST_CHOICE (1)
32
33#if (PRIMALITY_TEST_CHOICE == 1)
34#define FERMAT_ROUND (3)
35#elif (PRIMALITY_TEST_CHOICE == 2)
36#define MILLER_RABIN_ROUND (3)
37#endif
38
39/* prime table level(total number of small prime numbers) */
40#define PTL_MAX (400) /* the max PTL value */
41#define PTL_512 \
42 (400) /* the best PTL value for prime bit length 512 (RSA1024) */
43#define PTL_1024 \
44 (400) /* the best PTL value for prime bit length 1024 (RSA2048) */
45
46#define NOT_PRIME (0xFFFFFFFF)
47#define MAYBE_PRIME (0)
48
49extern const uint16_t primetable[PTL_MAX];
51extern const uint16_t primetable_r[PTL_MAX];
52
53uint32_t get_prime(uint32_t p[], uint32_t pbitlen);
54uint32_t bigint_div_table_high(uint32_t *a, uint32_t awordlen, uint16_t *r,
55 double_uint32_t *s, uint16_t *high_result,
56 uint32_t PTL);
57uint32_t bigint_div_table_low(uint32_t *a, uint16_t *r, double_uint32_t *s,
58 uint16_t *high_result, uint32_t PTL);
59#ifdef __cplusplus
60}
61#endif
62
63#endif
const uint16_t primetable_r[PTL_MAX]
const uint16_t primetable[PTL_MAX]
#define PTL_MAX
Definition: pke_prime.h:40
uint32_t get_prime(uint32_t p[], uint32_t pbitlen)
uint32_t bigint_div_table_high(uint32_t *a, uint32_t awordlen, uint16_t *r, double_uint32_t *s, uint16_t *high_result, uint32_t PTL)
const double_uint32_t primetable_s[PTL_MAX]
uint32_t bigint_div_table_low(uint32_t *a, uint16_t *r, double_uint32_t *s, uint16_t *high_result, uint32_t PTL)
uint32_t double_uint32_t
Definition: pke_prime.h:27