sleeping_kangaroo12 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -67
  3. data/ext/Rakefile +12 -37
  4. data/ext/binding/sleeping_kangaroo12.c +1 -16
  5. data/ext/{xkcp → k12}/Makefile +0 -0
  6. data/ext/k12/Makefile.build +118 -0
  7. data/ext/k12/README.markdown +86 -0
  8. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-ARMv8Asha3.S +623 -0
  9. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-SnP.h +65 -0
  10. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-opt64.c +227 -0
  11. data/ext/{xkcp/lib/low/KeccakP-1600/compact → k12/lib/Inplace32BI}/KeccakP-1600-SnP.h +4 -9
  12. data/ext/{xkcp/lib/low/KeccakP-1600/plain-32bits-inplace → k12/lib/Inplace32BI}/KeccakP-1600-inplace32BI.c +65 -160
  13. data/ext/k12/lib/KangarooTwelve.c +332 -0
  14. data/ext/{xkcp/lib/high/KangarooTwelve → k12/lib}/KangarooTwelve.h +53 -16
  15. data/ext/{xkcp/lib/low/KeccakP-1600/AVX2 → k12/lib/Optimized64}/KeccakP-1600-AVX2.s +122 -558
  16. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512-plainC.c +241 -0
  17. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512.s +551 -0
  18. data/ext/k12/lib/Optimized64/KeccakP-1600-SnP.h +74 -0
  19. data/ext/{xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros → k12/lib/Optimized64/KeccakP-1600-opt64.c} +447 -169
  20. data/ext/k12/lib/Optimized64/KeccakP-1600-runtimeDispatch.c +406 -0
  21. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX2.c +419 -0
  22. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX512.c +458 -0
  23. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-SSSE3.c +438 -0
  24. data/ext/{xkcp/lib/low/KeccakP-1600/plain-64bits → k12/lib/Plain64}/KeccakP-1600-SnP.h +14 -20
  25. data/ext/{xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h → k12/lib/Plain64/KeccakP-1600-plain64.c} +9 -8
  26. data/ext/{xkcp/lib/common → k12/lib}/align.h +3 -2
  27. data/ext/{xkcp/lib/common → k12/lib}/brg_endian.h +0 -0
  28. data/ext/{xkcp → k12}/support/Build/ExpandProducts.xsl +0 -0
  29. data/ext/{xkcp → k12}/support/Build/ToGlobalMakefile.xsl +0 -0
  30. data/ext/{xkcp → k12}/support/Build/ToOneTarget.xsl +0 -0
  31. data/ext/{xkcp → k12}/support/Build/ToTargetConfigFile.xsl +0 -0
  32. data/ext/{xkcp → k12}/support/Build/ToTargetMakefile.xsl +10 -16
  33. data/ext/{xkcp → k12}/support/Build/ToVCXProj.xsl +0 -0
  34. data/lib/sleeping_kangaroo12/version.rb +1 -1
  35. metadata +33 -276
  36. data/ext/config/xkcp.build +0 -17
  37. data/ext/xkcp/LICENSE +0 -1
  38. data/ext/xkcp/Makefile.build +0 -200
  39. data/ext/xkcp/README.markdown +0 -296
  40. data/ext/xkcp/lib/HighLevel.build +0 -143
  41. data/ext/xkcp/lib/LowLevel.build +0 -757
  42. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +0 -301
  43. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +0 -81
  44. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +0 -125
  45. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +0 -48
  46. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +0 -79
  47. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +0 -81
  48. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +0 -73
  49. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +0 -195
  50. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +0 -111
  51. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +0 -76
  52. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +0 -314
  53. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +0 -61
  54. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +0 -67
  55. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +0 -128
  56. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +0 -93
  57. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +0 -599
  58. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +0 -573
  59. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +0 -87
  60. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +0 -88
  61. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +0 -274
  62. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +0 -132
  63. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +0 -217
  64. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +0 -81
  65. data/ext/xkcp/lib/high/Keyak/Motorist.inc +0 -953
  66. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +0 -533
  67. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +0 -115
  68. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +0 -557
  69. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +0 -247
  70. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +0 -66
  71. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +0 -336
  72. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +0 -26
  73. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +0 -55
  74. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +0 -35
  75. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +0 -634
  76. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +0 -147
  77. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +0 -483
  78. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +0 -241
  79. data/ext/xkcp/lib/high/common/Phases.h +0 -25
  80. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +0 -41
  81. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +0 -1666
  82. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +0 -1655
  83. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +0 -1268
  84. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +0 -1264
  85. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +0 -1178
  86. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +0 -1175
  87. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +0 -1338
  88. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +0 -1336
  89. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +0 -1343
  90. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +0 -1339
  91. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +0 -42
  92. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +0 -823
  93. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +0 -831
  94. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +0 -31
  95. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +0 -540
  96. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +0 -42
  97. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +0 -733
  98. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +0 -1121
  99. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +0 -52
  100. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +0 -623
  101. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +0 -47
  102. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +0 -6
  103. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +0 -6
  104. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +0 -6
  105. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +0 -1031
  106. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +0 -53
  107. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +0 -44
  108. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +0 -476
  109. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +0 -6
  110. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +0 -6
  111. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +0 -305
  112. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +0 -420
  113. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +0 -43
  114. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +0 -565
  115. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +0 -7
  116. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +0 -7
  117. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +0 -8
  118. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +0 -6
  119. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +0 -6
  120. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +0 -44
  121. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +0 -23
  122. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +0 -625
  123. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +0 -44
  124. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +0 -440
  125. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +0 -42
  126. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +0 -1196
  127. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +0 -1124
  128. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +0 -1196
  129. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +0 -1392
  130. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +0 -1394
  131. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +0 -42
  132. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +0 -7
  133. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +0 -7
  134. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +0 -7
  135. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +0 -850
  136. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +0 -51
  137. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +0 -957
  138. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +0 -49
  139. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +0 -8
  140. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +0 -8
  141. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +0 -9
  142. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +0 -9
  143. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +0 -45
  144. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +0 -37
  145. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +0 -1321
  146. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +0 -55
  147. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +0 -7
  148. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +0 -7
  149. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +0 -7
  150. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +0 -7
  151. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +0 -7
  152. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +0 -7
  153. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +0 -881
  154. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +0 -51
  155. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +0 -45
  156. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +0 -37
  157. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +0 -45
  158. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +0 -38
  159. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +0 -1615
  160. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +0 -57
  161. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +0 -7
  162. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +0 -7
  163. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +0 -7
  164. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +0 -45
  165. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +0 -37
  166. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +0 -45
  167. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +0 -38
  168. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +0 -45
  169. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +0 -38
  170. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +0 -41
  171. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +0 -442
  172. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +0 -446
  173. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +0 -419
  174. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +0 -427
  175. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +0 -41
  176. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +0 -647
  177. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +0 -39
  178. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +0 -190
  179. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +0 -43
  180. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +0 -412
  181. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +0 -23
  182. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +0 -41
  183. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +0 -454
  184. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +0 -458
  185. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +0 -455
  186. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +0 -458
  187. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +0 -41
  188. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +0 -728
  189. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +0 -43
  190. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +0 -414
  191. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +0 -23
  192. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +0 -42
  193. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +0 -527
  194. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +0 -533
  195. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +0 -528
  196. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +0 -534
  197. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +0 -521
  198. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +0 -527
  199. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +0 -517
  200. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +0 -523
  201. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +0 -550
  202. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +0 -556
  203. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +0 -32
  204. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +0 -432
  205. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +0 -42
  206. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +0 -929
  207. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +0 -40
  208. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +0 -244
  209. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +0 -46
  210. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +0 -184
  211. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +0 -454
  212. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +0 -459
  213. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +0 -83
  214. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +0 -88
  215. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +0 -7
  216. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +0 -7
  217. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +0 -7
  218. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +0 -7
  219. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +0 -44
  220. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +0 -437
  221. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +0 -23
  222. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +0 -57
  223. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +0 -475
  224. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +0 -480
  225. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +0 -590
  226. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +0 -590
  227. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +0 -126
  228. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +0 -68
  229. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +0 -174
  230. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +0 -80
  231. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +0 -68
  232. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +0 -142
  233. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +0 -55
  234. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +0 -1086
  235. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +0 -1092
  236. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +0 -721
  237. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +0 -726
  238. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +0 -723
  239. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +0 -729
  240. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +0 -1164
  241. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +0 -1165
  242. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +0 -562
  243. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +0 -563
  244. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +0 -563
  245. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +0 -565
  246. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +0 -55
  247. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +0 -476
  248. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +0 -485
  249. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +0 -362
  250. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +0 -367
  251. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +0 -43
  252. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +0 -1341
  253. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +0 -581
  254. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +0 -58
  255. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +0 -332
  256. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +0 -329
  257. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +0 -53
  258. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +0 -355
  259. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +0 -79
  260. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +0 -56
  261. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +0 -399
  262. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +0 -127
  263. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +0 -43
  264. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +0 -253
  265. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +0 -1044
  266. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +0 -49
  267. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +0 -45
  268. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +0 -37
  269. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +0 -1587
  270. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +0 -48
  271. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +0 -1202
  272. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +0 -48
  273. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +0 -484
  274. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +0 -44
  275. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +0 -45
  276. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +0 -37
  277. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +0 -939
  278. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +0 -49
  279. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +0 -1216
  280. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +0 -48
  281. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +0 -45
  282. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +0 -37
  283. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +0 -290
  284. data/ext/xkcp/lib/low/common/SnP-Relaned.h +0 -141
  285. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +0 -133
  286. data/ext/xkcp/support/Kernel-PMU/Makefile +0 -8
  287. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +0 -129
  288. data/ext/xkcp/support/Kernel-PMU/load-module +0 -1
  289. data/ext/xkcp/util/KeccakSum/KeccakSum.c +0 -394
  290. data/ext/xkcp/util/KeccakSum/base64.c +0 -86
  291. 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
- }