sleeping_kangaroo12 0.0.1 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +27 -0
  3. data/README.md +48 -53
  4. data/ext/Rakefile +12 -37
  5. data/ext/binding/sleeping_kangaroo12.c +1 -16
  6. data/ext/{xkcp → k12}/Makefile +0 -0
  7. data/ext/k12/Makefile.build +118 -0
  8. data/ext/k12/README.markdown +86 -0
  9. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-ARMv8Asha3.S +623 -0
  10. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-SnP.h +65 -0
  11. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-opt64.c +227 -0
  12. data/ext/{xkcp/lib/low/KeccakP-1600/compact → k12/lib/Inplace32BI}/KeccakP-1600-SnP.h +4 -9
  13. data/ext/{xkcp/lib/low/KeccakP-1600/plain-32bits-inplace → k12/lib/Inplace32BI}/KeccakP-1600-inplace32BI.c +65 -160
  14. data/ext/k12/lib/KangarooTwelve.c +332 -0
  15. data/ext/{xkcp/lib/high/KangarooTwelve → k12/lib}/KangarooTwelve.h +53 -16
  16. data/ext/{xkcp/lib/low/KeccakP-1600/AVX2 → k12/lib/Optimized64}/KeccakP-1600-AVX2.s +122 -558
  17. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512-plainC.c +241 -0
  18. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512.s +551 -0
  19. data/ext/k12/lib/Optimized64/KeccakP-1600-SnP.h +74 -0
  20. data/ext/{xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros → k12/lib/Optimized64/KeccakP-1600-opt64.c} +447 -169
  21. data/ext/k12/lib/Optimized64/KeccakP-1600-runtimeDispatch.c +406 -0
  22. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX2.c +419 -0
  23. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX512.c +458 -0
  24. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-SSSE3.c +438 -0
  25. data/ext/{xkcp/lib/low/KeccakP-1600/plain-64bits → k12/lib/Plain64}/KeccakP-1600-SnP.h +14 -20
  26. data/ext/{xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h → k12/lib/Plain64/KeccakP-1600-plain64.c} +9 -8
  27. data/ext/{xkcp/lib/common → k12/lib}/align.h +3 -2
  28. data/ext/{xkcp/lib/common → k12/lib}/brg_endian.h +0 -0
  29. data/ext/{xkcp → k12}/support/Build/ExpandProducts.xsl +0 -0
  30. data/ext/{xkcp → k12}/support/Build/ToGlobalMakefile.xsl +0 -0
  31. data/ext/{xkcp → k12}/support/Build/ToOneTarget.xsl +0 -0
  32. data/ext/{xkcp → k12}/support/Build/ToTargetConfigFile.xsl +0 -0
  33. data/ext/{xkcp → k12}/support/Build/ToTargetMakefile.xsl +10 -16
  34. data/ext/{xkcp → k12}/support/Build/ToVCXProj.xsl +0 -0
  35. data/lib/sleeping_kangaroo12/binding.rb +2 -1
  36. data/lib/sleeping_kangaroo12/build/loader.rb +1 -0
  37. data/lib/sleeping_kangaroo12/build/platform.rb +1 -0
  38. data/lib/sleeping_kangaroo12/digest.rb +38 -4
  39. data/lib/sleeping_kangaroo12/version.rb +1 -1
  40. metadata +48 -288
  41. data/ext/config/xkcp.build +0 -17
  42. data/ext/xkcp/LICENSE +0 -1
  43. data/ext/xkcp/Makefile.build +0 -200
  44. data/ext/xkcp/README.markdown +0 -296
  45. data/ext/xkcp/lib/HighLevel.build +0 -143
  46. data/ext/xkcp/lib/LowLevel.build +0 -757
  47. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +0 -301
  48. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +0 -81
  49. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +0 -125
  50. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +0 -48
  51. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +0 -79
  52. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +0 -81
  53. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +0 -73
  54. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +0 -195
  55. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +0 -111
  56. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +0 -76
  57. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +0 -314
  58. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +0 -61
  59. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +0 -67
  60. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +0 -128
  61. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +0 -93
  62. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +0 -599
  63. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +0 -573
  64. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +0 -87
  65. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +0 -88
  66. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +0 -274
  67. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +0 -132
  68. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +0 -217
  69. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +0 -81
  70. data/ext/xkcp/lib/high/Keyak/Motorist.inc +0 -953
  71. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +0 -533
  72. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +0 -115
  73. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +0 -557
  74. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +0 -247
  75. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +0 -66
  76. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +0 -336
  77. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +0 -26
  78. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +0 -55
  79. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +0 -35
  80. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +0 -634
  81. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +0 -147
  82. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +0 -483
  83. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +0 -241
  84. data/ext/xkcp/lib/high/common/Phases.h +0 -25
  85. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +0 -41
  86. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +0 -1666
  87. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +0 -1655
  88. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +0 -1268
  89. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +0 -1264
  90. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +0 -1178
  91. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +0 -1175
  92. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +0 -1338
  93. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +0 -1336
  94. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +0 -1343
  95. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +0 -1339
  96. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +0 -42
  97. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +0 -823
  98. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +0 -831
  99. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +0 -31
  100. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +0 -540
  101. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +0 -42
  102. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +0 -733
  103. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +0 -1121
  104. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +0 -52
  105. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +0 -623
  106. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +0 -47
  107. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +0 -6
  108. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +0 -6
  109. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +0 -6
  110. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +0 -1031
  111. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +0 -53
  112. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +0 -44
  113. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +0 -476
  114. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +0 -6
  115. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +0 -6
  116. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +0 -305
  117. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +0 -420
  118. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +0 -43
  119. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +0 -565
  120. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +0 -7
  121. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +0 -7
  122. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +0 -8
  123. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +0 -6
  124. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +0 -6
  125. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +0 -44
  126. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +0 -23
  127. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +0 -625
  128. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +0 -44
  129. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +0 -440
  130. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +0 -42
  131. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +0 -1196
  132. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +0 -1124
  133. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +0 -1196
  134. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +0 -1392
  135. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +0 -1394
  136. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +0 -42
  137. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +0 -7
  138. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +0 -7
  139. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +0 -7
  140. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +0 -850
  141. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +0 -51
  142. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +0 -957
  143. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +0 -49
  144. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +0 -8
  145. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +0 -8
  146. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +0 -9
  147. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +0 -9
  148. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +0 -45
  149. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +0 -37
  150. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +0 -1321
  151. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +0 -55
  152. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +0 -7
  153. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +0 -7
  154. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +0 -7
  155. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +0 -7
  156. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +0 -7
  157. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +0 -7
  158. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +0 -881
  159. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +0 -51
  160. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +0 -45
  161. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +0 -37
  162. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +0 -45
  163. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +0 -38
  164. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +0 -1615
  165. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +0 -57
  166. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +0 -7
  167. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +0 -7
  168. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +0 -7
  169. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +0 -45
  170. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +0 -37
  171. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +0 -45
  172. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +0 -38
  173. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +0 -45
  174. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +0 -38
  175. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +0 -41
  176. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +0 -442
  177. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +0 -446
  178. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +0 -419
  179. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +0 -427
  180. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +0 -41
  181. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +0 -647
  182. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +0 -39
  183. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +0 -190
  184. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +0 -43
  185. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +0 -412
  186. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +0 -23
  187. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +0 -41
  188. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +0 -454
  189. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +0 -458
  190. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +0 -455
  191. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +0 -458
  192. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +0 -41
  193. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +0 -728
  194. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +0 -43
  195. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +0 -414
  196. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +0 -23
  197. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +0 -42
  198. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +0 -527
  199. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +0 -533
  200. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +0 -528
  201. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +0 -534
  202. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +0 -521
  203. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +0 -527
  204. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +0 -517
  205. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +0 -523
  206. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +0 -550
  207. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +0 -556
  208. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +0 -32
  209. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +0 -432
  210. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +0 -42
  211. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +0 -929
  212. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +0 -40
  213. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +0 -244
  214. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +0 -46
  215. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +0 -184
  216. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +0 -454
  217. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +0 -459
  218. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +0 -83
  219. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +0 -88
  220. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +0 -7
  221. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +0 -7
  222. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +0 -7
  223. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +0 -7
  224. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +0 -44
  225. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +0 -437
  226. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +0 -23
  227. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +0 -57
  228. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +0 -475
  229. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +0 -480
  230. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +0 -590
  231. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +0 -590
  232. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +0 -126
  233. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +0 -68
  234. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +0 -174
  235. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +0 -80
  236. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +0 -68
  237. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +0 -142
  238. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +0 -55
  239. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +0 -1086
  240. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +0 -1092
  241. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +0 -721
  242. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +0 -726
  243. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +0 -723
  244. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +0 -729
  245. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +0 -1164
  246. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +0 -1165
  247. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +0 -562
  248. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +0 -563
  249. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +0 -563
  250. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +0 -565
  251. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +0 -55
  252. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +0 -476
  253. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +0 -485
  254. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +0 -362
  255. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +0 -367
  256. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +0 -43
  257. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +0 -1341
  258. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +0 -581
  259. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +0 -58
  260. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +0 -332
  261. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +0 -329
  262. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +0 -53
  263. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +0 -355
  264. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +0 -79
  265. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +0 -56
  266. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +0 -399
  267. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +0 -127
  268. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +0 -43
  269. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +0 -253
  270. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +0 -1044
  271. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +0 -49
  272. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +0 -45
  273. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +0 -37
  274. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +0 -1587
  275. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +0 -48
  276. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +0 -1202
  277. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +0 -48
  278. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +0 -484
  279. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +0 -44
  280. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +0 -45
  281. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +0 -37
  282. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +0 -939
  283. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +0 -49
  284. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +0 -1216
  285. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +0 -48
  286. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +0 -45
  287. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +0 -37
  288. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +0 -290
  289. data/ext/xkcp/lib/low/common/SnP-Relaned.h +0 -141
  290. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +0 -133
  291. data/ext/xkcp/support/Kernel-PMU/Makefile +0 -8
  292. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +0 -129
  293. data/ext/xkcp/support/Kernel-PMU/load-module +0 -1
  294. data/ext/xkcp/util/KeccakSum/KeccakSum.c +0 -394
  295. data/ext/xkcp/util/KeccakSum/base64.c +0 -86
  296. data/ext/xkcp/util/KeccakSum/base64.h +0 -12
