Subversion Repositories Kolibri OS

Rev

Rev 6419 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6419 Rev 6922
Line 1... Line 1...
1
;    modexp.asm - Modular exponentiation test suite
1
;    modexp.asm - Modular exponentiation test suite
2
;
2
;
3
;    Copyright (C) 2015-2016 Jeffrey Amelynck
3
;    Copyright (C) 2015-2017 Jeffrey Amelynck
4
;
4
;
5
;    This program is free software: you can redistribute it and/or modify
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
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
7
;    the Free Software Foundation, either version 3 of the License, or
8
;    (at your option) any later version.
8
;    (at your option) any later version.
Line 18... Line 18...
18
format binary as ""
18
format binary as ""
Line 19... Line 19...
19
 
19
 
20
__DEBUG__       = 1
20
__DEBUG__       = 1
Line 21... Line 21...
21
__DEBUG_LEVEL__ = 1
21
__DEBUG_LEVEL__ = 1
Line 22... Line 22...
22
 
22
 
Line 23... Line 23...
23
MAX_BITS        = 256
23
MAX_BITS        = 512
24
 
24
 
25
use32
25
use32
26
 
26
 
27
        db      'MENUET01'      ; signature
27
        db      'MENUET01'      ; signature
28
        dd      1               ; header version
28
        dd      1               ; header version
29
        dd      start           ; entry point
29
        dd      start           ; entry point
30
        dd      i_end           ; initialized size
30
        dd      i_end           ; initialized size
Line 31... Line 31...
31
        dd      mem+4096        ; required memory
31
        dd      mem+65536       ; required memory
32
        dd      mem+4096        ; stack pointer
32
        dd      mem+65536       ; stack pointer
Line 42... Line 42...
42
 
42
 
Line 43... Line 43...
43
start:
43
start:
Line 44... Line 44...
44
 
44
 
45
        DEBUGF  1, "ModExp Test suite\n"
45
        DEBUGF  1, "ModExp Test suite\n"
46
 
46
 
Line 47... Line 47...
47
        DEBUGF  1, "mpint_zero\n"
47
        DEBUGF  1, "mpint_print(0x0)\n"
48
        stdcall mpint_zero, mpint_A
48
        mov     dword[mpint_A+00], 0
49
        stdcall mpint_print, mpint_A
49
        stdcall mpint_print, mpint_A
Line 55... Line 55...
55
        mov     dword[mpint_A+16], 0xDEADBEEF
55
        mov     dword[mpint_A+16], 0xDEADBEEF
56
        mov     dword[mpint_A+20], 0xCAFEBABE
56
        mov     dword[mpint_A+20], 0xCAFEBABE
57
        mov     dword[mpint_A+24], 0xDEADBEEF
57
        mov     dword[mpint_A+24], 0xDEADBEEF
58
        mov     dword[mpint_A+28], 0xCAFEBABE
58
        mov     dword[mpint_A+28], 0xCAFEBABE
59
        mov     dword[mpint_A+32], 0xDEADBEEF
59
        mov     dword[mpint_A+32], 0xDEADBEEF
-
 
60
        DEBUGF  1, "mpint_print(0xCAFEBABEDEADBEEF...)\n"
60
        stdcall mpint_print, mpint_A
61
        stdcall mpint_print, mpint_A
Line 61... Line 62...
61
 
62
 
62
        DEBUGF  1, "mpint_shl, 3\n"
63
        DEBUGF  1, "mpint_shl(A, 3)\n"
63
        stdcall mpint_shl, mpint_A, 3
-
 
64
        stdcall mpint_length, mpint_A
64
        stdcall mpint_shl, mpint_A, 3
Line 65... Line 65...
65
        stdcall mpint_print, mpint_A
65
        stdcall mpint_print, mpint_A
66
 
66
 
67
        DEBUGF  1, "mpint_shl, 40\n"
-
 
68
        stdcall mpint_shl, mpint_A, 40
67
        DEBUGF  1, "mpint_shl(A, 29)\n"
Line 69... Line 68...
69
        stdcall mpint_length, mpint_A
68
        stdcall mpint_shl, mpint_A, 29
70
        stdcall mpint_print, mpint_A
69
        stdcall mpint_print, mpint_A
-
 
70
 
71
 
71
        DEBUGF  1, "8 times mpint_shl1\n"
-
 
72
        stdcall mpint_shl1, mpint_A
72
        DEBUGF  1, "8 times mpint_shl1\n"
73
        stdcall mpint_print, mpint_A
-
 
74
        stdcall mpint_shl1, mpint_A
73
        stdcall mpint_shl1, mpint_A
75
        stdcall mpint_print, mpint_A
-
 
76
        stdcall mpint_shl1, mpint_A
74
        stdcall mpint_shl1, mpint_A
77
        stdcall mpint_print, mpint_A
-
 
78
        stdcall mpint_shl1, mpint_A
75
        stdcall mpint_shl1, mpint_A
