Subversion Repositories Kolibri OS

Rev

Rev 6922 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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 <http://www.gnu.org/licenses/>.
  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: