Guest User

Untitled

a guest
Mar 14th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. public class ISAAC {
  2.  
  3. public ISAAC(int ai[]) {
  4. cryptArray = new int[256];
  5. keySetArray = new int[256];
  6. System.arraycopy(ai, 0, keySetArray, 0, ai.length);
  7. initializeKeySet();
  8. }
  9.  
  10. public int getNextKey() {
  11. if (keyArrayIdx-- == 0) {
  12. generateNextKeySet();
  13. keyArrayIdx = 255;
  14. }
  15. return keySetArray[keyArrayIdx];
  16. }
  17.  
  18. public void generateNextKeySet() {
  19. cryptVar2 += ++cryptVar3;
  20. for (int i = 0; i < 256; i++) {
  21. int j = cryptArray[i];
  22. if ((i & 3) == 0) {
  23. cryptVar1 ^= cryptVar1 << 13;
  24. } else if ((i & 3) == 1) {
  25. cryptVar1 ^= cryptVar1 >>> 6;
  26. } else if ((i & 3) == 2) {
  27. cryptVar1 ^= cryptVar1 << 2;
  28. } else if ((i & 3) == 3) {
  29. cryptVar1 ^= cryptVar1 >>> 16;
  30. }
  31. cryptVar1 += cryptArray[i + 128 & 0xff];
  32. int k;
  33. cryptArray[i] = k = cryptArray[(j & 0x3fc) >> 2] + cryptVar1 + cryptVar2;
  34. keySetArray[i] = cryptVar2 = cryptArray[(k >> 8 & 0x3fc) >> 2] + j;
  35. }
  36.  
  37. }
  38.  
  39. public final void initializeKeySet() {
  40. int i1;
  41. int j1;
  42. int k1;
  43. int l1;
  44. int i2;
  45. int j2;
  46. int k2;
  47. int l = i1 = j1 = k1 = l1 = i2 = j2 = k2 = 0x9e3779b9;
  48. for (int i = 0; i < 4; i++) {
  49. l ^= i1 << 11;
  50. k1 += l;
  51. i1 += j1;
  52. i1 ^= j1 >>> 2;
  53. l1 += i1;
  54. j1 += k1;
  55. j1 ^= k1 << 8;
  56. i2 += j1;
  57. k1 += l1;
  58. k1 ^= l1 >>> 16;
  59. j2 += k1;
  60. l1 += i2;
  61. l1 ^= i2 << 10;
  62. k2 += l1;
  63. i2 += j2;
  64. i2 ^= j2 >>> 4;
  65. l += i2;
  66. j2 += k2;
  67. j2 ^= k2 << 8;
  68. i1 += j2;
  69. k2 += l;
  70. k2 ^= l >>> 9;
  71. j1 += k2;
  72. l += i1;
  73. }
  74.  
  75. for (int j = 0; j < 256; j += 8) {
  76. l += keySetArray[j];
  77. i1 += keySetArray[j + 1];
  78. j1 += keySetArray[j + 2];
  79. k1 += keySetArray[j + 3];
  80. l1 += keySetArray[j + 4];
  81. i2 += keySetArray[j + 5];
  82. j2 += keySetArray[j + 6];
  83. k2 += keySetArray[j + 7];
  84. l ^= i1 << 11;
  85. k1 += l;
  86. i1 += j1;
  87. i1 ^= j1 >>> 2;
  88. l1 += i1;
  89. j1 += k1;
  90. j1 ^= k1 << 8;
  91. i2 += j1;
  92. k1 += l1;
  93. k1 ^= l1 >>> 16;
  94. j2 += k1;
  95. l1 += i2;
  96. l1 ^= i2 << 10;
  97. k2 += l1;
  98. i2 += j2;
  99. i2 ^= j2 >>> 4;
  100. l += i2;
  101. j2 += k2;
  102. j2 ^= k2 << 8;
  103. i1 += j2;
  104. k2 += l;
  105. k2 ^= l >>> 9;
  106. j1 += k2;
  107. l += i1;
  108. cryptArray[j] = l;
  109. cryptArray[j + 1] = i1;
  110. cryptArray[j + 2] = j1;
  111. cryptArray[j + 3] = k1;
  112. cryptArray[j + 4] = l1;
  113. cryptArray[j + 5] = i2;
  114. cryptArray[j + 6] = j2;
  115. cryptArray[j + 7] = k2;
  116. }
  117.  
  118. for (int k = 0; k < 256; k += 8) {
  119. l += cryptArray[k];
  120. i1 += cryptArray[k + 1];
  121. j1 += cryptArray[k + 2];
  122. k1 += cryptArray[k + 3];
  123. l1 += cryptArray[k + 4];
  124. i2 += cryptArray[k + 5];
  125. j2 += cryptArray[k + 6];
  126. k2 += cryptArray[k + 7];
  127. l ^= i1 << 11;
  128. k1 += l;
  129. i1 += j1;
  130. i1 ^= j1 >>> 2;
  131. l1 += i1;
  132. j1 += k1;
  133. j1 ^= k1 << 8;
  134. i2 += j1;
  135. k1 += l1;
  136. k1 ^= l1 >>> 16;
  137. j2 += k1;
  138. l1 += i2;
  139. l1 ^= i2 << 10;
  140. k2 += l1;
  141. i2 += j2;
  142. i2 ^= j2 >>> 4;
  143. l += i2;
  144. j2 += k2;
  145. j2 ^= k2 << 8;
  146. i1 += j2;
  147. k2 += l;
  148. k2 ^= l >>> 9;
  149. j1 += k2;
  150. l += i1;
  151. cryptArray[k] = l;
  152. cryptArray[k + 1] = i1;
  153. cryptArray[k + 2] = j1;
  154. cryptArray[k + 3] = k1;
  155. cryptArray[k + 4] = l1;
  156. cryptArray[k + 5] = i2;
  157. cryptArray[k + 6] = j2;
  158. cryptArray[k + 7] = k2;
  159. }
  160.  
  161. generateNextKeySet();
  162. keyArrayIdx = 256;
  163. }
  164. private int keyArrayIdx;
  165. private int keySetArray[], cryptArray[];
  166. private int cryptVar1, cryptVar2, cryptVar3;
  167. }
Add Comment
Please, Sign In to add comment