Subversion Repositories Kolibri OS

Rev

Rev 6922 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6419 hidnplayr 1
;    modexp.asm - Modular exponentiation test suite
2
;
3
;    Copyright (C) 2015-2016 Jeffrey Amelynck
4
;
5
;    This program is free software: you can redistribute it and/or modify
6
;    it under the terms of the GNU General Public License as published by
7
;    the Free Software Foundation, either version 3 of the License, or
8
;    (at your option) any later version.
9
;
10
;    This program is distributed in the hope that it will be useful,
11
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
;    GNU General Public License for more details.
14
;
15
;    You should have received a copy of the GNU General Public License
16
;    along with this program.  If not, see .
17
 
18
format binary as ""
19
 
20
__DEBUG__       = 1
21
__DEBUG_LEVEL__ = 1
22
 
23
MAX_BITS        = 256
24
 
25
use32
26
 
27
        db      'MENUET01'      ; signature
28
        dd      1               ; header version
29
        dd      start           ; entry point
30
        dd      i_end           ; initialized size
31
        dd      mem+4096        ; required memory
32
        dd      mem+4096        ; stack pointer
33
        dd      0               ; parameters
34
        dd      0               ; path
35
 
36
include '../../../macros.inc'
37
purge mov,add,sub
38
include '../../../proc32.inc'
39
include '../../../debug-fdo.inc'
40
 
41
include '../mpint.inc'
42
 
43
start:
44
 
45
        DEBUGF  1, "ModExp Test suite\n"
46
 
47
        DEBUGF  1, "mpint_zero\n"
48
        stdcall mpint_zero, mpint_A
49
        stdcall mpint_print, mpint_A
50
 
51
        mov     dword[mpint_A+00], 32
52
        mov     dword[mpint_A+04], 0xCAFEBABE
53
        mov     dword[mpint_A+08], 0xDEADBEEF
54
        mov     dword[mpint_A+12], 0xCAFEBABE
55
        mov     dword[mpint_A+16], 0xDEADBEEF
56
        mov     dword[mpint_A+20], 0xCAFEBABE
57
        mov     dword[mpint_A+24], 0xDEADBEEF
58
        mov     dword[mpint_A+28], 0xCAFEBABE
59
        mov     dword[mpint_A+32], 0xDEADBEEF
60
        stdcall mpint_print, mpint_A
61
 
62
        DEBUGF  1, "mpint_shl, 3\n"
63
        stdcall mpint_shl, mpint_A, 3
64
        stdcall mpint_length, mpint_A
65
        stdcall mpint_print, mpint_A
66
 
67
        DEBUGF  1, "mpint_shl, 40\n"
68
        stdcall mpint_shl, mpint_A, 40
69
        stdcall mpint_length, mpint_A
70
        stdcall mpint_print, mpint_A
71
 
72
        DEBUGF  1, "8 times mpint_shl1\n"
73
        stdcall mpint_shl1, mpint_A
74
        stdcall mpint_shl1, mpint_A
75
        stdcall mpint_shl1, mpint_A
76
        stdcall mpint_shl1, mpint_A
77
        stdcall mpint_shl1, mpint_A
78
        stdcall mpint_shl1, mpint_A
79
        stdcall mpint_shl1, mpint_A
80
        stdcall mpint_shl1, mpint_A
81
        stdcall mpint_length, mpint_A
82
        stdcall mpint_print, mpint_A
83
 
84
        mov     dword[mpint_B+00], 32
85
        mov     dword[mpint_B+04], 0xCAFEBABE
86
        mov     dword[mpint_B+08], 0xDEADBEEF
87
        mov     dword[mpint_B+12], 0xCAFEBABE
88
        mov     dword[mpint_B+16], 0xDEADBEEF
89
        mov     dword[mpint_B+20], 0xCAFEBABE
90
        mov     dword[mpint_B+24], 0xDEADBEEF
91
        mov     dword[mpint_B+28], 0xCAFEBABE
92
        mov     dword[mpint_B+32], 0xDEADBEEF
93
        stdcall mpint_print, mpint_A
94
        stdcall mpint_print, mpint_B
95
        DEBUGF  1, "mpint_add\n"
96
        stdcall mpint_add, mpint_B, mpint_A
97
        stdcall mpint_length, mpint_B
98
        stdcall mpint_print, mpint_B
99
        DEBUGF  1, "mpint_sub\n"