@@ -1,147 +0,0 @@
1
- /*
2
- The eXtended Keccak Code Package (XKCP)
3
- https://github.com/XKCP/XKCP
4
-
5
- Xoofff, designed by Joan Daemen, Seth Hoffert, Gilles Van Assche and Ronny Van Keer.
6
-
7
- Implementation by Ronny Van Keer, hereby denoted as "the implementer".
8
-
9
- For more information, feedback or questions, please refer to the Keccak Team website:
10
- https://keccak.team/
11
-
12
- To the extent possible under law, the implementer has waived all copyright
13
- and related or neighboring rights to the source code in this file.
14
- http://creativecommons.org/publicdomain/zero/1.0/
15
- */
16
-
17
- #ifndef _Xoofff_h_
18
- #define _Xoofff_h_
19
-
20
- #include "config.h"
21
- #ifdef XKCP_has_Xoodoo
22
-
23
- #include <stddef.h>
24
- #include <stdint.h>
25
- #include "align.h"
26
- #include "Xoodoo-SnP.h"
27
-
28
-
29
- #define SnP_widthInBytes (3*4*4)
30
- #define Xoofff_RollSizeInBytes SnP_widthInBytes
31
- #define Xoofff_RollOffset 0
32
-
33
- #define Xoofff_FlagNone 0
34
- #define Xoofff_FlagInit 1 /* If set, initialize a new Xoofff_Compress session */
35
- #define Xoofff_FlagLastPart 2 /* If set, indicates the last part of input/output */
36
- #define Xoofff_FlagXoofffie 4 /* If set, indicates Xoofffie will be performed */
37
-
38
- #ifndef _Keccak_BitTypes_
39
- #define _Keccak_BitTypes_
40
- typedef uint8_t BitSequence;
41
- typedef size_t BitLength;
42
- #endif
43
-
44
- typedef enum
45
- {
46
- NOT_INITIALIZED_YET,
47
- COMPRESSING,
48
- EXPANDING,
49
- EXPANDED,
50
- } Xoofff_Phases;
51
-
52
- #ifdef XKCP_has_Xoodootimes16
53
- #include "Xoodoo-times16-SnP.h"
54
- #endif
55
- #ifdef XKCP_has_Xoodootimes8
56
- #include "Xoodoo-times8-SnP.h"
57
- #endif
58
- #ifdef XKCP_has_Xoodootimes4
59
- #include "Xoodoo-times4-SnP.h"
60
- #endif
61
- #include "Xoodoo-SnP.h"
62
- #if defined(XKCP_has_Xoodootimes16) && !defined(Xoodootimes16_isFallback)
63
- #define XoodooMaxParallellism 16
64
- #define Xoofff_Alignment Xoodootimes16_statesAlignment
65
- #if defined(Xoodootimes16_FastXoofff_supported)
66
- #define Xoofff_AddIs Xooffftimes16_AddIs
67
- #endif
68
- #elif defined(XKCP_has_Xoodootimes8) && !defined(Xoodootimes8_isFallback)
69
- #define XoodooMaxParallellism 8
70
- #define Xoofff_Alignment Xoodootimes8_statesAlignment
71
- #if defined(Xoodootimes8_FastXoofff_supported)
72
- #define Xoofff_AddIs Xooffftimes8_AddIs
73
- #endif
74
- #elif defined(XKCP_has_Xoodootimes4) && !defined(Xoodootimes4_isFallback)
75
- #define XoodooMaxParallellism 4
76
- #define Xoofff_Alignment Xoodootimes4_statesAlignment
77
- #if defined(Xoodootimes4_FastXoofff_supported)
78
- #define Xoofff_AddIs Xooffftimes4_AddIs
79
- #endif
80
- #else
81
- #define XoodooMaxParallellism 1
82
- #define Xoofff_Alignment Xoodoo_stateAlignment
83
- #endif
84
-
85
- ALIGN(Xoofff_Alignment) typedef struct
86
- {
87
- unsigned char a[SnP_widthInBytes];
88
- } Xoofff_AlignedArray;
89
-
90
- typedef struct {
91
- Xoofff_AlignedArray k;
92
- Xoofff_AlignedArray kRoll;
93
- Xoofff_AlignedArray xAccu;
94
- Xoofff_AlignedArray yAccu;
95
- Xoofff_AlignedArray queue; /* input/output queue buffer */
96
- BitLength queueOffset; /* current offset in queue */
97
- Xoofff_Phases phase;
98
- } Xoofff_Instance;
99
-
100
- /**
101
- * Function to initialize a Xoofff instance with given key.
102
- * @param xpInstance Pointer to the instance to be initialized.
103
- * @param Key Pointer to the key (K).
104
- * @param KeyBitLen The length of the key in bits.
105
- * @return 0 if successful, 1 otherwise.
106
- */
107
- int Xoofff_MaskDerivation(Xoofff_Instance *xpInstance, const BitSequence *Key, BitLength KeyBitLen);
108
-
109
- /**
110
- * Function to handle input data to be compressed.
111
- * @param xpInstance Pointer to the instance initialized by Xoofff_MaskDerivation().
112
- * @param input Pointer to the input message data (M).
113
- * @param inputBitLen The number of bits provided in the input message data.
114
- * This must be a multiple of 8 if Xoofff_FlagLastPart flag not set.
115
- * @param flags Bitwise or combination of Xoofff_FlagNone, Xoofff_FlagInit, Xoofff_FlagLastPart.
116
- * @return 0 if successful, 1 otherwise.
117
- */
118
- int Xoofff_Compress(Xoofff_Instance *xpInstance, const BitSequence *input, BitLength inputBitLen, int flags);
119
-
120
- /**
121
- * Function to expand output data.
122
- * @param xpInstance Pointer to the hash instance initialized by Xoofff_MaskDerivation().
123
- * @param output Pointer to the buffer where to store the output data.
124
- * @param outputBitLen The number of output bits desired.
125
- * This must be a multiple of 8 if Xoofff_FlagLastPart flag not set.
126
- * @param flags Bitwise or combination of Xoofff_FlagNone, Xoofff_FlagXoofffie, Xoofff_FlagLastPart.
127
- * @return 0 if successful, 1 otherwise.
128
- */
129
- int Xoofff_Expand(Xoofff_Instance *xpInstance, BitSequence *output, BitLength outputBitLen, int flags);
130
-
131
- /** Function to compress input data and expand output data.
132
- * @param xpInstance Pointer to the instance initialized by Xoofff_MaskDerivation().
133
- * @param input Pointer to the input message (M).
134
- * @param inputBitLen The number of bits provided in the input message data.
135
- * @param output Pointer to the output buffer.
136
- * @param outputBitLen The number of output bits desired.
137
- * @param flags Bitwise or combination of Xoofff_FlagNone, Xoofff_FlagInit, Xoofff_FlagXoofffie, Xoofff_FlagLastPart.
138
- * Xoofff_FlagLastPart is internally forced to true for input and output.
139
- * @return 0 if successful, 1 otherwise.
140
- */
141
- int Xoofff(Xoofff_Instance *xpInstance, const BitSequence *input, BitLength inputBitLen, BitSequence *output, BitLength outputBitLen, int flags);
142
-
143
- #else
144
- #error This requires an implementation of Xoodoo
145
- #endif
146
-
147
- #endif
@@ -1,483 +0,0 @@
1
- /*
2
- The eXtended Keccak Code Package (XKCP)
3
- https://github.com/XKCP/XKCP
4
-
5
- Xoofff, designed by Joan Daemen, Seth Hoffert, Gilles Van Assche and Ronny Van Keer.
6
-
7
- Implementation by Ronny Van Keer, hereby denoted as "the implementer".
8
-
9
- For more information, feedback or questions, please refer to the Keccak Team website:
10
- https://keccak.team/
11
-
12
- To the extent possible under law, the implementer has waived all copyright
13
- and related or neighboring rights to the source code in this file.
14
- http://creativecommons.org/publicdomain/zero/1.0/
15
- */
16
-
17
- #include <string.h>
18
- #include "brg_endian.h"
19
- #include "Xoofff.h"
20
- #include "XoofffModes.h"
21
-
22
- /* #define DEBUG_DUMP */
23
-
24
- #define laneSize 4
25
- #define width (3*4*32)
26
- #define widthInBytes (width/8)
27
- #define widthInLanes (widthInBytes/laneSize)
28
-
29
- #define MyMin(a, b) (((a) < (b)) ? (a) : (b))
30
-
31
- #if !defined(Xoodoo_FastXoofff_supported)
32
-
33
- void Xoofff_AddIs(unsigned char *output, const unsigned char *input, size_t bitLen);
34
-
35
- #else
36
-
37
- #endif
38
-
39
- #if defined(DEBUG_DUMP)
40
- static void DUMP( const unsigned char * pText, const unsigned char * pData, unsigned int size )
41
- {
42
- unsigned int i;
43
- printf("%s (%u bytes):", pText, size);
44
- for(i=0; i<size; i++)
45
- printf(" %02x", (int)pData[i]);
46
- printf("\n");
47
- }
48
- #else
49
- #define DUMP(pText, pData, size )
50
- #endif
51
-
52
- /* ------------------------------------------------------------------------- */
53
-
54
- static BitLength XoofffWBC_Split(BitLength n)
55
- {
56
- BitLength nL;
57
- BitLength q, x;
58
-
59
- if (n <= (2 * XoofffWBC_b - (XoofffWBC_l + 2)))
60
- nL = XoofffWBC_l * ((n + XoofffWBC_l) / (2*XoofffWBC_l));
61
- else {
62
- q = (n + XoofffWBC_l + 2 + (XoofffWBC_b - 1)) / XoofffWBC_b;
63
- for (x = 1; (BitLength)(1 << x) < q; ++x)
64
- ; /* empty */
65
- --x;
66
- nL = (q - (BitLength)(1 << x)) * XoofffWBC_b - XoofffWBC_l;
67
- }
68
- return nL;
69
- }
70
-
71
- #define Lp plaintext
72
- #define Rp (plaintext + nL / 8)
73
- #define Lc ciphertext
74
- #define Rc (ciphertext + nL / 8)
75
-
76
- int XoofffWBC_Encipher(Xoofff_Instance *xp, const BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
77
- const BitSequence *W, BitLength WBitLen)
78
- {
79
- size_t nL = XoofffWBC_Split(dataBitLen);
80
- size_t nR = dataBitLen - nL;
81
- size_t nL0 = MyMin(width, nL);
82
- size_t nR0 = MyMin(width, nR);
83
- unsigned char R0[SnP_widthInBytes];
84
- unsigned char HkW[SnP_widthInBytes];
85
- unsigned char kRollAfterHkW[Xoofff_RollSizeInBytes];
86
- unsigned int numberOfBitsInLastByte;
87
- BitSequence lastByte[1];
88
-
89
- /* R0 = R0 + Hk(L || 0) */
90
- if (Xoofff_Compress(xp, Lp, nL, Xoofff_FlagInit) != 0) /* Do complete L, is always a multiple of 8 bits */
91
- return 1;
92
- lastByte[0] = 0;
93
- if (Xoofff(xp, lastByte, 1, R0, nR0, Xoofff_FlagXoofffie) != 0)
94
- return 1;
95
- Xoofff_AddIs(R0, Rp, nR0);
96
-
97
- /* L = L + Fk(R || 1 . W) */
98
- if (Xoofff_Compress(xp, W, WBitLen, Xoofff_FlagInit | Xoofff_FlagLastPart) != 0)
99
- return 1;
100
- memcpy(HkW, xp->xAccu.a, SnP_widthInBytes);
101
- memcpy(kRollAfterHkW, xp->kRoll.a+Xoofff_RollOffset, Xoofff_RollSizeInBytes);
102
- numberOfBitsInLastByte = nR & 7;
103
- lastByte[0] = (numberOfBitsInLastByte != 0) ? Rp[nR/8] : 0;
104
- if (nR0 == nR) {
105
- if (Xoofff_Compress(xp, R0, nR0 - numberOfBitsInLastByte, Xoofff_FlagNone) != 0) /* Compress R0 except last byte if incomplete */
106
- return 1;
107
- lastByte[0] = (numberOfBitsInLastByte != 0) ? R0[nR/8] : 0;
108
- }
109
- else {
110
- if (Xoofff_Compress(xp, R0, nR0, Xoofff_FlagNone) != 0) /* compress R0 */
111
- return 1;
112
- if (Xoofff_Compress(xp, Rp + nR0 / 8, nR - nR0 - numberOfBitsInLastByte, Xoofff_FlagNone) != 0) /* rest of R except last byte if incomplete */
113
- return 1;
114
- lastByte[0] = (numberOfBitsInLastByte != 0) ? Rp[nR/8] : 0;
115
- }
116
- lastByte[0] &= (1 << numberOfBitsInLastByte) - 1;
117
- lastByte[0] |= 1 << numberOfBitsInLastByte;
118
- if (Xoofff(xp, lastByte, numberOfBitsInLastByte + 1, Lc, nL, Xoofff_FlagNone) != 0)
119
- return 1;
120
- Xoofff_AddIs(Lc, Lp, nL);
121
-
122
- /* R = R + Fk(L || 0 . W) */
123
- memcpy(xp->kRoll.a+Xoofff_RollOffset, kRollAfterHkW, Xoofff_RollSizeInBytes);
124
- memcpy(xp->xAccu.a, HkW, SnP_widthInBytes);
125
- if (Xoofff_Compress(xp, Lc, nL, Xoofff_FlagNone) != 0)
126
- return 1;
127
- lastByte[0] = 0;
128
- if (Xoofff(xp, lastByte, 1, Rc, nR, Xoofff_FlagNone) != 0)
129
- return 1;
130
- Xoofff_AddIs(Rc, R0, nR0);
131
- Xoofff_AddIs(Rc + nR0 / 8, Rp + nR0 / 8, nR - nR0);
132
-
133
- /* L0 = L0 + Hk(R || 1) */
134
- if (Xoofff_Compress(xp, Rc, nR - numberOfBitsInLastByte, Xoofff_FlagInit) != 0) /* Do all except last byte if incomplete */
135
- return 1;
136
- lastByte[0] = (numberOfBitsInLastByte != 0) ? Rc[nR/8] : 0;
137
- lastByte[0] &= (1 << numberOfBitsInLastByte) - 1;
138
- lastByte[0] |= 1 << numberOfBitsInLastByte;
139
- if (Xoofff(xp, lastByte, numberOfBitsInLastByte + 1, R0, nL0, Xoofff_FlagXoofffie) != 0)
140
- return 1;
141
- Xoofff_AddIs(Lc, R0, nL0);
142
-
143
- return 0;
144
- }
145
-
146
- int XoofffWBC_Decipher(Xoofff_Instance *xp, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
147
- const BitSequence *W, BitLength WBitLen)
148
- {
149
- size_t nL = XoofffWBC_Split(dataBitLen);
150
- size_t nR = dataBitLen - nL;
151
- size_t nL0 = MyMin(width, nL);
152
- size_t nR0 = MyMin(width, nR);
153
- unsigned char L0[SnP_widthInBytes];
154
- unsigned char HkW[SnP_widthInBytes];
155
- unsigned char kRollAfterHkW[Xoofff_RollSizeInBytes];
156
- unsigned int numberOfBitsInLastByte;
157
- BitSequence lastByte[1];
158
-
159
- /* L0 = L0 + Hk(R || 1) */
160
- numberOfBitsInLastByte = nR & 7;
161
- if (Xoofff_Compress(xp, Rc, nR - numberOfBitsInLastByte, Xoofff_FlagInit) != 0) /* Do all except last byte if incomplete */
162
- return 1;
163
- lastByte[0] = (numberOfBitsInLastByte != 0) ? Rc[nR/8] : 0;
164
- lastByte[0] &= (1 << numberOfBitsInLastByte) - 1;
165
- lastByte[0] |= 1 << numberOfBitsInLastByte;
166
- if (Xoofff(xp, lastByte, numberOfBitsInLastByte + 1, L0, nL0, Xoofff_FlagXoofffie) != 0)
167
- return 1;
168
- Xoofff_AddIs( L0, Lc, nL0);
169
-
170
- /* R = R + Fk(L || 0 . W) */
171
- if (Xoofff_Compress(xp, W, WBitLen, Xoofff_FlagInit | Xoofff_FlagLastPart) != 0)
172
- return 1;
173
- memcpy(HkW, xp->xAccu.a, SnP_widthInBytes);
174
- memcpy(kRollAfterHkW, xp->kRoll.a+Xoofff_RollOffset, Xoofff_RollSizeInBytes);
175
- if (Xoofff_Compress(xp, L0, nL0, Xoofff_FlagNone) != 0) /* compress L0 */
176
- return 1;
177
- if (Xoofff_Compress(xp, Lc + nL0 / 8, nL - nL0, Xoofff_FlagNone) != 0) /* compress rest of L */
178
- return 1;
179
- lastByte[0] = 0;
180
- if (Xoofff(xp, lastByte, 1, Rp, nR, Xoofff_FlagNone) != 0) /* last zero bit */
181
- return 1;
182
- Xoofff_AddIs(Rp, Rc, nR);
183
-
184
- /* L = L + Fk(R || 1 . W) */
185
- memcpy(xp->kRoll.a+Xoofff_RollOffset, kRollAfterHkW, Xoofff_RollSizeInBytes);
186
- memcpy(xp->xAccu.a, HkW, SnP_widthInBytes);
187
- if (Xoofff_Compress(xp, Rp, nR - numberOfBitsInLastByte, Xoofff_FlagNone) != 0)
188
- return 1;
189
- lastByte[0] = (numberOfBitsInLastByte != 0) ? Rp[nR/8] : 0;
190
- lastByte[0] &= (1 << numberOfBitsInLastByte) - 1;
191
- lastByte[0] |= 1 << numberOfBitsInLastByte;
192
- if (Xoofff(xp, lastByte, numberOfBitsInLastByte + 1, Lp, nL, Xoofff_FlagNone) != 0)
193
- return 1;
194
- Xoofff_AddIs(Lp, L0, nL0);
195
- Xoofff_AddIs(Lp + nL0 / 8, Lc + nL0 / 8, nL - nL0);
196
-
197
- /* R0 = R0 + Hk(L || 0) */
198
- if (Xoofff_Compress(xp, Lp, nL, Xoofff_FlagInit) != 0) /* Do all, L is always a multiple of 8 bits */
199
- return 1;
200
- lastByte[0] = 0;
201
- if (Xoofff(xp, lastByte, 1, L0, nR0, Xoofff_FlagXoofffie) != 0)
202
- return 1;
203
- Xoofff_AddIs(Rp, L0, nR0);
204
-
205
- return 0;
206
- }
207
-
208
- int XoofffWBCAE_Encipher(Xoofff_Instance *xp, BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
209
- const BitSequence *AD, BitLength ADBitLen)
210
- {
211
- size_t databytelen = dataBitLen / 8;
212
- unsigned int nbitsInLastByte = dataBitLen & 7;
213
- int result;
214
-
215
- if (nbitsInLastByte != 0) {
216
- plaintext[databytelen] &= ((1 << nbitsInLastByte) - 1);
217
- ++databytelen;
218
- }
219
- memset(plaintext + databytelen, 0, XoofffWBCAE_t/8);
220
-
221
- result = XoofffWBC_Encipher(xp, plaintext, ciphertext, dataBitLen + XoofffWBCAE_t, AD, ADBitLen);
222
-
223
- return(result);
224
- }
225
-
226
- const BitSequence XoofffWBCAE_Zero[XoofffWBCAE_t/8] = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 };
227
-
228
- int XoofffWBCAE_Decipher(Xoofff_Instance *xp, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
229
- const BitSequence *AD, BitLength ADBitLen)
230
- {
231
- unsigned int nbitsInLastByte = dataBitLen & 7;
232
-
233
- if ( XoofffWBC_Decipher(xp, ciphertext, plaintext, dataBitLen + XoofffWBCAE_t, AD, ADBitLen) != 0)
234
- return 1;
235
- if (nbitsInLastByte != 0) { /* check first bits of checkValue sitting in last byte of plaintext */
236
- if ((plaintext[dataBitLen/8] & ~((1 << nbitsInLastByte) - 1)) != 0) {
237
- memset( plaintext, 0, (dataBitLen + XoofffWBCAE_t + 7) / 8 );
238
- return 1;
239
- }
240
- }
241
- if (memcmp(plaintext + (dataBitLen+7)/8, XoofffWBCAE_Zero, XoofffWBCAE_t/8) != 0) {
242
- memset( plaintext, 0, (dataBitLen + XoofffWBCAE_t + 7) / 8 );
243
- return 1;
244
- }
245
- return 0;
246
- }
247
-
248
-
249
- #undef Lp
250
- #undef Rp
251
- #undef Lc
252
- #undef Rc
253
-
254
- /* ------------------------------------------------------------------------- */
255
-
256
- int XoofffSANE_Initialize(XoofffSANE_Instance *xp, const BitSequence *Key, BitLength KeyBitLen,
257
- const BitSequence *Nonce, BitLength NonceBitLen, unsigned char *tag)
258
- {
259
- xp->e = 0;
260
- if (Xoofff_MaskDerivation(&xp->xoofff, Key, KeyBitLen) != 0)
261
- return 1;
262
- if (Xoofff_Compress(&xp->xoofff, Nonce, NonceBitLen, Xoofff_FlagInit | Xoofff_FlagLastPart) != 0)
263
- return 1;
264
- return Xoofff_Expand(&xp->xoofff, tag, XoofffSANE_TagLength * 8, Xoofff_FlagNone);
265
- }
266
-
267
- static int XoofffSANE_AddToHistory(XoofffSANE_Instance *xp, const BitSequence *data, BitLength dataBitLen, unsigned char appendix)
268
- {
269
- BitSequence lastByte[1];
270
-
271
- if (Xoofff_Compress(&xp->xoofff, data, dataBitLen & ~7, Xoofff_FlagNone) != 0) /* Do all except last byte if incomplete */
272
- return 1;
273
-
274
- data += dataBitLen >> 3; /* move pointer to last incomplete byte (if no incomplete last byte, it will point beyond the buffer, but pointer won't be dereferenced) */
275
- dataBitLen &= 7; /* dataBitLen is now number of bits in last possible incomplete byte */
276
- if (dataBitLen == 0) {
277
- lastByte[0] = (BitSequence)(appendix | (xp->e << 1));
278
- dataBitLen = 2;
279
- }
280
- else if (dataBitLen <= 6) {
281
- lastByte[0] = (BitSequence)(*data | (appendix << dataBitLen) | (xp->e << (dataBitLen + 1)));
282
- dataBitLen += 2;
283
- }
284
- else { /* dataBitLen == 7 */
285
- lastByte[0] = (BitSequence)(*data | (appendix << 7));
286
- if ( Xoofff_Compress(&xp->xoofff, lastByte, 8, Xoofff_FlagNone) != 0) {
287
- return 1;
288
- }
289
- lastByte[0] = (BitSequence)xp->e;
290
- dataBitLen = 1;
291
- }
292
- return Xoofff_Compress(&xp->xoofff, lastByte, dataBitLen, Xoofff_FlagLastPart);
293
- }
294
-
295
- int XoofffSANE_Wrap(XoofffSANE_Instance *xp, const BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
296
- const BitSequence *AD, BitLength ADBitLen, unsigned char *tag)
297
- {
298
-
299
- if (dataBitLen != 0) {
300
- /* C = P ^ Fk(history) << offset */
301
- if (Xoofff_Expand(&xp->xoofff, ciphertext, dataBitLen, Xoofff_FlagLastPart) != 0)
302
- return 1;
303
- Xoofff_AddIs(ciphertext, plaintext, dataBitLen);
304
- }
305
- if ((ADBitLen != 0) || (dataBitLen == 0)) {
306
- /* history <- A || 0 || e ° history */
307
- if (XoofffSANE_AddToHistory(xp, AD, ADBitLen, 0 ) != 0)
308
- return 1;
309
- }
310
- if (dataBitLen != 0) {
311
- /* history <- C || 1 || e ° history */
312
- if (XoofffSANE_AddToHistory(xp, ciphertext, dataBitLen, 1 ) != 0)
313
- return 1;
314
- }
315
- xp->e ^= 1;
316
-
317
- /* T = Fk(history) */
318
- return Xoofff_Expand(&xp->xoofff, tag, XoofffSANE_TagLength * 8, Xoofff_FlagNone);
319
- }
320
-
321
- int XoofffSANE_Unwrap(XoofffSANE_Instance *xp, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
322
- const BitSequence *AD, BitLength ADBitLen, const unsigned char *tag)
323
- {
324
- unsigned char tagPrime[XoofffSANE_TagLength];
325
-
326
- if (dataBitLen != 0) {
327
- /* P = C ^ Fk(history) << offset */
328
- if (Xoofff_Expand(&xp->xoofff, plaintext, dataBitLen, Xoofff_FlagLastPart) != 0)
329
- return 1;
330
- Xoofff_AddIs(plaintext, ciphertext, dataBitLen);
331
- }
332
- if ((ADBitLen != 0) || (dataBitLen == 0)) {
333
- /* history <- A || 0 || e ° history */
334
- if (XoofffSANE_AddToHistory(xp, AD, ADBitLen, 0 ) != 0)
335
- return 1;
336
- }
337
- if (dataBitLen != 0) {
338
- /* history <- C || 1 || e ° history */
339
- if (XoofffSANE_AddToHistory(xp, ciphertext, dataBitLen, 1 ) != 0)
340
- return 1;
341
- }
342
- /* Tprime = Fk(history) */
343
- if (Xoofff_Expand(&xp->xoofff, tagPrime, XoofffSANE_TagLength * 8, Xoofff_FlagNone) != 0)
344
- return 1;
345
- xp->e ^= 1;
346
- /* Wipe plaintext on tag difference */
347
- if ( memcmp( tagPrime, tag, XoofffSANE_TagLength) != 0) {
348
- memset(plaintext, 0, (dataBitLen + 7) / 8);
349
- return 1;
350
- }
351
- return 0;
352
- }
353
-
354
- /* ------------------------------------------------------------------------- */
355
-
356
- static int XoofffSANSE_AddToHistory(XoofffSANSE_Instance *xp, const BitSequence *data, BitLength dataBitLen, unsigned char appendix, unsigned int appendixLen)
357
- {
358
- BitSequence lastByte[1];
359
-
360
- if (Xoofff_Compress(&xp->xoofff, data, dataBitLen & ~7, Xoofff_FlagNone) != 0) /* Do all except last byte if incomplete */
361
- return 1;
362
- data += dataBitLen >> 3; /* move pointer to last incomplete byte (if no incomplete last byte, it will point beyond the buffer, but pointer won't be dereferenced) */
363
- dataBitLen &= 7; /* dataBitLen is now number of bits in last possible incomplete byte */
364
- if (dataBitLen == 0) {
365
- lastByte[0] = (BitSequence)(appendix | (xp->e << appendixLen));
366
- dataBitLen = appendixLen + 1;
367
- }
368
- else if (dataBitLen <= (8 - (appendixLen + 1))) {
369
- lastByte[0] = (BitSequence)((*data & ((1 << dataBitLen) - 1)) | (appendix << dataBitLen) | (xp->e << (dataBitLen + appendixLen)));
370
- dataBitLen += appendixLen + 1;
371
- }
372
- else { /* dataBitLen too big to hold everything in last byte */
373
- unsigned int bitsLeft;
374
-
375
- bitsLeft = 8 - (unsigned int)dataBitLen;
376
- lastByte[0] = (BitSequence)((*data & ((1 << dataBitLen) - 1)) | ((appendix & ((1 << bitsLeft) - 1)) << dataBitLen));
377
- appendixLen -= bitsLeft;
378
- appendix >>= bitsLeft;
379
- if ( Xoofff_Compress(&xp->xoofff, lastByte, 8, Xoofff_FlagNone) != 0) {
380
- return 1;
381
- }
382
- lastByte[0] = (BitSequence)(appendix | (xp->e << appendixLen));
383
- dataBitLen = appendixLen + 1;
384
- }
385
- return Xoofff_Compress(&xp->xoofff, lastByte, dataBitLen, Xoofff_FlagLastPart);
386
- }
387
-
388
-
389
- int XoofffSANSE_Initialize(XoofffSANSE_Instance *xp, const BitSequence *Key, BitLength KeyBitLen)
390
- {
391
- xp->e = 0;
392
- return Xoofff_MaskDerivation(&xp->xoofff, Key, KeyBitLen);
393
- }
394
-
395
- int XoofffSANSE_Wrap(XoofffSANSE_Instance *xp, const BitSequence *plaintext, BitSequence *ciphertext, BitLength dataBitLen,
396
- const BitSequence *AD, BitLength ADBitLen, unsigned char *tag)
397
- {
398
-
399
- /* if |A| > 0 OR |P| = 0 then */
400
- if ((ADBitLen != 0) || (dataBitLen == 0)) {
401
- /* history <- A || 0 || e . history */
402
- if (XoofffSANSE_AddToHistory(xp, AD, ADBitLen, 0, 1 ) != 0)
403
- return 1;
404
- }
405
- /* if |P| > 0 then */
406
- if (dataBitLen != 0) {
407
- Xoofff_Instance initialHistory = xp->xoofff;
408
- Xoofff_Instance newHistory;
409
-
410
- /* T = 0t + FK (P || 01 || e . history) */
411
- if (XoofffSANSE_AddToHistory(xp, plaintext, dataBitLen, 2, 2 ) != 0)
412
- return 1;
413
- newHistory = xp->xoofff;
414
- if ( Xoofff_Expand(&xp->xoofff, tag, XoofffSANSE_TagLength * 8, Xoofff_FlagNone) != 0)
415
- return 1;
416
-
417
- /* C = P + FK (T || 11 || e . history) */
418
- xp->xoofff = initialHistory;
419
- if (XoofffSANSE_AddToHistory(xp, tag, XoofffSANSE_TagLength * 8, 3, 2 ) != 0)
420
- return 1;
421
- if (Xoofff_Expand(&xp->xoofff, ciphertext, dataBitLen, Xoofff_FlagLastPart) != 0)
422
- return 1;
423
- Xoofff_AddIs(ciphertext, plaintext, dataBitLen);
424
-
425
- /* history = P || 01 || e . history */
426
- xp->xoofff = newHistory;
427
- }
428
- else {
429
- /* T = 0t + FK (history) */
430
- if ( Xoofff_Expand(&xp->xoofff, tag, XoofffSANSE_TagLength * 8, Xoofff_FlagNone) != 0)
431
- return 1;
432
- }
433
- /* e = e + 1 */
434
- xp->e ^= 1;
435
-
436
- return 0;
437
- }
438
-
439
- int XoofffSANSE_Unwrap(XoofffSANSE_Instance *xp, const BitSequence *ciphertext, BitSequence *plaintext, BitLength dataBitLen,
440
- const BitSequence *AD, BitLength ADBitLen, const unsigned char *tag)
441
- {
442
- unsigned char tagPrime[XoofffSANSE_TagLength];
443
-
444
- /* if |A| > 0 OR |C| = 0 then */
445
- if ((ADBitLen != 0) || (dataBitLen == 0)) {
446
- /* history = A || 0 || e . history */
447
- if (XoofffSANSE_AddToHistory(xp, AD, ADBitLen, 0, 1 ) != 0)
448
- return 1;
449
- }
450
-
451
- /* if |C| > 0 then */
452
- if (dataBitLen != 0) {
453
- Xoofff_Instance initialHistory = xp->xoofff;
454
-
455
- /* P = C + FK (T || 11 || e . history) */
456
- if (XoofffSANSE_AddToHistory(xp, tag, XoofffSANSE_TagLength * 8, 3, 2 ) != 0)
457
- return 1;
458
- if (Xoofff_Expand(&xp->xoofff, plaintext, dataBitLen, Xoofff_FlagLastPart) != 0)
459
- return 1;
460
- Xoofff_AddIs(plaintext, ciphertext, dataBitLen);
461
-
462
- /* history = P || 01 || e . history */
463
- xp->xoofff = initialHistory;
464
- if (XoofffSANSE_AddToHistory(xp, plaintext, dataBitLen, 2, 2 ) != 0)
465
- return 1;
466
- }
467
-
468
- /* T' = 0t + FK (history) */
469
- if ( Xoofff_Expand(&xp->xoofff, tagPrime, sizeof(tagPrime) * 8, Xoofff_FlagNone) != 0)
470
- return 1;
471
-
472
- /* e = e + 1 */
473
- xp->e ^= 1;
474
-
475
- /* if T' != T then */
476
- if ( memcmp( tagPrime, tag, sizeof(tagPrime)) != 0) {
477
- /* wipe P, return error! */
478
- memset(plaintext, 0, (dataBitLen + 7) / 8);
479
- return 1;
480
- }
481
- /* else return P */
482
- return 0;
483
- }