-
Notifications
You must be signed in to change notification settings - Fork 1
/
rsalib1.h
81 lines (67 loc) · 2.61 KB
/
rsalib1.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifndef __RSALIB1_H_INCLUDE__
#define __RSALIB1_H_INCLUDE__
#include "stdafx.h"
typedef unsigned char boolean;
typedef unsigned char byte;
typedef unsigned short word16;
typedef word16 unit;
typedef unit *unitptr;
typedef short signedunit;
typedef unsigned long int ulint;
class CRSALib
{
public:
enum { MAX_BIT_PRECISION = 2048, MAX_UNIT_PRECISION = MAX_BIT_PRECISION/(sizeof(word16)*8) };
private:
unit moduli_buf[16][(MAX_UNIT_PRECISION)];
unitptr moduli[16+1];
unit msu_moduli[16+1];
unit nmsu_moduli[16+1];
unit mpdbuf[16-1][(MAX_UNIT_PRECISION)];
unitptr mpd[16];
public:
short global_precision;
void set_precision(short prec);
CRSALib(short glob_pres=0);
boolean mp_addc(register unitptr r1,register unitptr r2,register boolean carry);
boolean mp_subb(register unitptr r1,register unitptr r2,register boolean borrow);
boolean mp_rotate_left(register unitptr r1,register boolean carry);
boolean mp_rotate_right(register unitptr r1,register boolean carry);
short mp_compare(register unitptr r1,register unitptr r2);
boolean mp_inc(register unitptr r);
boolean mp_dec(register unitptr r);
void mp_neg(register unitptr r);
void mp_move(register unitptr dst,register unitptr src);
void mp_init(register unitptr r, word16 value);
short significance(register unitptr r);
void unitfill0(unitptr r,word16 unitcount);
int mp_udiv(register unitptr remainder,register unitptr quotient,
register unitptr dividend,register unitptr divisor);
int mp_div(register unitptr remainder,register unitptr quotient,
register unitptr dividend,register unitptr divisor);
word16 mp_shortdiv(register unitptr quotient,
register unitptr dividend,register word16 divisor);
int mp_mod(register unitptr remainder,
register unitptr dividend,register unitptr divisor);
word16 mp_shortmod(register unitptr dividend,register word16 divisor);
int mp_mult(register unitptr prod,
register unitptr multiplicand,register unitptr multiplier);
private:
void mp_lshift_unit(register unitptr r1);
void stage_mp_images(unitptr images[16],unitptr r);
public:
int stage_merritt_modulus(unitptr n);
int merritt_modmult(register unitptr prod,
unitptr multiplicand,register unitptr multiplier);
private:
void merritt_burn(void);
public:
int countbits(unitptr r);
int mp_modexp(register unitptr expout,register unitptr expin,
register unitptr exponent,register unitptr modulus);
int rsa_decrypt(unitptr M, unitptr C, unitptr d, unitptr p, unitptr q, unitptr u);
int mp_sqrt(unitptr quotient,unitptr dividend);
};
inline void CRSALib::set_precision(short prec) {global_precision = prec;}
#endif
//---