00001
00002 #ifndef __BN_KN_H__
00003 #define __BN_KN_H__
00004
00005 #include <openssl/bn.h>
00006 #include <stdint.h>
00007
00008 #define MSGS_PER_BLOCK 1
00009 #define MAX_RNS_CTXS 8
00010 #define MAX_BS 80 // 64 for 512bit, 128 for 1024bit
00011 #define MODULI_BITS 14
00012 #define R_BOUND_BITS 11
00013
00014 #define MAX_NUM_MSG 2048
00015
00016 #define MAX_WIN 64
00017
00018 #define MODULI uint32_t
00019
00020 typedef struct RNS_CTX_st {
00021
00022 MODULI Bi_A[MAX_BS][MAX_BS];
00023
00024 MODULI Ai_B[MAX_BS][MAX_BS];
00025
00026 MODULI a[MAX_BS];
00027 MODULI b[MAX_BS];
00028
00029
00030 MODULI B_A[MAX_BS];
00031
00032 MODULI A_B[MAX_BS];
00033
00034 MODULI Bsqr_modN_A[MAX_BS];
00035 MODULI Bsqr_modN_B[MAX_BS];
00036
00037 MODULI N_A[MAX_BS];
00038 MODULI Np_B[MAX_BS];
00039
00040 MODULI BI_modA_A[MAX_BS];
00041
00042 MODULI AiI_mod_ai[MAX_BS];
00043 MODULI BiI_mod_bi[MAX_BS];
00044
00045
00046 MODULI ONE_A[MAX_BS]; MODULI ONE_B[MAX_BS];
00047
00048 int bs;
00049
00050
00051 #define MAX_D_LEN 128 // big enough for 4096 bits
00052 int d_num_bits;
00053 int d_len;
00054 BN_ULONG d[MAX_D_LEN];
00055
00056
00057 int CLNW_num;
00058 int CLNW[1024];
00059 int CLNW_len[1024];
00060 int CLNW_maxwin;
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 int index;
00071
00072 #if 0
00073
00074 MODULI M_A[MAX_NUM_MSG][MAX_WIN][MAX_BS];
00075 MODULI M_B[MAX_NUM_MSG][MAX_WIN][MAX_BS];
00076 #endif
00077
00078
00079 BIGNUM *A, *B;
00080 BIGNUM *Bsqr_modN;
00081 BIGNUM *Ai[MAX_BS];
00082 BIGNUM *Bi[MAX_BS];
00083 } __attribute__((aligned (64))) RNS_CTX;
00084
00085 #endif