_salsa.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. """passlib.utils.scrypt._salsa - salsa 20/8 core, autogenerated by _gen_salsa.py"""
  2. #=================================================================
  3. # salsa function
  4. #=================================================================
  5. def salsa20(input):
  6. """apply the salsa20/8 core to the provided input
  7. :args input: input list containing 16 32-bit integers
  8. :returns: result list containing 16 32-bit integers
  9. """
  10. b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 = input
  11. v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 = \
  12. b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15
  13. i = 0
  14. while i < 4:
  15. # salsa op 0: [4] ^= ([0]+[12])<<<7
  16. t = (v0 + v12) & 0xffffffff
  17. v4 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  18. # salsa op 1: [8] ^= ([4]+[0])<<<9
  19. t = (v4 + v0) & 0xffffffff
  20. v8 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  21. # salsa op 2: [12] ^= ([8]+[4])<<<13
  22. t = (v8 + v4) & 0xffffffff
  23. v12 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  24. # salsa op 3: [0] ^= ([12]+[8])<<<18
  25. t = (v12 + v8) & 0xffffffff
  26. v0 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  27. # salsa op 4: [9] ^= ([5]+[1])<<<7
  28. t = (v5 + v1) & 0xffffffff
  29. v9 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  30. # salsa op 5: [13] ^= ([9]+[5])<<<9
  31. t = (v9 + v5) & 0xffffffff
  32. v13 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  33. # salsa op 6: [1] ^= ([13]+[9])<<<13
  34. t = (v13 + v9) & 0xffffffff
  35. v1 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  36. # salsa op 7: [5] ^= ([1]+[13])<<<18
  37. t = (v1 + v13) & 0xffffffff
  38. v5 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  39. # salsa op 8: [14] ^= ([10]+[6])<<<7
  40. t = (v10 + v6) & 0xffffffff
  41. v14 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  42. # salsa op 9: [2] ^= ([14]+[10])<<<9
  43. t = (v14 + v10) & 0xffffffff
  44. v2 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  45. # salsa op 10: [6] ^= ([2]+[14])<<<13
  46. t = (v2 + v14) & 0xffffffff
  47. v6 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  48. # salsa op 11: [10] ^= ([6]+[2])<<<18
  49. t = (v6 + v2) & 0xffffffff
  50. v10 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  51. # salsa op 12: [3] ^= ([15]+[11])<<<7
  52. t = (v15 + v11) & 0xffffffff
  53. v3 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  54. # salsa op 13: [7] ^= ([3]+[15])<<<9
  55. t = (v3 + v15) & 0xffffffff
  56. v7 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  57. # salsa op 14: [11] ^= ([7]+[3])<<<13
  58. t = (v7 + v3) & 0xffffffff
  59. v11 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  60. # salsa op 15: [15] ^= ([11]+[7])<<<18
  61. t = (v11 + v7) & 0xffffffff
  62. v15 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  63. # salsa op 16: [1] ^= ([0]+[3])<<<7
  64. t = (v0 + v3) & 0xffffffff
  65. v1 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  66. # salsa op 17: [2] ^= ([1]+[0])<<<9
  67. t = (v1 + v0) & 0xffffffff
  68. v2 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  69. # salsa op 18: [3] ^= ([2]+[1])<<<13
  70. t = (v2 + v1) & 0xffffffff
  71. v3 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  72. # salsa op 19: [0] ^= ([3]+[2])<<<18
  73. t = (v3 + v2) & 0xffffffff
  74. v0 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  75. # salsa op 20: [6] ^= ([5]+[4])<<<7
  76. t = (v5 + v4) & 0xffffffff
  77. v6 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  78. # salsa op 21: [7] ^= ([6]+[5])<<<9
  79. t = (v6 + v5) & 0xffffffff
  80. v7 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  81. # salsa op 22: [4] ^= ([7]+[6])<<<13
  82. t = (v7 + v6) & 0xffffffff
  83. v4 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  84. # salsa op 23: [5] ^= ([4]+[7])<<<18
  85. t = (v4 + v7) & 0xffffffff
  86. v5 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  87. # salsa op 24: [11] ^= ([10]+[9])<<<7
  88. t = (v10 + v9) & 0xffffffff
  89. v11 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  90. # salsa op 25: [8] ^= ([11]+[10])<<<9
  91. t = (v11 + v10) & 0xffffffff
  92. v8 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  93. # salsa op 26: [9] ^= ([8]+[11])<<<13
  94. t = (v8 + v11) & 0xffffffff
  95. v9 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  96. # salsa op 27: [10] ^= ([9]+[8])<<<18
  97. t = (v9 + v8) & 0xffffffff
  98. v10 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  99. # salsa op 28: [12] ^= ([15]+[14])<<<7
  100. t = (v15 + v14) & 0xffffffff
  101. v12 ^= ((t & 0x01ffffff) << 7) | (t >> 25)
  102. # salsa op 29: [13] ^= ([12]+[15])<<<9
  103. t = (v12 + v15) & 0xffffffff
  104. v13 ^= ((t & 0x007fffff) << 9) | (t >> 23)
  105. # salsa op 30: [14] ^= ([13]+[12])<<<13
  106. t = (v13 + v12) & 0xffffffff
  107. v14 ^= ((t & 0x0007ffff) << 13) | (t >> 19)
  108. # salsa op 31: [15] ^= ([14]+[13])<<<18
  109. t = (v14 + v13) & 0xffffffff
  110. v15 ^= ((t & 0x00003fff) << 18) | (t >> 14)
  111. i += 1
  112. b0 = (b0 + v0) & 0xffffffff
  113. b1 = (b1 + v1) & 0xffffffff
  114. b2 = (b2 + v2) & 0xffffffff
  115. b3 = (b3 + v3) & 0xffffffff
  116. b4 = (b4 + v4) & 0xffffffff
  117. b5 = (b5 + v5) & 0xffffffff
  118. b6 = (b6 + v6) & 0xffffffff
  119. b7 = (b7 + v7) & 0xffffffff
  120. b8 = (b8 + v8) & 0xffffffff
  121. b9 = (b9 + v9) & 0xffffffff
  122. b10 = (b10 + v10) & 0xffffffff
  123. b11 = (b11 + v11) & 0xffffffff
  124. b12 = (b12 + v12) & 0xffffffff
  125. b13 = (b13 + v13) & 0xffffffff
  126. b14 = (b14 + v14) & 0xffffffff
  127. b15 = (b15 + v15) & 0xffffffff
  128. return b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15
  129. #=================================================================
  130. # eof
  131. #=================================================================