100
        stdcall mpint_sub, mpint_B, mpint_A
101
        stdcall mpint_length, mpint_B
102
        stdcall mpint_print, mpint_B
103
 
104
        mov     dword[mpint_B+04], 0xCAFEBABE
105
        mov     dword[mpint_B+08], 0xDEADBEEF
106
        mov     dword[mpint_B+12], 0xCAFEBABE
107
        mov     dword[mpint_B+16], 0xDEADBEEF
108
        mov     dword[mpint_B+20], 0xCAFEBABE
109
        mov     dword[mpint_B+24], 0xDEADBEEF
110
        mov     dword[mpint_B+28], 0x0
111
        mov     dword[mpint_B+32], 0x0
112
        stdcall mpint_print, mpint_A
113
        stdcall mpint_print, mpint_B
114
        DEBUGF  1, "mpint_mod\n"
115
        stdcall mpint_mod, mpint_A, mpint_B
116
        stdcall mpint_print, mpint_A
117
 
118
        stdcall mpint_zero, mpint_A
119
        mov     dword[mpint_A+0], 2
120
        mov     dword[mpint_A+4], 1936
121
        stdcall mpint_zero, mpint_B
122
        mov     dword[mpint_B+0], 2
123
        mov     dword[mpint_B+4], 497
124
        stdcall mpint_cmp, mpint_A, mpint_B
125
        stdcall mpint_mod, mpint_A, mpint_B
126
        DEBUGF  1, "1936 mod 497\n"
127
        stdcall mpint_print, mpint_A
128
 
129
        stdcall mpint_zero, mpint_A
130
        mov     dword[mpint_A+00], 32
131
        mov     dword[mpint_A+04], 0xCAFEBABE
132
        mov     dword[mpint_A+08], 0xDEADBEEF
133
        mov     dword[mpint_A+12], 0xCAFEBABE
134
        mov     dword[mpint_A+16], 0xDEADBEEF
135
        mov     dword[mpint_A+20], 0xCAFEBABE
136
        mov     dword[mpint_A+24], 0xDEADBEEF
137
        mov     dword[mpint_A+28], 0xCAFEBABE
138
        mov     dword[mpint_A+32], 0xDEADBEEF
139
        stdcall mpint_zero, mpint_B
140
        mov     dword[mpint_B+0], 2
141
        mov     dword[mpint_B+4], 0x0100
142
        stdcall mpint_print, mpint_A
143
        stdcall mpint_print, mpint_B
144
        DEBUGF  1, "mpint_mul by A*B\n"
145
        stdcall mpint_mul, mpint_C, mpint_A, mpint_B
146
        stdcall mpint_length, mpint_C
147
        stdcall mpint_print, mpint_C
148
        stdcall mpint_print, mpint_A
149
        stdcall mpint_print, mpint_B
150
        DEBUGF  1, "mpint_mul by B*A\n"
151
        stdcall mpint_mul, mpint_C, mpint_B, mpint_A
152
        stdcall mpint_length, mpint_C
153
        stdcall mpint_print, mpint_C
154
 
155
        stdcall mpint_hob, mpint_C
156
        DEBUGF  1, "mpint_hob: %u\n", eax
157
 
158
        stdcall mpint_zero, mpint_A
159
        stdcall mpint_zero, mpint_B
160
        stdcall mpint_zero, mpint_C
161
        mov     dword[mpint_A+0], 1
162
        mov     dword[mpint_A+4], 4
163
        mov     dword[mpint_B+0], 1
164
        mov     dword[mpint_B+4], 13
165
        mov     dword[mpint_C+0], 2
166
        mov     dword[mpint_C+4], 497
167
        stdcall mpint_modexp, mpint_D, mpint_A, mpint_B, mpint_C
168
        DEBUGF  1, "4**13 mod 497\n"
169
        stdcall mpint_length, mpint_D
170
        stdcall mpint_print, mpint_D
171
 
172
        mcall   -1
173
 
174
i_end:
175
 
176
mpint_A         rb MPINT_MAX_LEN+4
177
mpint_B         rb MPINT_MAX_LEN+4
178
mpint_C         rb MPINT_MAX_LEN+4
179
mpint_D         rb MPINT_MAX_LEN+4
180
 
181
mpint_tmp       rb MPINT_MAX_LEN+4
182
 
183
include_debug_strings
184
 
185
mem: