ruby_nacl 0.1.0

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 (499) hide show
  1. data/Changelog +0 -0
  2. data/README.md +49 -0
  3. data/ext/ruby_nacl/NaCl/MACROS +56 -0
  4. data/ext/ruby_nacl/NaCl/OPERATIONS +11 -0
  5. data/ext/ruby_nacl/NaCl/PROTOTYPES.c +26 -0
  6. data/ext/ruby_nacl/NaCl/PROTOTYPES.cpp +17 -0
  7. data/ext/ruby_nacl/NaCl/README +1 -0
  8. data/ext/ruby_nacl/NaCl/commandline/nacl-sha256.c +64 -0
  9. data/ext/ruby_nacl/NaCl/commandline/nacl-sha512.c +64 -0
  10. data/ext/ruby_nacl/NaCl/cpucycles/alpha.c +80 -0
  11. data/ext/ruby_nacl/NaCl/cpucycles/alpha.h +27 -0
  12. data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuinfo.c +16 -0
  13. data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuinfo.h +27 -0
  14. data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuspeed.c +25 -0
  15. data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuspeed.h +27 -0
  16. data/ext/ruby_nacl/NaCl/cpucycles/amd64tscfreq.c +18 -0
  17. data/ext/ruby_nacl/NaCl/cpucycles/amd64tscfreq.h +27 -0
  18. data/ext/ruby_nacl/NaCl/cpucycles/celllinux.c +83 -0
  19. data/ext/ruby_nacl/NaCl/cpucycles/celllinux.h +27 -0
  20. data/ext/ruby_nacl/NaCl/cpucycles/cortex.c +73 -0
  21. data/ext/ruby_nacl/NaCl/cpucycles/cortex.h +27 -0
  22. data/ext/ruby_nacl/NaCl/cpucycles/dev4ns.c +62 -0
  23. data/ext/ruby_nacl/NaCl/cpucycles/dev4ns.h +27 -0
  24. data/ext/ruby_nacl/NaCl/cpucycles/do +105 -0
  25. data/ext/ruby_nacl/NaCl/cpucycles/gettimeofday.c +32 -0
  26. data/ext/ruby_nacl/NaCl/cpucycles/gettimeofday.h +27 -0
  27. data/ext/ruby_nacl/NaCl/cpucycles/hppapstat.c +26 -0
  28. data/ext/ruby_nacl/NaCl/cpucycles/hppapstat.h +27 -0
  29. data/ext/ruby_nacl/NaCl/cpucycles/ia64cpuinfo.c +15 -0
  30. data/ext/ruby_nacl/NaCl/cpucycles/ia64cpuinfo.h +27 -0
  31. data/ext/ruby_nacl/NaCl/cpucycles/mips.c +65 -0
  32. data/ext/ruby_nacl/NaCl/cpucycles/mips.h +27 -0
  33. data/ext/ruby_nacl/NaCl/cpucycles/monotonic.c +34 -0
  34. data/ext/ruby_nacl/NaCl/cpucycles/monotonic.h +27 -0
  35. data/ext/ruby_nacl/NaCl/cpucycles/monotoniccpuinfo.c +33 -0
  36. data/ext/ruby_nacl/NaCl/cpucycles/monotoniccpuinfo.h +27 -0
  37. data/ext/ruby_nacl/NaCl/cpucycles/osfreq.c +65 -0
  38. data/ext/ruby_nacl/NaCl/cpucycles/powerpccpuinfo.c +95 -0
  39. data/ext/ruby_nacl/NaCl/cpucycles/powerpccpuinfo.h +27 -0
  40. data/ext/ruby_nacl/NaCl/cpucycles/powerpcmacos.c +42 -0
  41. data/ext/ruby_nacl/NaCl/cpucycles/powerpcmacos.h +27 -0
  42. data/ext/ruby_nacl/NaCl/cpucycles/sgi.c +38 -0
  43. data/ext/ruby_nacl/NaCl/cpucycles/sgi.h +27 -0
  44. data/ext/ruby_nacl/NaCl/cpucycles/sparc32cpuinfo.c +16 -0
  45. data/ext/ruby_nacl/NaCl/cpucycles/sparc32cpuinfo.h +27 -0
  46. data/ext/ruby_nacl/NaCl/cpucycles/sparccpuinfo.c +15 -0
  47. data/ext/ruby_nacl/NaCl/cpucycles/sparccpuinfo.h +27 -0
  48. data/ext/ruby_nacl/NaCl/cpucycles/test.c +77 -0
  49. data/ext/ruby_nacl/NaCl/cpucycles/x86cpuinfo.c +15 -0
  50. data/ext/ruby_nacl/NaCl/cpucycles/x86cpuinfo.h +27 -0
  51. data/ext/ruby_nacl/NaCl/cpucycles/x86cpuspeed.c +24 -0
  52. data/ext/ruby_nacl/NaCl/cpucycles/x86cpuspeed.h +27 -0
  53. data/ext/ruby_nacl/NaCl/cpucycles/x86estimate.c +59 -0
  54. data/ext/ruby_nacl/NaCl/cpucycles/x86estimate.h +27 -0
  55. data/ext/ruby_nacl/NaCl/cpucycles/x86tscfreq.c +17 -0
  56. data/ext/ruby_nacl/NaCl/cpucycles/x86tscfreq.h +27 -0
  57. data/ext/ruby_nacl/NaCl/cpuid/cbytes.c +16 -0
  58. data/ext/ruby_nacl/NaCl/cpuid/cpuid.c +41 -0
  59. data/ext/ruby_nacl/NaCl/cpuid/do +37 -0
  60. data/ext/ruby_nacl/NaCl/cpuid/unknown.c +7 -0
  61. data/ext/ruby_nacl/NaCl/cpuid/x86.c +41 -0
  62. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/checksum +1 -0
  63. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/ref/api.h +2 -0
  64. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/ref/hmac.c +83 -0
  65. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/ref/verify.c +9 -0
  66. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/used +0 -0
  67. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/checksum +1 -0
  68. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/ref/api.h +2 -0
  69. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/ref/hmac.c +86 -0
  70. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/ref/verify.c +9 -0
  71. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/selected +0 -0
  72. data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/used +0 -0
  73. data/ext/ruby_nacl/NaCl/crypto_auth/measure.c +69 -0
  74. data/ext/ruby_nacl/NaCl/crypto_auth/try.c +119 -0
  75. data/ext/ruby_nacl/NaCl/crypto_auth/wrapper-auth.cpp +11 -0
  76. data/ext/ruby_nacl/NaCl/crypto_auth/wrapper-verify.cpp +14 -0
  77. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/checksum +1 -0
  78. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/after.c +22 -0
  79. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/api.h +6 -0
  80. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/before.c +17 -0
  81. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/box.c +27 -0
  82. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/keypair.c +12 -0
  83. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/selected +0 -0
  84. data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/used +0 -0
  85. data/ext/ruby_nacl/NaCl/crypto_box/measure.c +137 -0
  86. data/ext/ruby_nacl/NaCl/crypto_box/try.c +195 -0
  87. data/ext/ruby_nacl/NaCl/crypto_box/wrapper-box.cpp +24 -0
  88. data/ext/ruby_nacl/NaCl/crypto_box/wrapper-keypair.cpp +12 -0
  89. data/ext/ruby_nacl/NaCl/crypto_box/wrapper-open.cpp +27 -0
  90. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/checksum +1 -0
  91. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref/api.h +4 -0
  92. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref/core.c +135 -0
  93. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref/implementors +1 -0
  94. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref2/api.h +4 -0
  95. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref2/core.c +108 -0
  96. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref2/implementors +1 -0
  97. data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/used +0 -0
  98. data/ext/ruby_nacl/NaCl/crypto_core/measure.c +18 -0
  99. data/ext/ruby_nacl/NaCl/crypto_core/salsa20/checksum +1 -0
  100. data/ext/ruby_nacl/NaCl/crypto_core/salsa20/ref/api.h +4 -0
  101. data/ext/ruby_nacl/NaCl/crypto_core/salsa20/ref/core.c +134 -0
  102. data/ext/ruby_nacl/NaCl/crypto_core/salsa20/ref/implementors +1 -0
  103. data/ext/ruby_nacl/NaCl/crypto_core/salsa20/used +0 -0
  104. data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/checksum +1 -0
  105. data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/ref/api.h +4 -0
  106. data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/ref/core.c +134 -0
  107. data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/ref/implementors +1 -0
  108. data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/used +0 -0
  109. data/ext/ruby_nacl/NaCl/crypto_core/salsa208/checksum +1 -0
  110. data/ext/ruby_nacl/NaCl/crypto_core/salsa208/ref/api.h +4 -0
  111. data/ext/ruby_nacl/NaCl/crypto_core/salsa208/ref/core.c +134 -0
  112. data/ext/ruby_nacl/NaCl/crypto_core/salsa208/ref/implementors +1 -0
  113. data/ext/ruby_nacl/NaCl/crypto_core/salsa208/used +0 -0
  114. data/ext/ruby_nacl/NaCl/crypto_core/try.c +116 -0
  115. data/ext/ruby_nacl/NaCl/crypto_core/wrapper-empty.cpp +0 -0
  116. data/ext/ruby_nacl/NaCl/crypto_hash/measure.c +66 -0
  117. data/ext/ruby_nacl/NaCl/crypto_hash/sha256/checksum +1 -0
  118. data/ext/ruby_nacl/NaCl/crypto_hash/sha256/ref/api.h +1 -0
  119. data/ext/ruby_nacl/NaCl/crypto_hash/sha256/ref/hash.c +69 -0
  120. data/ext/ruby_nacl/NaCl/crypto_hash/sha256/ref/implementors +1 -0
  121. data/ext/ruby_nacl/NaCl/crypto_hash/sha256/used +0 -0
  122. data/ext/ruby_nacl/NaCl/crypto_hash/sha512/checksum +1 -0
  123. data/ext/ruby_nacl/NaCl/crypto_hash/sha512/ref/api.h +1 -0
  124. data/ext/ruby_nacl/NaCl/crypto_hash/sha512/ref/hash.c +71 -0
  125. data/ext/ruby_nacl/NaCl/crypto_hash/sha512/ref/implementors +1 -0
  126. data/ext/ruby_nacl/NaCl/crypto_hash/sha512/selected +0 -0
  127. data/ext/ruby_nacl/NaCl/crypto_hash/sha512/used +0 -0
  128. data/ext/ruby_nacl/NaCl/crypto_hash/try.c +77 -0
  129. data/ext/ruby_nacl/NaCl/crypto_hash/wrapper-hash.cpp +10 -0
  130. data/ext/ruby_nacl/NaCl/crypto_hashblocks/measure.c +18 -0
  131. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/checksum +1 -0
  132. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/inplace/api.h +2 -0
  133. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/inplace/blocks.c +228 -0
  134. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/inplace/implementors +1 -0
  135. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/ref/api.h +2 -0
  136. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/ref/blocks.c +212 -0
  137. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/ref/implementors +1 -0
  138. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/used +0 -0
  139. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/checksum +1 -0
  140. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/inplace/api.h +2 -0
  141. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/inplace/blocks.c +256 -0
  142. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/inplace/implementors +1 -0
  143. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/ref/api.h +2 -0
  144. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/ref/blocks.c +239 -0
  145. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/ref/implementors +1 -0
  146. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/selected +0 -0
  147. data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/used +0 -0
  148. data/ext/ruby_nacl/NaCl/crypto_hashblocks/try.c +79 -0
  149. data/ext/ruby_nacl/NaCl/crypto_hashblocks/wrapper-empty.cpp +0 -0
  150. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/measure.c +69 -0
  151. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/53/api.h +2 -0
  152. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/53/auth.c +1616 -0
  153. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/53/verify.c +9 -0
  154. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/api.h +2 -0
  155. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/auth.s +2787 -0
  156. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/constants.s +85 -0
  157. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/verify.c +9 -0
  158. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/checksum +1 -0
  159. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/ref/api.h +2 -0
  160. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/ref/auth.c +104 -0
  161. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/ref/verify.c +9 -0
  162. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/selected +0 -0
  163. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/used +0 -0
  164. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/api.h +2 -0
  165. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/auth.s +2779 -0
  166. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/constants.s +85 -0
  167. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/verify.c +9 -0
  168. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/try.c +119 -0
  169. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/wrapper-auth.cpp +11 -0
  170. data/ext/ruby_nacl/NaCl/crypto_onetimeauth/wrapper-verify.cpp +14 -0
  171. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/api.h +2 -0
  172. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/base.c +8 -0
  173. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/const.s +114 -0
  174. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/fromdouble.s +195 -0
  175. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/implementors +1 -0
  176. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/init.s +13 -0
  177. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/mainloop.s +3990 -0
  178. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/mult.s +410 -0
  179. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/smult.c +91 -0
  180. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/square.s +298 -0
  181. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/todouble.s +144 -0
  182. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/checksum +1 -0
  183. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/api.h +2 -0
  184. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/base.c +8 -0
  185. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/implementors +1 -0
  186. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/smult.c +477 -0
  187. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/api.h +2 -0
  188. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/base.c +16 -0
  189. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/implementors +1 -0
  190. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/smult.c +265 -0
  191. data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/used +0 -0
  192. data/ext/ruby_nacl/NaCl/crypto_scalarmult/measure.c +61 -0
  193. data/ext/ruby_nacl/NaCl/crypto_scalarmult/try.c +126 -0
  194. data/ext/ruby_nacl/NaCl/crypto_scalarmult/wrapper-base.cpp +11 -0
  195. data/ext/ruby_nacl/NaCl/crypto_scalarmult/wrapper-mult.cpp +12 -0
  196. data/ext/ruby_nacl/NaCl/crypto_secretbox/measure.c +75 -0
  197. data/ext/ruby_nacl/NaCl/crypto_secretbox/try.c +129 -0
  198. data/ext/ruby_nacl/NaCl/crypto_secretbox/wrapper-box.cpp +19 -0
  199. data/ext/ruby_nacl/NaCl/crypto_secretbox/wrapper-open.cpp +22 -0
  200. data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/checksum +1 -0
  201. data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/ref/api.h +4 -0
  202. data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/ref/box.c +35 -0
  203. data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/selected +0 -0
  204. data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/used +0 -0
  205. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/api.h +3 -0
  206. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/fe25519.c +345 -0
  207. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/fe25519.h +54 -0
  208. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/ge25519.c +227 -0
  209. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/ge25519.h +34 -0
  210. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/sc25519.c +146 -0
  211. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/sc25519.h +51 -0
  212. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/sign.c +103 -0
  213. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/selected +0 -0
  214. data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/used +0 -0
  215. data/ext/ruby_nacl/NaCl/crypto_sign/measure.c +83 -0
  216. data/ext/ruby_nacl/NaCl/crypto_sign/try.c +86 -0
  217. data/ext/ruby_nacl/NaCl/crypto_sign/wrapper-keypair.cpp +12 -0
  218. data/ext/ruby_nacl/NaCl/crypto_sign/wrapper-sign-open.cpp +24 -0
  219. data/ext/ruby_nacl/NaCl/crypto_sign/wrapper-sign.cpp +23 -0
  220. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/checksum +1 -0
  221. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/afternm.s +12308 -0
  222. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/api.h +3 -0
  223. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/beforenm.s +13694 -0
  224. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/stream.c +14 -0
  225. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/xor.c +15 -0
  226. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/xor_afternm.s +12407 -0
  227. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/afternm.c +158 -0
  228. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/api.h +3 -0
  229. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/beforenm.c +59 -0
  230. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/common.c +64 -0
  231. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/common.h +788 -0
  232. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/consts.c +14 -0
  233. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/consts.h +28 -0
  234. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/int128.c +128 -0
  235. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/int128.h +47 -0
  236. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/stream.c +28 -0
  237. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/types.h +10 -0
  238. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/xor_afternm.c +180 -0
  239. data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/used +0 -0
  240. data/ext/ruby_nacl/NaCl/crypto_stream/measure.c +73 -0
  241. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/amd64_xmm6/api.h +2 -0
  242. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/amd64_xmm6/implementors +1 -0
  243. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/amd64_xmm6/stream.s +4823 -0
  244. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/checksum +1 -0
  245. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/api.h +2 -0
  246. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/implementors +1 -0
  247. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/stream.c +49 -0
  248. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/xor.c +52 -0
  249. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/used +0 -0
  250. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/x86_xmm5/api.h +2 -0
  251. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/x86_xmm5/implementors +1 -0
  252. data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/x86_xmm5/stream.s +5078 -0
  253. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/amd64_xmm6/api.h +2 -0
  254. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/amd64_xmm6/implementors +1 -0
  255. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/amd64_xmm6/stream.s +4823 -0
  256. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/checksum +1 -0
  257. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/api.h +2 -0
  258. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/implementors +1 -0
  259. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/stream.c +49 -0
  260. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/xor.c +52 -0
  261. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/used +0 -0
  262. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/x86_xmm5/api.h +2 -0
  263. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/x86_xmm5/implementors +1 -0
  264. data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/x86_xmm5/stream.s +5078 -0
  265. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/amd64_xmm6/api.h +2 -0
  266. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/amd64_xmm6/implementors +1 -0
  267. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/amd64_xmm6/stream.s +4823 -0
  268. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/checksum +1 -0
  269. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/api.h +2 -0
  270. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/implementors +1 -0
  271. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/stream.c +49 -0
  272. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/xor.c +52 -0
  273. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/used +0 -0
  274. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/x86_xmm5/api.h +2 -0
  275. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/x86_xmm5/implementors +1 -0
  276. data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/x86_xmm5/stream.s +5078 -0
  277. data/ext/ruby_nacl/NaCl/crypto_stream/try.c +124 -0
  278. data/ext/ruby_nacl/NaCl/crypto_stream/wrapper-stream.cpp +12 -0
  279. data/ext/ruby_nacl/NaCl/crypto_stream/wrapper-xor.cpp +17 -0
  280. data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/checksum +1 -0
  281. data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/api.h +2 -0
  282. data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/implementors +1 -0
  283. data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/stream.c +22 -0
  284. data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/xor.c +23 -0
  285. data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/selected +0 -0
  286. data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/used +0 -0
  287. data/ext/ruby_nacl/NaCl/crypto_stream.h +18 -0
  288. data/ext/ruby_nacl/NaCl/crypto_stream_aes128ctr.h +33 -0
  289. data/ext/ruby_nacl/NaCl/crypto_verify/16/checksum +1 -0
  290. data/ext/ruby_nacl/NaCl/crypto_verify/16/ref/api.h +1 -0
  291. data/ext/ruby_nacl/NaCl/crypto_verify/16/ref/verify.c +24 -0
  292. data/ext/ruby_nacl/NaCl/crypto_verify/16/used +0 -0
  293. data/ext/ruby_nacl/NaCl/crypto_verify/32/checksum +1 -0
  294. data/ext/ruby_nacl/NaCl/crypto_verify/32/ref/api.h +1 -0
  295. data/ext/ruby_nacl/NaCl/crypto_verify/32/ref/verify.c +40 -0
  296. data/ext/ruby_nacl/NaCl/crypto_verify/32/used +0 -0
  297. data/ext/ruby_nacl/NaCl/crypto_verify/measure.c +18 -0
  298. data/ext/ruby_nacl/NaCl/crypto_verify/try.c +75 -0
  299. data/ext/ruby_nacl/NaCl/crypto_verify/wrapper-empty.cpp +0 -0
  300. data/ext/ruby_nacl/NaCl/curvecp/LIBS +31 -0
  301. data/ext/ruby_nacl/NaCl/curvecp/README +10 -0
  302. data/ext/ruby_nacl/NaCl/curvecp/SOURCES +36 -0
  303. data/ext/ruby_nacl/NaCl/curvecp/TARGETS +5 -0
  304. data/ext/ruby_nacl/NaCl/curvecp/blocking.c +12 -0
  305. data/ext/ruby_nacl/NaCl/curvecp/blocking.h +7 -0
  306. data/ext/ruby_nacl/NaCl/curvecp/byte.h +8 -0
  307. data/ext/ruby_nacl/NaCl/curvecp/byte_copy.c +8 -0
  308. data/ext/ruby_nacl/NaCl/curvecp/byte_isequal.c +10 -0
  309. data/ext/ruby_nacl/NaCl/curvecp/byte_zero.c +7 -0
  310. data/ext/ruby_nacl/NaCl/curvecp/crypto_block.c +35 -0
  311. data/ext/ruby_nacl/NaCl/curvecp/crypto_block.h +4 -0
  312. data/ext/ruby_nacl/NaCl/curvecp/curvecpclient.c +476 -0
  313. data/ext/ruby_nacl/NaCl/curvecp/curvecpmakekey.c +57 -0
  314. data/ext/ruby_nacl/NaCl/curvecp/curvecpmessage.c +654 -0
  315. data/ext/ruby_nacl/NaCl/curvecp/curvecpprintkey.c +46 -0
  316. data/ext/ruby_nacl/NaCl/curvecp/curvecpserver.c +497 -0
  317. data/ext/ruby_nacl/NaCl/curvecp/die.c +42 -0
  318. data/ext/ruby_nacl/NaCl/curvecp/die.h +16 -0
  319. data/ext/ruby_nacl/NaCl/curvecp/e.c +106 -0
  320. data/ext/ruby_nacl/NaCl/curvecp/e.h +438 -0
  321. data/ext/ruby_nacl/NaCl/curvecp/hexparse.c +25 -0
  322. data/ext/ruby_nacl/NaCl/curvecp/hexparse.h +6 -0
  323. data/ext/ruby_nacl/NaCl/curvecp/load.c +33 -0
  324. data/ext/ruby_nacl/NaCl/curvecp/load.h +6 -0
  325. data/ext/ruby_nacl/NaCl/curvecp/nameparse.c +19 -0
  326. data/ext/ruby_nacl/NaCl/curvecp/nameparse.h +6 -0
  327. data/ext/ruby_nacl/NaCl/curvecp/nanoseconds.c +27 -0
  328. data/ext/ruby_nacl/NaCl/curvecp/nanoseconds.h +6 -0
  329. data/ext/ruby_nacl/NaCl/curvecp/open.h +10 -0
  330. data/ext/ruby_nacl/NaCl/curvecp/open_cwd.c +6 -0
  331. data/ext/ruby_nacl/NaCl/curvecp/open_lock.c +19 -0
  332. data/ext/ruby_nacl/NaCl/curvecp/open_pipe.c +15 -0
  333. data/ext/ruby_nacl/NaCl/curvecp/open_read.c +17 -0
  334. data/ext/ruby_nacl/NaCl/curvecp/open_write.c +17 -0
  335. data/ext/ruby_nacl/NaCl/curvecp/portparse.c +14 -0
  336. data/ext/ruby_nacl/NaCl/curvecp/portparse.h +6 -0
  337. data/ext/ruby_nacl/NaCl/curvecp/randommod.c +14 -0
  338. data/ext/ruby_nacl/NaCl/curvecp/randommod.h +6 -0
  339. data/ext/ruby_nacl/NaCl/curvecp/safenonce.c +74 -0
  340. data/ext/ruby_nacl/NaCl/curvecp/safenonce.h +6 -0
  341. data/ext/ruby_nacl/NaCl/curvecp/savesync.c +24 -0
  342. data/ext/ruby_nacl/NaCl/curvecp/savesync.h +6 -0
  343. data/ext/ruby_nacl/NaCl/curvecp/socket.h +9 -0
  344. data/ext/ruby_nacl/NaCl/curvecp/socket_bind.c +15 -0
  345. data/ext/ruby_nacl/NaCl/curvecp/socket_recv.c +23 -0
  346. data/ext/ruby_nacl/NaCl/curvecp/socket_send.c +19 -0
  347. data/ext/ruby_nacl/NaCl/curvecp/socket_udp.c +36 -0
  348. data/ext/ruby_nacl/NaCl/curvecp/uint16_pack.c +7 -0
  349. data/ext/ruby_nacl/NaCl/curvecp/uint16_pack.h +8 -0
  350. data/ext/ruby_nacl/NaCl/curvecp/uint16_unpack.c +9 -0
  351. data/ext/ruby_nacl/NaCl/curvecp/uint16_unpack.h +8 -0
  352. data/ext/ruby_nacl/NaCl/curvecp/uint32_pack.c +9 -0
  353. data/ext/ruby_nacl/NaCl/curvecp/uint32_pack.h +8 -0
  354. data/ext/ruby_nacl/NaCl/curvecp/uint32_unpack.c +11 -0
  355. data/ext/ruby_nacl/NaCl/curvecp/uint32_unpack.h +8 -0
  356. data/ext/ruby_nacl/NaCl/curvecp/uint64_pack.c +13 -0
  357. data/ext/ruby_nacl/NaCl/curvecp/uint64_pack.h +8 -0
  358. data/ext/ruby_nacl/NaCl/curvecp/uint64_unpack.c +15 -0
  359. data/ext/ruby_nacl/NaCl/curvecp/uint64_unpack.h +8 -0
  360. data/ext/ruby_nacl/NaCl/curvecp/writeall.c +27 -0
  361. data/ext/ruby_nacl/NaCl/curvecp/writeall.h +6 -0
  362. data/ext/ruby_nacl/NaCl/do +468 -0
  363. data/ext/ruby_nacl/NaCl/inttypes/crypto_int16.c +3 -0
  364. data/ext/ruby_nacl/NaCl/inttypes/crypto_int32.c +3 -0
  365. data/ext/ruby_nacl/NaCl/inttypes/crypto_int64.c +3 -0
  366. data/ext/ruby_nacl/NaCl/inttypes/crypto_int8.c +3 -0
  367. data/ext/ruby_nacl/NaCl/inttypes/crypto_uint16.c +3 -0
  368. data/ext/ruby_nacl/NaCl/inttypes/crypto_uint32.c +3 -0
  369. data/ext/ruby_nacl/NaCl/inttypes/crypto_uint64.c +3 -0
  370. data/ext/ruby_nacl/NaCl/inttypes/crypto_uint8.c +3 -0
  371. data/ext/ruby_nacl/NaCl/inttypes/do +47 -0
  372. data/ext/ruby_nacl/NaCl/inttypes/signed.h +17 -0
  373. data/ext/ruby_nacl/NaCl/inttypes/unsigned.h +17 -0
  374. data/ext/ruby_nacl/NaCl/measure-anything.c +225 -0
  375. data/ext/ruby_nacl/NaCl/okcompilers/abiname.c +45 -0
  376. data/ext/ruby_nacl/NaCl/okcompilers/archivers +2 -0
  377. data/ext/ruby_nacl/NaCl/okcompilers/c +8 -0
  378. data/ext/ruby_nacl/NaCl/okcompilers/cpp +8 -0
  379. data/ext/ruby_nacl/NaCl/okcompilers/do +196 -0
  380. data/ext/ruby_nacl/NaCl/okcompilers/lib.c +29 -0
  381. data/ext/ruby_nacl/NaCl/okcompilers/lib.cpp +19 -0
  382. data/ext/ruby_nacl/NaCl/okcompilers/main.c +25 -0
  383. data/ext/ruby_nacl/NaCl/okcompilers/main.cpp +22 -0
  384. data/ext/ruby_nacl/NaCl/randombytes/devurandom.c +34 -0
  385. data/ext/ruby_nacl/NaCl/randombytes/devurandom.h +24 -0
  386. data/ext/ruby_nacl/NaCl/randombytes/do +43 -0
  387. data/ext/ruby_nacl/NaCl/randombytes/test.c +15 -0
  388. data/ext/ruby_nacl/NaCl/tests/auth.c +19 -0
  389. data/ext/ruby_nacl/NaCl/tests/auth.out +4 -0
  390. data/ext/ruby_nacl/NaCl/tests/auth2.c +34 -0
  391. data/ext/ruby_nacl/NaCl/tests/auth2.out +4 -0
  392. data/ext/ruby_nacl/NaCl/tests/auth3.c +34 -0
  393. data/ext/ruby_nacl/NaCl/tests/auth3.out +1 -0
  394. data/ext/ruby_nacl/NaCl/tests/auth4.cpp +44 -0
  395. data/ext/ruby_nacl/NaCl/tests/auth4.out +1 -0
  396. data/ext/ruby_nacl/NaCl/tests/auth5.c +36 -0
  397. data/ext/ruby_nacl/NaCl/tests/auth5.out +0 -0
  398. data/ext/ruby_nacl/NaCl/tests/auth6.cpp +46 -0
  399. data/ext/ruby_nacl/NaCl/tests/auth6.out +0 -0
  400. data/ext/ruby_nacl/NaCl/tests/box.c +63 -0
  401. data/ext/ruby_nacl/NaCl/tests/box.out +19 -0
  402. data/ext/ruby_nacl/NaCl/tests/box2.c +64 -0
  403. data/ext/ruby_nacl/NaCl/tests/box2.out +17 -0
  404. data/ext/ruby_nacl/NaCl/tests/box3.cpp +60 -0
  405. data/ext/ruby_nacl/NaCl/tests/box3.out +19 -0
  406. data/ext/ruby_nacl/NaCl/tests/box4.cpp +66 -0
  407. data/ext/ruby_nacl/NaCl/tests/box4.out +17 -0
  408. data/ext/ruby_nacl/NaCl/tests/box5.cpp +30 -0
  409. data/ext/ruby_nacl/NaCl/tests/box5.out +0 -0
  410. data/ext/ruby_nacl/NaCl/tests/box6.cpp +43 -0
  411. data/ext/ruby_nacl/NaCl/tests/box6.out +0 -0
  412. data/ext/ruby_nacl/NaCl/tests/box7.c +36 -0
  413. data/ext/ruby_nacl/NaCl/tests/box7.out +0 -0
  414. data/ext/ruby_nacl/NaCl/tests/box8.c +41 -0
  415. data/ext/ruby_nacl/NaCl/tests/box8.out +0 -0
  416. data/ext/ruby_nacl/NaCl/tests/core1.c +30 -0
  417. data/ext/ruby_nacl/NaCl/tests/core1.out +4 -0
  418. data/ext/ruby_nacl/NaCl/tests/core2.c +33 -0
  419. data/ext/ruby_nacl/NaCl/tests/core2.out +4 -0
  420. data/ext/ruby_nacl/NaCl/tests/core3.c +41 -0
  421. data/ext/ruby_nacl/NaCl/tests/core3.out +1 -0
  422. data/ext/ruby_nacl/NaCl/tests/core4.c +33 -0
  423. data/ext/ruby_nacl/NaCl/tests/core4.out +8 -0
  424. data/ext/ruby_nacl/NaCl/tests/core5.c +32 -0
  425. data/ext/ruby_nacl/NaCl/tests/core5.out +4 -0
  426. data/ext/ruby_nacl/NaCl/tests/core6.c +47 -0
  427. data/ext/ruby_nacl/NaCl/tests/core6.out +4 -0
  428. data/ext/ruby_nacl/NaCl/tests/hash.c +14 -0
  429. data/ext/ruby_nacl/NaCl/tests/hash.out +1 -0
  430. data/ext/ruby_nacl/NaCl/tests/hash2.cpp +18 -0
  431. data/ext/ruby_nacl/NaCl/tests/hash2.out +1 -0
  432. data/ext/ruby_nacl/NaCl/tests/hash3.c +14 -0
  433. data/ext/ruby_nacl/NaCl/tests/hash3.out +1 -0
  434. data/ext/ruby_nacl/NaCl/tests/hash4.cpp +18 -0
  435. data/ext/ruby_nacl/NaCl/tests/hash4.out +1 -0
  436. data/ext/ruby_nacl/NaCl/tests/onetimeauth.c +42 -0
  437. data/ext/ruby_nacl/NaCl/tests/onetimeauth.out +2 -0
  438. data/ext/ruby_nacl/NaCl/tests/onetimeauth2.c +40 -0
  439. data/ext/ruby_nacl/NaCl/tests/onetimeauth2.out +1 -0
  440. data/ext/ruby_nacl/NaCl/tests/onetimeauth5.cpp +46 -0
  441. data/ext/ruby_nacl/NaCl/tests/onetimeauth5.out +2 -0
  442. data/ext/ruby_nacl/NaCl/tests/onetimeauth6.cpp +50 -0
  443. data/ext/ruby_nacl/NaCl/tests/onetimeauth6.out +1 -0
  444. data/ext/ruby_nacl/NaCl/tests/onetimeauth7.c +36 -0
  445. data/ext/ruby_nacl/NaCl/tests/onetimeauth7.out +0 -0
  446. data/ext/ruby_nacl/NaCl/tests/onetimeauth8.cpp +46 -0
  447. data/ext/ruby_nacl/NaCl/tests/onetimeauth8.out +0 -0
  448. data/ext/ruby_nacl/NaCl/tests/scalarmult.c +23 -0
  449. data/ext/ruby_nacl/NaCl/tests/scalarmult.out +4 -0
  450. data/ext/ruby_nacl/NaCl/tests/scalarmult2.c +23 -0
  451. data/ext/ruby_nacl/NaCl/tests/scalarmult2.out +4 -0
  452. data/ext/ruby_nacl/NaCl/tests/scalarmult3.cpp +31 -0
  453. data/ext/ruby_nacl/NaCl/tests/scalarmult3.out +4 -0
  454. data/ext/ruby_nacl/NaCl/tests/scalarmult4.cpp +31 -0
  455. data/ext/ruby_nacl/NaCl/tests/scalarmult4.out +4 -0
  456. data/ext/ruby_nacl/NaCl/tests/scalarmult5.c +30 -0
  457. data/ext/ruby_nacl/NaCl/tests/scalarmult5.out +4 -0
  458. data/ext/ruby_nacl/NaCl/tests/scalarmult6.c +30 -0
  459. data/ext/ruby_nacl/NaCl/tests/scalarmult6.out +4 -0
  460. data/ext/ruby_nacl/NaCl/tests/scalarmult7.cpp +32 -0
  461. data/ext/ruby_nacl/NaCl/tests/scalarmult7.out +4 -0
  462. data/ext/ruby_nacl/NaCl/tests/secretbox.c +56 -0
  463. data/ext/ruby_nacl/NaCl/tests/secretbox.out +19 -0
  464. data/ext/ruby_nacl/NaCl/tests/secretbox2.c +57 -0
  465. data/ext/ruby_nacl/NaCl/tests/secretbox2.out +17 -0
  466. data/ext/ruby_nacl/NaCl/tests/secretbox3.cpp +52 -0
  467. data/ext/ruby_nacl/NaCl/tests/secretbox3.out +19 -0
  468. data/ext/ruby_nacl/NaCl/tests/secretbox4.cpp +54 -0
  469. data/ext/ruby_nacl/NaCl/tests/secretbox4.out +17 -0
  470. data/ext/ruby_nacl/NaCl/tests/secretbox5.cpp +29 -0
  471. data/ext/ruby_nacl/NaCl/tests/secretbox5.out +0 -0
  472. data/ext/ruby_nacl/NaCl/tests/secretbox6.cpp +42 -0
  473. data/ext/ruby_nacl/NaCl/tests/secretbox6.out +0 -0
  474. data/ext/ruby_nacl/NaCl/tests/secretbox7.c +32 -0
  475. data/ext/ruby_nacl/NaCl/tests/secretbox7.out +0 -0
  476. data/ext/ruby_nacl/NaCl/tests/secretbox8.c +37 -0
  477. data/ext/ruby_nacl/NaCl/tests/secretbox8.out +0 -0
  478. data/ext/ruby_nacl/NaCl/tests/stream.c +29 -0
  479. data/ext/ruby_nacl/NaCl/tests/stream.out +1 -0
  480. data/ext/ruby_nacl/NaCl/tests/stream2.c +27 -0
  481. data/ext/ruby_nacl/NaCl/tests/stream2.out +1 -0
  482. data/ext/ruby_nacl/NaCl/tests/stream3.c +28 -0
  483. data/ext/ruby_nacl/NaCl/tests/stream3.out +4 -0
  484. data/ext/ruby_nacl/NaCl/tests/stream4.c +53 -0
  485. data/ext/ruby_nacl/NaCl/tests/stream4.out +17 -0
  486. data/ext/ruby_nacl/NaCl/tests/stream5.cpp +29 -0
  487. data/ext/ruby_nacl/NaCl/tests/stream5.out +1 -0
  488. data/ext/ruby_nacl/NaCl/tests/stream6.cpp +27 -0
  489. data/ext/ruby_nacl/NaCl/tests/stream6.out +1 -0
  490. data/ext/ruby_nacl/NaCl/tests/stream7.cpp +30 -0
  491. data/ext/ruby_nacl/NaCl/tests/stream7.out +4 -0
  492. data/ext/ruby_nacl/NaCl/tests/stream8.cpp +56 -0
  493. data/ext/ruby_nacl/NaCl/tests/stream8.out +17 -0
  494. data/ext/ruby_nacl/NaCl/try-anything.c +173 -0
  495. data/ext/ruby_nacl/NaCl/version +1 -0
  496. data/ext/ruby_nacl/extconf.rb +18 -0
  497. data/ext/ruby_nacl/ruby_nacl.cpp +147 -0
  498. data/ext/ruby_nacl/ruby_nacl.h +49 -0
  499. metadata +554 -0