79
        stdcall mpint_print, mpint_A
-
 
80
        stdcall mpint_shl1, mpint_A
76
        stdcall mpint_shl1, mpint_A
81
        stdcall mpint_print, mpint_A
-
 
82
        stdcall mpint_shl1, mpint_A
77
        stdcall mpint_shl1, mpint_A
83
        stdcall mpint_print, mpint_A
78
        stdcall mpint_shl1, mpint_A
-
 
79
        stdcall mpint_shl1, mpint_A
84
        stdcall mpint_shl1, mpint_A
Line 80... Line 85...
80
        stdcall mpint_shl1, mpint_A
85
        stdcall mpint_print, mpint_A
81
        stdcall mpint_length, mpint_A
86
        stdcall mpint_shl1, mpint_A
82
        stdcall mpint_print, mpint_A
87
        stdcall mpint_print, mpint_A
Line 88... Line 93...
88
        mov     dword[mpint_B+16], 0xDEADBEEF
93
        mov     dword[mpint_B+16], 0xDEADBEEF
89
        mov     dword[mpint_B+20], 0xCAFEBABE
94
        mov     dword[mpint_B+20], 0xCAFEBABE
90
        mov     dword[mpint_B+24], 0xDEADBEEF
95
        mov     dword[mpint_B+24], 0xDEADBEEF
91
        mov     dword[mpint_B+28], 0xCAFEBABE
96
        mov     dword[mpint_B+28], 0xCAFEBABE
92
        mov     dword[mpint_B+32], 0xDEADBEEF
97
        mov     dword[mpint_B+32], 0xDEADBEEF
-
 
98
        DEBUGF  1, "mpint_print(A)\n"
93
        stdcall mpint_print, mpint_A
99
        stdcall mpint_print, mpint_A
-
 
100
        DEBUGF  1, "mpint_print(B)\n"
94
        stdcall mpint_print, mpint_B
101
        stdcall mpint_print, mpint_B
95
        DEBUGF  1, "mpint_add\n"
102
        DEBUGF  1, "mpint_add(B, A)\n"
96
        stdcall mpint_add, mpint_B, mpint_A
103
        stdcall mpint_add, mpint_B, mpint_A
97
        stdcall mpint_length, mpint_B
-
 
98
        stdcall mpint_print, mpint_B
104
        stdcall mpint_print, mpint_B
99
        DEBUGF  1, "mpint_sub\n"
105
        DEBUGF  1, "mpint_sub(B, A)\n"
100
        stdcall mpint_sub, mpint_B, mpint_A
106
        stdcall mpint_sub, mpint_B, mpint_A
101
        stdcall mpint_length, mpint_B
-
 
102
        stdcall mpint_print, mpint_B
107
        stdcall mpint_print, mpint_B
Line -... Line 108...
-
 
108
 
103
 
109
        mov     dword[mpint_B+00], 24
104
        mov     dword[mpint_B+04], 0xCAFEBABE
110
        mov     dword[mpint_B+04], 0xCAFEBABE
105
        mov     dword[mpint_B+08], 0xDEADBEEF
111
        mov     dword[mpint_B+08], 0xDEADBEEF
106
        mov     dword[mpint_B+12], 0xCAFEBABE
112
        mov     dword[mpint_B+12], 0xCAFEBABE
107
        mov     dword[mpint_B+16], 0xDEADBEEF
113
        mov     dword[mpint_B+16], 0xDEADBEEF
108
        mov     dword[mpint_B+20], 0xCAFEBABE
114
        mov     dword[mpint_B+20], 0xCAFEBABE
109
        mov     dword[mpint_B+24], 0xDEADBEEF
-
 
110
        mov     dword[mpint_B+28], 0x0
115
        mov     dword[mpint_B+24], 0xDEADBEEF
111
        mov     dword[mpint_B+32], 0x0
116
        DEBUGF  1, "mpint_print(A)\n"
-
 
117
        stdcall mpint_print, mpint_A
112
        stdcall mpint_print, mpint_A
118
        DEBUGF  1, "mpint_print(B)\n"
113
        stdcall mpint_print, mpint_B
119
        stdcall mpint_print, mpint_B
114
        DEBUGF  1, "mpint_mod\n"
120
        DEBUGF  1, "mpint_mod(A, B)\n"
115
        stdcall mpint_mod, mpint_A, mpint_B
121
        stdcall mpint_mod, mpint_A, mpint_B
Line 116... Line -...
116
        stdcall mpint_print, mpint_A
-
 
117
 
122
        stdcall mpint_print, mpint_A
118
        stdcall mpint_zero, mpint_A
123
 
119
        mov     dword[mpint_A+0], 2
-
 
120
        mov     dword[mpint_A+4], 1936
124
        mov     dword[mpint_A+0], 2
121
        stdcall mpint_zero, mpint_B
125
        mov     dword[mpint_A+4], 1936
122
        mov     dword[mpint_B+0], 2
