rc5.inc
上传用户:daicanfen
上传日期:2009-08-02
资源大小:1k
文件大小:3k
源码类别:

加密解密

开发平台:

Asm

  1. comment *
  2. Algorithm : RC5 Encryption Algorithm ( Block Cipher )
  3. Block : 8bytes
  4. KeySize : --
  5. Round : between 12 and 32
  6. Usage : invoke rc5_setkey,addr ptrIndata,ptrIndata_length ( Setkey )
  7.     invoke    rc5_encrypt,addr ptrIndata,addr ptrOutdata ( Encrypt )
  8.     invoke rc5_decrypt,addr ptrIndata,addr ptrOutdata ( Decrypt )
  9.     
  10.  Coded by x3chun ( 2004.04.20 ) 
  11.   ( x3chun@korea.com  or  x3chun@hanyang.ac.kr )  ( http://x3chun.wo.to )
  12.  
  13.  comment *
  14. encR macro A,B,key
  15. mov ecx,B
  16. xor A,B
  17. and ecx,1Fh
  18. rol A,cl
  19. add A,key
  20. add edi,4
  21. mov ecx,A
  22. xor B,A
  23. and ecx,1Fh
  24. rol B,cl
  25. add B,[edi]
  26. add edi,4
  27. endm
  28. decR macro A,B,key
  29. sub B,[edi]
  30. mov ecx,A
  31. and ecx,1Fh
  32. ror B,cl
  33. xor B,A
  34. sub edi,4
  35. sub A,[edi]
  36. mov ecx,B
  37. and ecx,1Fh
  38. ror A,cl
  39. xor A,B
  40. sub edi,4
  41. endm
  42. rc5_setkey proto :DWORD, :DWORD
  43. rc5_encrypt proto :DWORD, :DWORD
  44. rc5_decrypt proto :DWORD, :DWORD
  45. .const
  46. noRounds equ 12 ; ( 12<= noRounds <=32 )
  47. RC5_EXPANDED_KEYSIZE equ 64*4
  48. P32_MAGIC equ 0B7E15163h
  49. .data?
  50. rc5keytable db RC5_EXPANDED_KEYSIZE dup(?)
  51. initkey db RC5_EXPANDED_KEYSIZE dup(?)
  52. _looprc5 dd ?
  53. _c dd ?
  54. _A dd ?
  55. .code
  56. rc5_setkey proc ptrIndata:DWORD, ptrIndata_length:DWORD
  57. pushad
  58. mov edx,[esp+2ch]
  59. lea edx,[edx+3]
  60. sar edx,2 ; c
  61. mov _c,edx
  62. mov ebx,(noRounds*2+02) ; t
  63. cmp edx,ebx
  64. ja @_r1
  65. lea ebp, [ebx*2+ebx]
  66. mov _looprc5,ebp
  67. jmp @_r2
  68. @_r1:
  69. lea ebp,[edx*2+edx]
  70. mov _looprc5,ebp
  71. @_r2:
  72. mov esi,[esp+28h]
  73. mov edi,offset rc5keytable
  74. mov ecx,[esp+2ch]
  75. rep movsb
  76. mov edi,offset initkey
  77. mov dword ptr [edi],P32_MAGIC
  78. @_r3:
  79. mov eax,dword ptr [edi+ecx*4]
  80. sub eax,61C88647h
  81. mov [edi+ecx*4+4],eax
  82. inc ecx
  83. cmp ecx,(RC5_EXPANDED_KEYSIZE/4-1)
  84. jl @_r3
  85. xor eax,eax ; i
  86. xor ecx,ecx
  87. xor esi,esi ; j
  88. xor ebp,ebp ; B
  89. mov _A,ebp ; A
  90. @_r4:
  91. mov ecx,[edi+eax*4]
  92. add ecx,ebp
  93. add ecx,_A
  94. rol ecx,3
  95. mov _A,ecx
  96. mov [edi+eax*4],ecx ; A
  97. add ebp,ecx
  98. mov ecx,ebp
  99. and ecx,1Fh
  100. add ebp,dword ptr [rc5keytable+esi*4]
  101. rol ebp,cl
  102. mov dword ptr [rc5keytable+esi*4],ebp ; B
  103. lea eax,[eax+1]
  104. cdq
  105. idiv ebx
  106. mov ecx,edx
  107. lea eax,[esi+1]
  108. cdq
  109. idiv _c
  110. mov esi,edx
  111. mov eax,ecx
  112. dec _looprc5
  113. jnz @_r4
  114. popad
  115. ret
  116. rc5_setkey endp
  117. rc5_encrypt proc ptrIndata:DWORD, ptrOutdata:DWORD
  118. pushad
  119. mov esi,[esp+28h]
  120. mov edi,offset initkey
  121. mov eax,[esi]
  122. mov ebx,[esi+4]
  123. add eax,[edi]
  124. add ebx,[edi+4]
  125. mov edi,offset initkey+8
  126. encR eax,ebx,[edi]
  127. encR eax,ebx,[edi]
  128. encR eax,ebx,[edi]
  129. encR eax,ebx,[edi]
  130. encR eax,ebx,[edi]
  131. encR eax,ebx,[edi]
  132. encR eax,ebx,[edi]
  133. encR eax,ebx,[edi]
  134. encR eax,ebx,[edi]
  135. encR eax,ebx,[edi]
  136. encR eax,ebx,[edi]
  137. encR eax,ebx,[edi]
  138. mov edx,[esp+2ch]
  139. mov [edx],eax
  140. mov [edx+4],ebx
  141. popad
  142. ret
  143. rc5_encrypt endp
  144. rc5_decrypt proc ptrIndata:DWORD, ptrOutdata:DWORD
  145. pushad
  146. mov esi,[esp+28h]
  147. mov edi,offset initkey
  148. mov eax,[esi]
  149. mov ebx,[esi+4]
  150. mov edi,offset initkey+(noRounds*8+4)
  151. decR eax,ebx,[edi]
  152. decR eax,ebx,[edi]
  153. decR eax,ebx,[edi]
  154. decR eax,ebx,[edi]
  155. decR eax,ebx,[edi]
  156. decR eax,ebx,[edi]
  157. decR eax,ebx,[edi]
  158. decR eax,ebx,[edi]
  159. decR eax,ebx,[edi]
  160. decR eax,ebx,[edi]
  161. decR eax,ebx,[edi]
  162. decR eax,ebx,[edi]
  163. sub eax,[edi-4]
  164. sub ebx,[edi]
  165. mov edx,[esp+2ch]
  166. mov [edx],eax
  167. mov [edx+4],ebx
  168. popad
  169. ret
  170. rc5_decrypt endp