@@ -0,0 +1,22 @@
1
+ #include <string>
2
+ using std::string;
3
+ #include "crypto_secretbox.h"
4
+
5
+ string crypto_secretbox_open(const string &c,const string &n,const string &k)
6
+ {
7
+ if (k.size() != crypto_secretbox_KEYBYTES) throw "incorrect key length";
8
+ if (n.size() != crypto_secretbox_NONCEBYTES) throw "incorrect nonce length";
9
+ size_t clen = c.size() + crypto_secretbox_BOXZEROBYTES;
10
+ unsigned char cpad[clen];
11
+ for (int i = 0;i < crypto_secretbox_BOXZEROBYTES;++i) cpad[i] = 0;
12
+ for (int i = crypto_secretbox_BOXZEROBYTES;i < clen;++i) cpad[i] = c[i - crypto_secretbox_BOXZEROBYTES];
13
+ unsigned char mpad[clen];
14
+ if (crypto_secretbox_open(mpad,cpad,clen,(const unsigned char *) n.c_str(),(const unsigned char *) k.c_str()) != 0)
15
+ throw "ciphertext fails verification";
16
+ if (clen < crypto_secretbox_ZEROBYTES)
17
+ throw "ciphertext too short"; // should have been caught by _open
18
+ return string(
19
+ (char *) mpad + crypto_secretbox_ZEROBYTES,
20
+ clen - crypto_secretbox_ZEROBYTES
21
+ );
22
+ }
@@ -0,0 +1 @@
1
+ df372f95dd87381b7c9ceb6f340ccaa03d19bed5d9e4ab004d99d847675a9658
@@ -0,0 +1,4 @@
1
+ #define CRYPTO_KEYBYTES 32
2
+ #define CRYPTO_NONCEBYTES 24
3
+ #define CRYPTO_ZEROBYTES 32
4
+ #define CRYPTO_BOXZEROBYTES 16
@@ -0,0 +1,35 @@
1
+ #include "crypto_onetimeauth_poly1305.h"
2
+ #include "crypto_stream_xsalsa20.h"
3
+ #include "crypto_secretbox.h"
4
+
5
+ int crypto_secretbox(
6
+ unsigned char *c,
7
+ const unsigned char *m,unsigned long long mlen,
8
+ const unsigned char *n,
9
+ const unsigned char *k
10
+ )
11
+ {
12
+ int i;
13
+ if (mlen < 32) return -1;
14
+ crypto_stream_xsalsa20_xor(c,m,mlen,n,k);
15
+ crypto_onetimeauth_poly1305(c + 16,c + 32,mlen - 32,c);
16
+ for (i = 0;i < 16;++i) c[i] = 0;
17
+ return 0;
18
+ }
19
+
20
+ int crypto_secretbox_open(
21
+ unsigned char *m,
22
+ const unsigned char *c,unsigned long long clen,
23
+ const unsigned char *n,
24
+ const unsigned char *k
25
+ )
26
+ {
27
+ int i;
28
+ unsigned char subkey[32];
29
+ if (clen < 32) return -1;
30
+ crypto_stream_xsalsa20(subkey,32,n,k);
31
+ if (crypto_onetimeauth_poly1305_verify(c + 16,c + 32,clen - 32,subkey) != 0) return -1;
32
+ crypto_stream_xsalsa20_xor(m,c,clen,n,k);
33
+ for (i = 0;i < 32;++i) m[i] = 0;
34
+ return 0;
35
+ }
@@ -0,0 +1,3 @@
1
+ #define CRYPTO_SECRETKEYBYTES 64
2
+ #define CRYPTO_PUBLICKEYBYTES 32
3
+ #define CRYPTO_BYTES 64
@@ -0,0 +1,345 @@
1
+ #include "fe25519.h"
2
+
3
+ #define WINDOWSIZE 4 /* Should be 1,2, or 4 */
4
+ #define WINDOWMASK ((1<<WINDOWSIZE)-1)
5
+
6
+ static void reduce_add_sub(fe25519 *r)
7
+ {
8
+ crypto_uint32 t;
9
+ int i,rep;
10
+
11
+ for(rep=0;rep<4;rep++)
12
+ {
13
+ t = r->v[31] >> 7;
14
+ r->v[31] &= 127;
15
+ t *= 19;
16
+ r->v[0] += t;
17
+ for(i=0;i<31;i++)
18
+ {
19
+ t = r->v[i] >> 8;
20
+ r->v[i+1] += t;
21
+ r->v[i] &= 255;
22
+ }
23
+ }
24
+ }
25
+
26
+ static void reduce_mul(fe25519 *r)
27
+ {
28
+ crypto_uint32 t;
29
+ int i,rep;
30
+
31
+ for(rep=0;rep<2;rep++)
32
+ {
33
+ t = r->v[31] >> 7;
34
+ r->v[31] &= 127;
35
+ t *= 19;
36
+ r->v[0] += t;
37
+ for(i=0;i<31;i++)
38
+ {
39
+ t = r->v[i] >> 8;
40
+ r->v[i+1] += t;
41
+ r->v[i] &= 255;
42
+ }
43
+ }
44
+ }
45
+
46
+ /* reduction modulo 2^255-19 */
47
+ static void freeze(fe25519 *r)
48
+ {
49
+ int i;
50
+ unsigned int m = (r->v[31] == 127);
51
+ for(i=30;i>1;i--)
52
+ m *= (r->v[i] == 255);
53
+ m *= (r->v[0] >= 237);
54
+
55
+ r->v[31] -= m*127;
56
+ for(i=30;i>0;i--)
57
+ r->v[i] -= m*255;
58
+ r->v[0] -= m*237;
59
+ }
60
+
61
+ /*freeze input before calling isone*/
62
+ static int isone(const fe25519 *x)
63
+ {
64
+ int i;
65
+ int r = (x->v[0] == 1);
66
+ for(i=1;i<32;i++)
67
+ r *= (x->v[i] == 0);
68
+ return r;
69
+ }
70
+
71
+ /*freeze input before calling iszero*/
72
+ static int iszero(const fe25519 *x)
73
+ {
74
+ int i;
75
+ int r = (x->v[0] == 0);
76
+ for(i=1;i<32;i++)
77
+ r *= (x->v[i] == 0);
78
+ return r;
79
+ }
80
+
81
+
82
+ static int issquare(const fe25519 *x)
83
+ {
84
+ unsigned char e[32] = {0xf6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f}; /* (p-1)/2 */
85
+ fe25519 t;
86
+
87
+ fe25519_pow(&t,x,e);
88
+ freeze(&t);
89
+ return isone(&t) || iszero(&t);
90
+ }
91
+
92
+ void fe25519_unpack(fe25519 *r, const unsigned char x[32])
93
+ {
94
+ int i;
95
+ for(i=0;i<32;i++) r->v[i] = x[i];
96
+ r->v[31] &= 127;
97
+ }
98
+
99
+ /* Assumes input x being reduced mod 2^255 */
100
+ void fe25519_pack(unsigned char r[32], const fe25519 *x)
101
+ {
102
+ int i;
103
+ for(i=0;i<32;i++)
104
+ r[i] = x->v[i];
105
+
106
+ /* freeze byte array */
107
+ unsigned int m = (r[31] == 127); /* XXX: some compilers might use branches; fix */
108
+ for(i=30;i>1;i--)
109
+ m *= (r[i] == 255);
110
+ m *= (r[0] >= 237);
111
+ r[31] -= m*127;
112
+ for(i=30;i>0;i--)
113
+ r[i] -= m*255;
114
+ r[0] -= m*237;
115
+ }
116
+
117
+ void fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b)
118
+ {
119
+ unsigned char nb = 1-b;
120
+ int i;
121
+ for(i=0;i<32;i++) r->v[i] = nb * r->v[i] + b * x->v[i];
122
+ }
123
+
124
+ unsigned char fe25519_getparity(const fe25519 *x)
125
+ {
126
+ fe25519 t;
127
+ int i;
128
+ for(i=0;i<32;i++) t.v[i] = x->v[i];
129
+ freeze(&t);
130
+ return t.v[0] & 1;
131
+ }
132
+
133
+ void fe25519_setone(fe25519 *r)
134
+ {
135
+ int i;
136
+ r->v[0] = 1;
137
+ for(i=1;i<32;i++) r->v[i]=0;
138
+ }
139
+
140
+ void fe25519_setzero(fe25519 *r)
141
+ {
142
+ int i;
143
+ for(i=0;i<32;i++) r->v[i]=0;
144
+ }
145
+
146
+ void fe25519_neg(fe25519 *r, const fe25519 *x)
147
+ {
148
+ fe25519 t;
149
+ int i;
150
+ for(i=0;i<32;i++) t.v[i]=x->v[i];
151
+ fe25519_setzero(r);
152
+ fe25519_sub(r, r, &t);
153
+ }
154
+
155
+ void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y)
156
+ {
157
+ int i;
158
+ for(i=0;i<32;i++) r->v[i] = x->v[i] + y->v[i];
159
+ reduce_add_sub(r);
160
+ }
161
+
162
+ void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y)
163
+ {
164
+ int i;
165
+ crypto_uint32 t[32];
166
+ t[0] = x->v[0] + 0x1da;
167
+ t[31] = x->v[31] + 0xfe;
168
+ for(i=1;i<31;i++) t[i] = x->v[i] + 0x1fe;
169
+ for(i=0;i<32;i++) r->v[i] = t[i] - y->v[i];
170
+ reduce_add_sub(r);
171
+ }
172
+
173
+ void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y)
174
+ {
175
+ int i,j;
176
+ crypto_uint32 t[63];
177
+ for(i=0;i<63;i++)t[i] = 0;
178
+
179
+ for(i=0;i<32;i++)
180
+ for(j=0;j<32;j++)
181
+ t[i+j] += x->v[i] * y->v[j];
182
+
183
+ for(i=32;i<63;i++)
184
+ r->v[i-32] = t[i-32] + 38*t[i];
185
+ r->v[31] = t[31]; /* result now in r[0]...r[31] */
186
+
187
+ reduce_mul(r);
188
+ }
189
+
190
+ void fe25519_square(fe25519 *r, const fe25519 *x)
191
+ {
192
+ fe25519_mul(r, x, x);
193
+ }
194
+
195
+ /*XXX: Make constant time! */
196
+ void fe25519_pow(fe25519 *r, const fe25519 *x, const unsigned char *e)
197
+ {
198
+ /*
199
+ fe25519 g;
200
+ fe25519_setone(&g);
201
+ int i;
202
+ unsigned char j;
203
+ for(i=32;i>0;i--)
204
+ {
205
+ for(j=128;j>0;j>>=1)
206
+ {
207
+ fe25519_square(&g,&g);
208
+ if(e[i-1] & j)
209
+ fe25519_mul(&g,&g,x);
210
+ }
211
+ }
212
+ for(i=0;i<32;i++) r->v[i] = g.v[i];
213
+ */
214
+ fe25519 g;
215
+ fe25519_setone(&g);
216
+ int i,j,k;
217
+ fe25519 pre[(1 << WINDOWSIZE)];
218
+ fe25519 t;
219
+ unsigned char w;
220
+
221
+ // Precomputation
222
+ fe25519_setone(pre);
223
+ pre[1] = *x;
224
+ for(i=2;i<(1<<WINDOWSIZE);i+=2)
225
+ {
226
+ fe25519_square(pre+i, pre+i/2);
227
+ fe25519_mul(pre+i+1, pre+i, pre+1);
228
+ }
229
+
230
+ // Fixed-window scalar multiplication
231
+ for(i=32;i>0;i--)
232
+ {
233
+ for(j=8-WINDOWSIZE;j>=0;j-=WINDOWSIZE)
234
+ {
235
+ for(k=0;k<WINDOWSIZE;k++)
236
+ fe25519_square(&g, &g);
237
+ // Cache-timing resistant loading of precomputed value:
238
+ w = (e[i-1]>>j) & WINDOWMASK;
239
+ t = pre[0];
240
+ for(k=1;k<(1<<WINDOWSIZE);k++)
241
+ fe25519_cmov(&t, &pre[k], k==w);
242
+ fe25519_mul(&g, &g, &t);
243
+ }
244
+ }
245
+ *r = g;
246
+ }
247
+
248
+ /* Return 0 on success, 1 otherwise */
249
+ int fe25519_sqrt_vartime(fe25519 *r, const fe25519 *x, unsigned char parity)
250
+ {
251
+ /* See HAC, Alg. 3.37 */
252
+ if (!issquare(x)) return -1;
253
+ unsigned char e[32] = {0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f}; /* (p-1)/4 */
254
+ unsigned char e2[32] = {0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f}; /* (p+3)/8 */
255
+ unsigned char e3[32] = {0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f}; /* (p-5)/8 */
256
+ fe25519 p = {{0}};
257
+ fe25519 d;
258
+ int i;
259
+ fe25519_pow(&d,x,e);
260
+ freeze(&d);
261
+ if(isone(&d))
262
+ fe25519_pow(r,x,e2);
263
+ else
264
+ {
265
+ for(i=0;i<32;i++)
266
+ d.v[i] = 4*x->v[i];
267
+ fe25519_pow(&d,&d,e3);
268
+ for(i=0;i<32;i++)
269
+ r->v[i] = 2*x->v[i];
270
+ fe25519_mul(r,r,&d);
271
+ }
272
+ freeze(r);
273
+ if((r->v[0] & 1) != (parity & 1))
274
+ {
275
+ fe25519_sub(r,&p,r);
276
+ }
277
+ return 0;
278
+ }
279
+
280
+ void fe25519_invert(fe25519 *r, const fe25519 *x)
281
+ {
282
+ fe25519 z2;
283
+ fe25519 z9;
284
+ fe25519 z11;
285
+ fe25519 z2_5_0;
286
+ fe25519 z2_10_0;
287
+ fe25519 z2_20_0;
288
+ fe25519 z2_50_0;
289
+ fe25519 z2_100_0;
290
+ fe25519 t0;
291
+ fe25519 t1;
292
+ int i;
293
+
294
+ /* 2 */ fe25519_square(&z2,x);
295
+ /* 4 */ fe25519_square(&t1,&z2);
296
+ /* 8 */ fe25519_square(&t0,&t1);
297
+ /* 9 */ fe25519_mul(&z9,&t0,x);
298
+ /* 11 */ fe25519_mul(&z11,&z9,&z2);
299
+ /* 22 */ fe25519_square(&t0,&z11);
300
+ /* 2^5 - 2^0 = 31 */ fe25519_mul(&z2_5_0,&t0,&z9);
301
+
302
+ /* 2^6 - 2^1 */ fe25519_square(&t0,&z2_5_0);
303
+ /* 2^7 - 2^2 */ fe25519_square(&t1,&t0);
304
+ /* 2^8 - 2^3 */ fe25519_square(&t0,&t1);
305
+ /* 2^9 - 2^4 */ fe25519_square(&t1,&t0);
306
+ /* 2^10 - 2^5 */ fe25519_square(&t0,&t1);
307
+ /* 2^10 - 2^0 */ fe25519_mul(&z2_10_0,&t0,&z2_5_0);
308
+
309
+ /* 2^11 - 2^1 */ fe25519_square(&t0,&z2_10_0);
310
+ /* 2^12 - 2^2 */ fe25519_square(&t1,&t0);
311
+ /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); }
312
+ /* 2^20 - 2^0 */ fe25519_mul(&z2_20_0,&t1,&z2_10_0);
313
+
314
+ /* 2^21 - 2^1 */ fe25519_square(&t0,&z2_20_0);
315
+ /* 2^22 - 2^2 */ fe25519_square(&t1,&t0);
316
+ /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); }
317
+ /* 2^40 - 2^0 */ fe25519_mul(&t0,&t1,&z2_20_0);
318
+
319
+ /* 2^41 - 2^1 */ fe25519_square(&t1,&t0);
320
+ /* 2^42 - 2^2 */ fe25519_square(&t0,&t1);
321
+ /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fe25519_square(&t1,&t0); fe25519_square(&t0,&t1); }
322
+ /* 2^50 - 2^0 */ fe25519_mul(&z2_50_0,&t0,&z2_10_0);
323
+
324
+ /* 2^51 - 2^1 */ fe25519_square(&t0,&z2_50_0);
325
+ /* 2^52 - 2^2 */ fe25519_square(&t1,&t0);
326
+ /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); }
327
+ /* 2^100 - 2^0 */ fe25519_mul(&z2_100_0,&t1,&z2_50_0);
328
+
329
+ /* 2^101 - 2^1 */ fe25519_square(&t1,&z2_100_0);
330
+ /* 2^102 - 2^2 */ fe25519_square(&t0,&t1);
331
+ /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fe25519_square(&t1,&t0); fe25519_square(&t0,&t1); }
332
+ /* 2^200 - 2^0 */ fe25519_mul(&t1,&t0,&z2_100_0);
333
+
334
+ /* 2^201 - 2^1 */ fe25519_square(&t0,&t1);
335
+ /* 2^202 - 2^2 */ fe25519_square(&t1,&t0);
336
+ /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fe25519_square(&t0,&t1); fe25519_square(&t1,&t0); }
337
+ /* 2^250 - 2^0 */ fe25519_mul(&t0,&t1,&z2_50_0);
338
+
339
+ /* 2^251 - 2^1 */ fe25519_square(&t1,&t0);
340
+ /* 2^252 - 2^2 */ fe25519_square(&t0,&t1);
341
+ /* 2^253 - 2^3 */ fe25519_square(&t1,&t0);
342
+ /* 2^254 - 2^4 */ fe25519_square(&t0,&t1);
343
+ /* 2^255 - 2^5 */ fe25519_square(&t1,&t0);
344
+ /* 2^255 - 21 */ fe25519_mul(r,&t1,&z11);
345
+ }
@@ -0,0 +1,54 @@
1
+ #ifndef FE25519_H
2
+ #define FE25519_H
3
+
4
+ #define fe25519 crypto_sign_edwards25519sha512batch_fe25519
5
+ #define fe25519_unpack crypto_sign_edwards25519sha512batch_fe25519_unpack
6
+ #define fe25519_pack crypto_sign_edwards25519sha512batch_fe25519_pack
7
+ #define fe25519_cmov crypto_sign_edwards25519sha512batch_fe25519_cmov
8
+ #define fe25519_setone crypto_sign_edwards25519sha512batch_fe25519_setone
9
+ #define fe25519_setzero crypto_sign_edwards25519sha512batch_fe25519_setzero
10
+ #define fe25519_neg crypto_sign_edwards25519sha512batch_fe25519_neg
11
+ #define fe25519_getparity crypto_sign_edwards25519sha512batch_fe25519_getparity
12
+ #define fe25519_add crypto_sign_edwards25519sha512batch_fe25519_add
13
+ #define fe25519_sub crypto_sign_edwards25519sha512batch_fe25519_sub
14
+ #define fe25519_mul crypto_sign_edwards25519sha512batch_fe25519_mul
15
+ #define fe25519_square crypto_sign_edwards25519sha512batch_fe25519_square
16
+ #define fe25519_pow crypto_sign_edwards25519sha512batch_fe25519_pow
17
+ #define fe25519_sqrt_vartime crypto_sign_edwards25519sha512batch_fe25519_sqrt_vartime
18
+ #define fe25519_invert crypto_sign_edwards25519sha512batch_fe25519_invert
19
+
20
+ #include "crypto_uint32.h"
21
+
22
+ typedef struct {
23
+ crypto_uint32 v[32];
24
+ } fe25519;
25
+
26
+ void fe25519_unpack(fe25519 *r, const unsigned char x[32]);
27
+
28
+ void fe25519_pack(unsigned char r[32], const fe25519 *x);
29
+
30
+ void fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b);
31
+
32
+ void fe25519_setone(fe25519 *r);
33
+
34
+ void fe25519_setzero(fe25519 *r);
35
+
36
+ void fe25519_neg(fe25519 *r, const fe25519 *x);
37
+
38
+ unsigned char fe25519_getparity(const fe25519 *x);
39
+
40
+ void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y);
41
+
42
+ void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y);
43
+
44
+ void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y);
45
+
46
+ void fe25519_square(fe25519 *r, const fe25519 *x);
47
+
48
+ void fe25519_pow(fe25519 *r, const fe25519 *x, const unsigned char *e);
49
+
50
+ int fe25519_sqrt_vartime(fe25519 *r, const fe25519 *x, unsigned char parity);
51
+
52
+ void fe25519_invert(fe25519 *r, const fe25519 *x);
53
+
54
+ #endif
@@ -0,0 +1,227 @@
1
+ #include "fe25519.h"
2
+ #include "sc25519.h"
3
+ #include "ge25519.h"
4
+
5
+ /*
6
+ * Arithmetic on the twisted Edwards curve -x^2 + y^2 = 1 + dx^2y^2
7
+ * with d = -(121665/121666) = 37095705934669439343138083508754565189542113879843219016388785533085940283555
8
+ * Base point: (15112221349535400772501151409588531511454012693041857206046113283949847762202,46316835694926478169428394003475163141307993866256225615783033603165251855960);
9
+ */
10
+
11
+ typedef struct
12
+ {
13
+ fe25519 x;
14
+ fe25519 z;
15
+ fe25519 y;
16
+ fe25519 t;
17
+ } ge25519_p1p1;
18
+
19
+ typedef struct
20
+ {
21
+ fe25519 x;
22
+ fe25519 y;
23
+ fe25519 z;
24
+ } ge25519_p2;
25
+
26
+ #define ge25519_p3 ge25519
27
+
28
+ /* Windowsize for fixed-window scalar multiplication */
29
+ #define WINDOWSIZE 2 /* Should be 1,2, or 4 */
30
+ #define WINDOWMASK ((1<<WINDOWSIZE)-1)
31
+
32
+ /* packed parameter d in the Edwards curve equation */
33
+ static const unsigned char ecd[32] = {0xA3, 0x78, 0x59, 0x13, 0xCA, 0x4D, 0xEB, 0x75, 0xAB, 0xD8, 0x41, 0x41, 0x4D, 0x0A, 0x70, 0x00,
34
+ 0x98, 0xE8, 0x79, 0x77, 0x79, 0x40, 0xC7, 0x8C, 0x73, 0xFE, 0x6F, 0x2B, 0xEE, 0x6C, 0x03, 0x52};
35
+
36
+ /* Packed coordinates of the base point */
37
+ static const unsigned char ge25519_base_x[32] = {0x1A, 0xD5, 0x25, 0x8F, 0x60, 0x2D, 0x56, 0xC9, 0xB2, 0xA7, 0x25, 0x95, 0x60, 0xC7, 0x2C, 0x69,
38
+ 0x5C, 0xDC, 0xD6, 0xFD, 0x31, 0xE2, 0xA4, 0xC0, 0xFE, 0x53, 0x6E, 0xCD, 0xD3, 0x36, 0x69, 0x21};
39
+ static const unsigned char ge25519_base_y[32] = {0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
40
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66};
41
+ static const unsigned char ge25519_base_z[32] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
42
+ static const unsigned char ge25519_base_t[32] = {0xA3, 0xDD, 0xB7, 0xA5, 0xB3, 0x8A, 0xDE, 0x6D, 0xF5, 0x52, 0x51, 0x77, 0x80, 0x9F, 0xF0, 0x20,
43
+ 0x7D, 0xE3, 0xAB, 0x64, 0x8E, 0x4E, 0xEA, 0x66, 0x65, 0x76, 0x8B, 0xD7, 0x0F, 0x5F, 0x87, 0x67};
44
+
45
+ /* Packed coordinates of the neutral element */
46
+ static const unsigned char ge25519_neutral_x[32] = {0};
47
+ static const unsigned char ge25519_neutral_y[32] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
48
+ static const unsigned char ge25519_neutral_z[32] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
49
+ static const unsigned char ge25519_neutral_t[32] = {0};
50
+
51
+ static void p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p)
52
+ {
53
+ fe25519_mul(&r->x, &p->x, &p->t);
54
+ fe25519_mul(&r->y, &p->y, &p->z);
55
+ fe25519_mul(&r->z, &p->z, &p->t);
56
+ }
57
+
58
+ static void p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p)
59
+ {
60
+ p1p1_to_p2((ge25519_p2 *)r, p);
61
+ fe25519_mul(&r->t, &p->x, &p->y);
62
+ }
63
+
64
+ /* Constant-time version of: if(b) r = p */
65
+ static void cmov_p3(ge25519_p3 *r, const ge25519_p3 *p, unsigned char b)
66
+ {
67
+ fe25519_cmov(&r->x, &p->x, b);
68
+ fe25519_cmov(&r->y, &p->y, b);
69
+ fe25519_cmov(&r->z, &p->z, b);
70
+ fe25519_cmov(&r->t, &p->t, b);
71
+ }
72
+
73
+ /* See http://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#doubling-dbl-2008-hwcd */
74
+ static void dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p)
75
+ {
76
+ fe25519 a,b,c,d;
77
+ fe25519_square(&a, &p->x);
78
+ fe25519_square(&b, &p->y);
79
+ fe25519_square(&c, &p->z);
80
+ fe25519_add(&c, &c, &c);
81
+ fe25519_neg(&d, &a);
82
+
83
+ fe25519_add(&r->x, &p->x, &p->y);
84
+ fe25519_square(&r->x, &r->x);
85
+ fe25519_sub(&r->x, &r->x, &a);
86
+ fe25519_sub(&r->x, &r->x, &b);
87
+ fe25519_add(&r->z, &d, &b);
88
+ fe25519_sub(&r->t, &r->z, &c);
89
+ fe25519_sub(&r->y, &d, &b);
90
+ }
91
+
92
+ static void add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q)
93
+ {
94
+ fe25519 a, b, c, d, t, fd;
95
+ fe25519_unpack(&fd, ecd);
96
+
97
+ fe25519_sub(&a, &p->y, &p->x); // A = (Y1-X1)*(Y2-X2)
98
+ fe25519_sub(&t, &q->y, &q->x);
99
+ fe25519_mul(&a, &a, &t);
100
+ fe25519_add(&b, &p->x, &p->y); // B = (Y1+X1)*(Y2+X2)
101
+ fe25519_add(&t, &q->x, &q->y);
102
+ fe25519_mul(&b, &b, &t);
103
+ fe25519_mul(&c, &p->t, &q->t); //C = T1*k*T2
104
+ fe25519_mul(&c, &c, &fd);
105
+ fe25519_add(&c, &c, &c); //XXX: Can save this addition by precomputing 2*ecd
106
+ fe25519_mul(&d, &p->z, &q->z); //D = Z1*2*Z2
107
+ fe25519_add(&d, &d, &d);
108
+ fe25519_sub(&r->x, &b, &a); // E = B-A
109
+ fe25519_sub(&r->t, &d, &c); // F = D-C
110
+ fe25519_add(&r->z, &d, &c); // G = D+C
111
+ fe25519_add(&r->y, &b, &a); // H = B+A
112
+ }
113
+
114
+ /* ********************************************************************
115
+ * EXPORTED FUNCTIONS
116
+ ******************************************************************** */
117
+
118
+ /* return 0 on success, -1 otherwise */
119
+ int ge25519_unpack_vartime(ge25519_p3 *r, const unsigned char p[32])
120
+ {
121
+ int ret;
122
+ fe25519 t, fd;
123
+ fe25519_setone(&r->z);
124
+ fe25519_unpack(&fd, ecd);
125
+ unsigned char par = p[31] >> 7;
126
+ fe25519_unpack(&r->y, p);
127
+ fe25519_square(&r->x, &r->y);
128
+ fe25519_mul(&t, &r->x, &fd);
129
+ fe25519_sub(&r->x, &r->x, &r->z);
130
+ fe25519_add(&t, &r->z, &t);
131
+ fe25519_invert(&t, &t);
132
+ fe25519_mul(&r->x, &r->x, &t);
133
+ ret = fe25519_sqrt_vartime(&r->x, &r->x, par);
134
+ fe25519_mul(&r->t, &r->x, &r->y);
135
+ return ret;
136
+ }
137
+
138
+ void ge25519_pack(unsigned char r[32], const ge25519_p3 *p)
139
+ {
140
+ fe25519 tx, ty, zi;
141
+ fe25519_invert(&zi, &p->z);
142
+ fe25519_mul(&tx, &p->x, &zi);
143
+ fe25519_mul(&ty, &p->y, &zi);
144
+ fe25519_pack(r, &ty);
145
+ r[31] ^= fe25519_getparity(&tx) << 7;
146
+ }
147
+
148
+ void ge25519_add(ge25519_p3 *r, const ge25519_p3 *p, const ge25519_p3 *q)
149
+ {
150
+ ge25519_p1p1 grp1p1;
151
+ add_p1p1(&grp1p1, p, q);
152
+ p1p1_to_p3(r, &grp1p1);
153
+ }
154
+
155
+ void ge25519_double(ge25519_p3 *r, const ge25519_p3 *p)
156
+ {
157
+ ge25519_p1p1 grp1p1;
158
+ dbl_p1p1(&grp1p1, (ge25519_p2 *)p);
159
+ p1p1_to_p3(r, &grp1p1);
160
+ }
161
+
162
+ void ge25519_scalarmult(ge25519_p3 *r, const ge25519_p3 *p, const sc25519 *s)
163
+ {
164
+ int i,j,k;
165
+ ge25519_p3 g;
166
+ fe25519_unpack(&g.x, ge25519_neutral_x);
167
+ fe25519_unpack(&g.y, ge25519_neutral_y);
168
+ fe25519_unpack(&g.z, ge25519_neutral_z);
169
+ fe25519_unpack(&g.t, ge25519_neutral_t);
170
+
171
+ ge25519_p3 pre[(1 << WINDOWSIZE)];
172
+ ge25519_p3 t;
173
+ ge25519_p1p1 tp1p1;
174
+ unsigned char w;
175
+ unsigned char sb[32];
176
+ sc25519_to32bytes(sb, s);
177
+
178
+ // Precomputation
179
+ pre[0] = g;
180
+ pre[1] = *p;
181
+ for(i=2;i<(1<<WINDOWSIZE);i+=2)
182
+ {
183
+ dbl_p1p1(&tp1p1, (ge25519_p2 *)(pre+i/2));
184
+ p1p1_to_p3(pre+i, &tp1p1);
185
+ add_p1p1(&tp1p1, pre+i, pre+1);
186
+ p1p1_to_p3(pre+i+1, &tp1p1);
187
+ }
188
+
189
+ // Fixed-window scalar multiplication
190
+ for(i=32;i>0;i--)
191
+ {
192
+ for(j=8-WINDOWSIZE;j>=0;j-=WINDOWSIZE)
193
+ {
194
+ for(k=0;k<WINDOWSIZE-1;k++)
195
+ {
196
+ dbl_p1p1(&tp1p1, (ge25519_p2 *)&g);
197
+ p1p1_to_p2((ge25519_p2 *)&g, &tp1p1);
198
+ }
199
+ dbl_p1p1(&tp1p1, (ge25519_p2 *)&g);
200
+ p1p1_to_p3(&g, &tp1p1);
201
+ // Cache-timing resistant loading of precomputed value:
202
+ w = (sb[i-1]>>j) & WINDOWMASK;
203
+ t = pre[0];
204
+ for(k=1;k<(1<<WINDOWSIZE);k++)
205
+ cmov_p3(&t, &pre[k], k==w);
206
+
207
+ add_p1p1(&tp1p1, &g, &t);
208
+ if(j != 0) p1p1_to_p2((ge25519_p2 *)&g, &tp1p1);
209
+ else p1p1_to_p3(&g, &tp1p1); /* convert to p3 representation at the end */
210
+ }
211
+ }
212
+ r->x = g.x;
213
+ r->y = g.y;
214
+ r->z = g.z;
215
+ r->t = g.t;
216
+ }
217
+
218
+ void ge25519_scalarmult_base(ge25519_p3 *r, const sc25519 *s)
219
+ {
220
+ /* XXX: Better algorithm for known-base-point scalar multiplication */
221
+ ge25519_p3 t;
222
+ fe25519_unpack(&t.x, ge25519_base_x);
223
+ fe25519_unpack(&t.y, ge25519_base_y);
224
+ fe25519_unpack(&t.z, ge25519_base_z);
225
+ fe25519_unpack(&t.t, ge25519_base_t);
226
+ ge25519_scalarmult(r, &t, s);
227
+ }