126
        mov     dword[mpint_B+0], 2
123
        mov     dword[mpint_B+4], 497
127
        mov     dword[mpint_B+4], 497
124
        stdcall mpint_cmp, mpint_A, mpint_B
128
        stdcall mpint_cmp, mpint_A, mpint_B
125
        stdcall mpint_mod, mpint_A, mpint_B
129
        stdcall mpint_mod, mpint_A, mpint_B
Line 126... Line -...
126
        DEBUGF  1, "1936 mod 497\n"
-
 
127
        stdcall mpint_print, mpint_A
130
        DEBUGF  1, "mpint_mod(936, 497)\n"
128
 
131
        stdcall mpint_print, mpint_A
129
        stdcall mpint_zero, mpint_A
132
 
130
        mov     dword[mpint_A+00], 32
133
        mov     dword[mpint_A+00], 32
131
        mov     dword[mpint_A+04], 0xCAFEBABE
134
        mov     dword[mpint_A+04], 0x11111111
132
        mov     dword[mpint_A+08], 0xDEADBEEF
135
        mov     dword[mpint_A+08], 0x22222222
133
        mov     dword[mpint_A+12], 0xCAFEBABE
136
        mov     dword[mpint_A+12], 0x33333333
134
        mov     dword[mpint_A+16], 0xDEADBEEF
137
        mov     dword[mpint_A+16], 0x44444444
135
        mov     dword[mpint_A+20], 0xCAFEBABE
138
        mov     dword[mpint_A+20], 0x55555555
136
        mov     dword[mpint_A+24], 0xDEADBEEF
-
 
-
 
139
        mov     dword[mpint_A+24], 0x88888888
137
        mov     dword[mpint_A+28], 0xCAFEBABE
140
        mov     dword[mpint_A+28], 0xAAAAAAAA
138
        mov     dword[mpint_A+32], 0xDEADBEEF
141
        mov     dword[mpint_A+32], 0xCCCCCCCC
-
 
142
 
139
        stdcall mpint_zero, mpint_B
143
        mov     dword[mpint_B+0], 2
-
 
144
        mov     dword[mpint_B+4], 0x0100
140
        mov     dword[mpint_B+0], 2
145
        DEBUGF  1, "mpint_print(A)\n"
141
        mov     dword[mpint_B+4], 0x0100
146
        stdcall mpint_print, mpint_A
142
        stdcall mpint_print, mpint_A
147
        DEBUGF  1, "mpint_print(B)\n"
143
        stdcall mpint_print, mpint_B
-
 
144
        DEBUGF  1, "mpint_mul by A*B\n"
148
        stdcall mpint_print, mpint_B
145
        stdcall mpint_mul, mpint_C, mpint_A, mpint_B
149
        DEBUGF  1, "mpint_mul(C, A, B)\n"
146
        stdcall mpint_length, mpint_C
150
        stdcall mpint_mul, mpint_C, mpint_A, mpint_B
147
        stdcall mpint_print, mpint_C
151
        stdcall mpint_print, mpint_C
148
        stdcall mpint_print, mpint_A
152
        stdcall mpint_print, mpint_A
149
        stdcall mpint_print, mpint_B
-
 
150
        DEBUGF  1, "mpint_mul by B*A\n"
153
        stdcall mpint_print, mpint_B
Line 151... Line 154...
151
        stdcall mpint_mul, mpint_C, mpint_B, mpint_A
154
        DEBUGF  1, "mpint_mul(C, B, A)\n"
152
        stdcall mpint_length, mpint_C
155
        stdcall mpint_mul, mpint_C, mpint_B, mpint_A
Line 153... Line -...
153
        stdcall mpint_print, mpint_C
-
 
154
 
-
 
155
        stdcall mpint_hob, mpint_C
-
 
156
        DEBUGF  1, "mpint_hob: %u\n", eax
156
        stdcall mpint_print, mpint_C
157
 
157
 
158
        stdcall mpint_zero, mpint_A
158
        stdcall mpint_hob, mpint_C
159
        stdcall mpint_zero, mpint_B
159
        DEBUGF  1, "mpint_hob(C): %u\n", eax
160
        stdcall mpint_zero, mpint_C
160
 
161
        mov     dword[mpint_A+0], 1
161
        mov     dword[mpint_A+0], 1
162
        mov     dword[mpint_A+4], 4
162
        mov     dword[mpint_A+4], 3
163
        mov     dword[mpint_B+0], 1
163
        mov     dword[mpint_B+0], 1
164
        mov     dword[mpint_B+4], 13
-
 
165
        mov     dword[mpint_C+0], 2
164
        mov     dword[mpint_B+4], 4
Line 166... Line 165...
166
        mov     dword[mpint_C+4], 497
165
        mov     dword[mpint_C+0], 2
Line 167... Line 166...
167
        stdcall mpint_modexp, mpint_D, mpint_A, mpint_B, mpint_C
166
        mov     dword[mpint_C+4], 5