ring-native 0.0.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 (261) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/Gemfile +3 -0
  4. data/README.md +22 -0
  5. data/Rakefile +1 -0
  6. data/ext/ring/extconf.rb +29 -0
  7. data/lib/ring/native.rb +8 -0
  8. data/lib/ring/native/version.rb +5 -0
  9. data/ring-native.gemspec +25 -0
  10. data/vendor/ring/BUILDING.md +40 -0
  11. data/vendor/ring/Cargo.toml +43 -0
  12. data/vendor/ring/LICENSE +185 -0
  13. data/vendor/ring/Makefile +35 -0
  14. data/vendor/ring/PORTING.md +163 -0
  15. data/vendor/ring/README.md +113 -0
  16. data/vendor/ring/STYLE.md +197 -0
  17. data/vendor/ring/appveyor.yml +27 -0
  18. data/vendor/ring/build.rs +108 -0
  19. data/vendor/ring/crypto/aes/aes.c +1142 -0
  20. data/vendor/ring/crypto/aes/aes_test.Windows.vcxproj +25 -0
  21. data/vendor/ring/crypto/aes/aes_test.cc +93 -0
  22. data/vendor/ring/crypto/aes/asm/aes-586.pl +2368 -0
  23. data/vendor/ring/crypto/aes/asm/aes-armv4.pl +1249 -0
  24. data/vendor/ring/crypto/aes/asm/aes-x86_64.pl +2246 -0
  25. data/vendor/ring/crypto/aes/asm/aesni-x86.pl +1318 -0
  26. data/vendor/ring/crypto/aes/asm/aesni-x86_64.pl +2084 -0
  27. data/vendor/ring/crypto/aes/asm/aesv8-armx.pl +675 -0
  28. data/vendor/ring/crypto/aes/asm/bsaes-armv7.pl +1364 -0
  29. data/vendor/ring/crypto/aes/asm/bsaes-x86_64.pl +1565 -0
  30. data/vendor/ring/crypto/aes/asm/vpaes-x86.pl +841 -0
  31. data/vendor/ring/crypto/aes/asm/vpaes-x86_64.pl +1116 -0
  32. data/vendor/ring/crypto/aes/internal.h +87 -0
  33. data/vendor/ring/crypto/aes/mode_wrappers.c +61 -0
  34. data/vendor/ring/crypto/bn/add.c +394 -0
  35. data/vendor/ring/crypto/bn/asm/armv4-mont.pl +694 -0
  36. data/vendor/ring/crypto/bn/asm/armv8-mont.pl +1503 -0
  37. data/vendor/ring/crypto/bn/asm/bn-586.pl +774 -0
  38. data/vendor/ring/crypto/bn/asm/co-586.pl +287 -0
  39. data/vendor/ring/crypto/bn/asm/rsaz-avx2.pl +1882 -0
  40. data/vendor/ring/crypto/bn/asm/x86-mont.pl +592 -0
  41. data/vendor/ring/crypto/bn/asm/x86_64-gcc.c +599 -0
  42. data/vendor/ring/crypto/bn/asm/x86_64-mont.pl +1393 -0
  43. data/vendor/ring/crypto/bn/asm/x86_64-mont5.pl +3507 -0
  44. data/vendor/ring/crypto/bn/bn.c +352 -0
  45. data/vendor/ring/crypto/bn/bn_asn1.c +74 -0
  46. data/vendor/ring/crypto/bn/bn_test.Windows.vcxproj +25 -0
  47. data/vendor/ring/crypto/bn/bn_test.cc +1696 -0
  48. data/vendor/ring/crypto/bn/cmp.c +200 -0
  49. data/vendor/ring/crypto/bn/convert.c +433 -0
  50. data/vendor/ring/crypto/bn/ctx.c +311 -0
  51. data/vendor/ring/crypto/bn/div.c +594 -0
  52. data/vendor/ring/crypto/bn/exponentiation.c +1335 -0
  53. data/vendor/ring/crypto/bn/gcd.c +711 -0
  54. data/vendor/ring/crypto/bn/generic.c +1019 -0
  55. data/vendor/ring/crypto/bn/internal.h +316 -0
  56. data/vendor/ring/crypto/bn/montgomery.c +516 -0
  57. data/vendor/ring/crypto/bn/mul.c +888 -0
  58. data/vendor/ring/crypto/bn/prime.c +829 -0
  59. data/vendor/ring/crypto/bn/random.c +334 -0
  60. data/vendor/ring/crypto/bn/rsaz_exp.c +262 -0
  61. data/vendor/ring/crypto/bn/rsaz_exp.h +53 -0
  62. data/vendor/ring/crypto/bn/shift.c +276 -0
  63. data/vendor/ring/crypto/bytestring/bytestring_test.Windows.vcxproj +25 -0
  64. data/vendor/ring/crypto/bytestring/bytestring_test.cc +421 -0
  65. data/vendor/ring/crypto/bytestring/cbb.c +399 -0
  66. data/vendor/ring/crypto/bytestring/cbs.c +227 -0
  67. data/vendor/ring/crypto/bytestring/internal.h +46 -0
  68. data/vendor/ring/crypto/chacha/chacha_generic.c +140 -0
  69. data/vendor/ring/crypto/chacha/chacha_vec.c +323 -0
  70. data/vendor/ring/crypto/chacha/chacha_vec_arm.S +1447 -0
  71. data/vendor/ring/crypto/chacha/chacha_vec_arm_generate.go +153 -0
  72. data/vendor/ring/crypto/cipher/cipher_test.Windows.vcxproj +25 -0
  73. data/vendor/ring/crypto/cipher/e_aes.c +390 -0
  74. data/vendor/ring/crypto/cipher/e_chacha20poly1305.c +208 -0
  75. data/vendor/ring/crypto/cipher/internal.h +173 -0
  76. data/vendor/ring/crypto/cipher/test/aes_128_gcm_tests.txt +543 -0
  77. data/vendor/ring/crypto/cipher/test/aes_128_key_wrap_tests.txt +9 -0
  78. data/vendor/ring/crypto/cipher/test/aes_256_gcm_tests.txt +475 -0
  79. data/vendor/ring/crypto/cipher/test/aes_256_key_wrap_tests.txt +23 -0
  80. data/vendor/ring/crypto/cipher/test/chacha20_poly1305_old_tests.txt +422 -0
  81. data/vendor/ring/crypto/cipher/test/chacha20_poly1305_tests.txt +484 -0
  82. data/vendor/ring/crypto/cipher/test/cipher_test.txt +100 -0
  83. data/vendor/ring/crypto/constant_time_test.Windows.vcxproj +25 -0
  84. data/vendor/ring/crypto/constant_time_test.c +304 -0
  85. data/vendor/ring/crypto/cpu-arm-asm.S +32 -0
  86. data/vendor/ring/crypto/cpu-arm.c +199 -0
  87. data/vendor/ring/crypto/cpu-intel.c +261 -0
  88. data/vendor/ring/crypto/crypto.c +151 -0
  89. data/vendor/ring/crypto/curve25519/asm/x25519-arm.S +2118 -0
  90. data/vendor/ring/crypto/curve25519/curve25519.c +4888 -0
  91. data/vendor/ring/crypto/curve25519/x25519_test.cc +128 -0
  92. data/vendor/ring/crypto/digest/md32_common.h +181 -0
  93. data/vendor/ring/crypto/ec/asm/p256-x86_64-asm.pl +2725 -0
  94. data/vendor/ring/crypto/ec/ec.c +193 -0
  95. data/vendor/ring/crypto/ec/ec_curves.c +61 -0
  96. data/vendor/ring/crypto/ec/ec_key.c +228 -0
  97. data/vendor/ring/crypto/ec/ec_montgomery.c +114 -0
  98. data/vendor/ring/crypto/ec/example_mul.Windows.vcxproj +25 -0
  99. data/vendor/ring/crypto/ec/internal.h +243 -0
  100. data/vendor/ring/crypto/ec/oct.c +253 -0
  101. data/vendor/ring/crypto/ec/p256-64.c +1794 -0
  102. data/vendor/ring/crypto/ec/p256-x86_64-table.h +9548 -0
  103. data/vendor/ring/crypto/ec/p256-x86_64.c +509 -0
  104. data/vendor/ring/crypto/ec/simple.c +1007 -0
  105. data/vendor/ring/crypto/ec/util-64.c +183 -0
  106. data/vendor/ring/crypto/ec/wnaf.c +508 -0
  107. data/vendor/ring/crypto/ecdh/ecdh.c +155 -0
  108. data/vendor/ring/crypto/ecdsa/ecdsa.c +304 -0
  109. data/vendor/ring/crypto/ecdsa/ecdsa_asn1.c +193 -0
  110. data/vendor/ring/crypto/ecdsa/ecdsa_test.Windows.vcxproj +25 -0
  111. data/vendor/ring/crypto/ecdsa/ecdsa_test.cc +327 -0
  112. data/vendor/ring/crypto/header_removed.h +17 -0
  113. data/vendor/ring/crypto/internal.h +495 -0
  114. data/vendor/ring/crypto/libring.Windows.vcxproj +101 -0
  115. data/vendor/ring/crypto/mem.c +98 -0
  116. data/vendor/ring/crypto/modes/asm/aesni-gcm-x86_64.pl +1045 -0
  117. data/vendor/ring/crypto/modes/asm/ghash-armv4.pl +517 -0
  118. data/vendor/ring/crypto/modes/asm/ghash-x86.pl +1393 -0
  119. data/vendor/ring/crypto/modes/asm/ghash-x86_64.pl +1741 -0
  120. data/vendor/ring/crypto/modes/asm/ghashv8-armx.pl +422 -0
  121. data/vendor/ring/crypto/modes/ctr.c +226 -0
  122. data/vendor/ring/crypto/modes/gcm.c +1206 -0
  123. data/vendor/ring/crypto/modes/gcm_test.Windows.vcxproj +25 -0
  124. data/vendor/ring/crypto/modes/gcm_test.c +348 -0
  125. data/vendor/ring/crypto/modes/internal.h +299 -0
  126. data/vendor/ring/crypto/perlasm/arm-xlate.pl +170 -0
  127. data/vendor/ring/crypto/perlasm/readme +100 -0
  128. data/vendor/ring/crypto/perlasm/x86_64-xlate.pl +1164 -0
  129. data/vendor/ring/crypto/perlasm/x86asm.pl +292 -0
  130. data/vendor/ring/crypto/perlasm/x86gas.pl +263 -0
  131. data/vendor/ring/crypto/perlasm/x86masm.pl +200 -0
  132. data/vendor/ring/crypto/perlasm/x86nasm.pl +187 -0
  133. data/vendor/ring/crypto/poly1305/poly1305.c +331 -0
  134. data/vendor/ring/crypto/poly1305/poly1305_arm.c +301 -0
  135. data/vendor/ring/crypto/poly1305/poly1305_arm_asm.S +2015 -0
  136. data/vendor/ring/crypto/poly1305/poly1305_test.Windows.vcxproj +25 -0
  137. data/vendor/ring/crypto/poly1305/poly1305_test.cc +80 -0
  138. data/vendor/ring/crypto/poly1305/poly1305_test.txt +52 -0
  139. data/vendor/ring/crypto/poly1305/poly1305_vec.c +892 -0
  140. data/vendor/ring/crypto/rand/asm/rdrand-x86_64.pl +75 -0
  141. data/vendor/ring/crypto/rand/internal.h +32 -0
  142. data/vendor/ring/crypto/rand/rand.c +189 -0
  143. data/vendor/ring/crypto/rand/urandom.c +219 -0
  144. data/vendor/ring/crypto/rand/windows.c +56 -0
  145. data/vendor/ring/crypto/refcount_c11.c +66 -0
  146. data/vendor/ring/crypto/refcount_lock.c +53 -0
  147. data/vendor/ring/crypto/refcount_test.Windows.vcxproj +25 -0
  148. data/vendor/ring/crypto/refcount_test.c +58 -0
  149. data/vendor/ring/crypto/rsa/blinding.c +462 -0
  150. data/vendor/ring/crypto/rsa/internal.h +108 -0
  151. data/vendor/ring/crypto/rsa/padding.c +300 -0
  152. data/vendor/ring/crypto/rsa/rsa.c +450 -0
  153. data/vendor/ring/crypto/rsa/rsa_asn1.c +261 -0
  154. data/vendor/ring/crypto/rsa/rsa_impl.c +944 -0
  155. data/vendor/ring/crypto/rsa/rsa_test.Windows.vcxproj +25 -0
  156. data/vendor/ring/crypto/rsa/rsa_test.cc +437 -0
  157. data/vendor/ring/crypto/sha/asm/sha-armv8.pl +436 -0
  158. data/vendor/ring/crypto/sha/asm/sha-x86_64.pl +2390 -0
  159. data/vendor/ring/crypto/sha/asm/sha256-586.pl +1275 -0
  160. data/vendor/ring/crypto/sha/asm/sha256-armv4.pl +735 -0
  161. data/vendor/ring/crypto/sha/asm/sha256-armv8.pl +14 -0
  162. data/vendor/ring/crypto/sha/asm/sha256-x86_64.pl +14 -0
  163. data/vendor/ring/crypto/sha/asm/sha512-586.pl +911 -0
  164. data/vendor/ring/crypto/sha/asm/sha512-armv4.pl +666 -0
  165. data/vendor/ring/crypto/sha/asm/sha512-armv8.pl +14 -0
  166. data/vendor/ring/crypto/sha/asm/sha512-x86_64.pl +14 -0
  167. data/vendor/ring/crypto/sha/sha1.c +271 -0
  168. data/vendor/ring/crypto/sha/sha256.c +204 -0
  169. data/vendor/ring/crypto/sha/sha512.c +355 -0
  170. data/vendor/ring/crypto/test/file_test.cc +326 -0
  171. data/vendor/ring/crypto/test/file_test.h +181 -0
  172. data/vendor/ring/crypto/test/malloc.cc +150 -0
  173. data/vendor/ring/crypto/test/scoped_types.h +95 -0
  174. data/vendor/ring/crypto/test/test.Windows.vcxproj +35 -0
  175. data/vendor/ring/crypto/test/test_util.cc +46 -0
  176. data/vendor/ring/crypto/test/test_util.h +41 -0
  177. data/vendor/ring/crypto/thread_none.c +55 -0
  178. data/vendor/ring/crypto/thread_pthread.c +165 -0
  179. data/vendor/ring/crypto/thread_test.Windows.vcxproj +25 -0
  180. data/vendor/ring/crypto/thread_test.c +200 -0
  181. data/vendor/ring/crypto/thread_win.c +282 -0
  182. data/vendor/ring/examples/checkdigest.rs +103 -0
  183. data/vendor/ring/include/openssl/aes.h +121 -0
  184. data/vendor/ring/include/openssl/arm_arch.h +129 -0
  185. data/vendor/ring/include/openssl/base.h +156 -0
  186. data/vendor/ring/include/openssl/bn.h +794 -0
  187. data/vendor/ring/include/openssl/buffer.h +18 -0
  188. data/vendor/ring/include/openssl/bytestring.h +235 -0
  189. data/vendor/ring/include/openssl/chacha.h +37 -0
  190. data/vendor/ring/include/openssl/cmac.h +76 -0
  191. data/vendor/ring/include/openssl/cpu.h +184 -0
  192. data/vendor/ring/include/openssl/crypto.h +43 -0
  193. data/vendor/ring/include/openssl/curve25519.h +88 -0
  194. data/vendor/ring/include/openssl/ec.h +225 -0
  195. data/vendor/ring/include/openssl/ec_key.h +129 -0
  196. data/vendor/ring/include/openssl/ecdh.h +110 -0
  197. data/vendor/ring/include/openssl/ecdsa.h +156 -0
  198. data/vendor/ring/include/openssl/err.h +201 -0
  199. data/vendor/ring/include/openssl/mem.h +101 -0
  200. data/vendor/ring/include/openssl/obj_mac.h +71 -0
  201. data/vendor/ring/include/openssl/opensslfeatures.h +68 -0
  202. data/vendor/ring/include/openssl/opensslv.h +18 -0
  203. data/vendor/ring/include/openssl/ossl_typ.h +18 -0
  204. data/vendor/ring/include/openssl/poly1305.h +51 -0
  205. data/vendor/ring/include/openssl/rand.h +70 -0
  206. data/vendor/ring/include/openssl/rsa.h +399 -0
  207. data/vendor/ring/include/openssl/thread.h +133 -0
  208. data/vendor/ring/include/openssl/type_check.h +71 -0
  209. data/vendor/ring/mk/Common.props +63 -0
  210. data/vendor/ring/mk/Windows.props +42 -0
  211. data/vendor/ring/mk/WindowsTest.props +18 -0
  212. data/vendor/ring/mk/appveyor.bat +62 -0
  213. data/vendor/ring/mk/bottom_of_makefile.mk +54 -0
  214. data/vendor/ring/mk/ring.mk +266 -0
  215. data/vendor/ring/mk/top_of_makefile.mk +214 -0
  216. data/vendor/ring/mk/travis.sh +40 -0
  217. data/vendor/ring/mk/update-travis-yml.py +229 -0
  218. data/vendor/ring/ring.sln +153 -0
  219. data/vendor/ring/src/aead.rs +682 -0
  220. data/vendor/ring/src/agreement.rs +248 -0
  221. data/vendor/ring/src/c.rs +129 -0
  222. data/vendor/ring/src/constant_time.rs +37 -0
  223. data/vendor/ring/src/der.rs +96 -0
  224. data/vendor/ring/src/digest.rs +690 -0
  225. data/vendor/ring/src/digest_tests.txt +57 -0
  226. data/vendor/ring/src/ecc.rs +28 -0
  227. data/vendor/ring/src/ecc_build.rs +279 -0
  228. data/vendor/ring/src/ecc_curves.rs +117 -0
  229. data/vendor/ring/src/ed25519_tests.txt +2579 -0
  230. data/vendor/ring/src/exe_tests.rs +46 -0
  231. data/vendor/ring/src/ffi.rs +29 -0
  232. data/vendor/ring/src/file_test.rs +187 -0
  233. data/vendor/ring/src/hkdf.rs +153 -0
  234. data/vendor/ring/src/hkdf_tests.txt +59 -0
  235. data/vendor/ring/src/hmac.rs +414 -0
  236. data/vendor/ring/src/hmac_tests.txt +97 -0
  237. data/vendor/ring/src/input.rs +312 -0
  238. data/vendor/ring/src/lib.rs +41 -0
  239. data/vendor/ring/src/pbkdf2.rs +265 -0
  240. data/vendor/ring/src/pbkdf2_tests.txt +113 -0
  241. data/vendor/ring/src/polyfill.rs +57 -0
  242. data/vendor/ring/src/rand.rs +28 -0
  243. data/vendor/ring/src/signature.rs +314 -0
  244. data/vendor/ring/third-party/NIST/README.md +9 -0
  245. data/vendor/ring/third-party/NIST/SHAVS/SHA1LongMsg.rsp +263 -0
  246. data/vendor/ring/third-party/NIST/SHAVS/SHA1Monte.rsp +309 -0
  247. data/vendor/ring/third-party/NIST/SHAVS/SHA1ShortMsg.rsp +267 -0
  248. data/vendor/ring/third-party/NIST/SHAVS/SHA224LongMsg.rsp +263 -0
  249. data/vendor/ring/third-party/NIST/SHAVS/SHA224Monte.rsp +309 -0
  250. data/vendor/ring/third-party/NIST/SHAVS/SHA224ShortMsg.rsp +267 -0
  251. data/vendor/ring/third-party/NIST/SHAVS/SHA256LongMsg.rsp +263 -0
  252. data/vendor/ring/third-party/NIST/SHAVS/SHA256Monte.rsp +309 -0
  253. data/vendor/ring/third-party/NIST/SHAVS/SHA256ShortMsg.rsp +267 -0
  254. data/vendor/ring/third-party/NIST/SHAVS/SHA384LongMsg.rsp +519 -0
  255. data/vendor/ring/third-party/NIST/SHAVS/SHA384Monte.rsp +309 -0
  256. data/vendor/ring/third-party/NIST/SHAVS/SHA384ShortMsg.rsp +523 -0
  257. data/vendor/ring/third-party/NIST/SHAVS/SHA512LongMsg.rsp +519 -0
  258. data/vendor/ring/third-party/NIST/SHAVS/SHA512Monte.rsp +309 -0
  259. data/vendor/ring/third-party/NIST/SHAVS/SHA512ShortMsg.rsp +523 -0
  260. data/vendor/ring/third-party/NIST/sha256sums.txt +1 -0
  261. metadata +333 -0
@@ -0,0 +1,100 @@
1
+ # AES-GCM tests should be added to aes_128_gcm_test.txt and
2
+ # aes_256_gcm_test.txt during merges.
3
+
4
+
5
+ # For all CBC encrypts and decrypts, the transformed sequence is
6
+ # AES-bits-CBC:key:IV/ciphertext':plaintext:ciphertext:encdec
7
+ # CBC-AES128.Encrypt and CBC-AES128.Decrypt
8
+ Cipher = AES-128-CBC
9
+ Key = 2B7E151628AED2A6ABF7158809CF4F3C
10
+ IV = 000102030405060708090A0B0C0D0E0F
11
+ Plaintext = 6BC1BEE22E409F96E93D7E117393172A
12
+ Ciphertext = 7649ABAC8119B246CEE98E9B12E9197D
13
+
14
+ Cipher = AES-128-CBC
15
+ Key = 2B7E151628AED2A6ABF7158809CF4F3C
16
+ IV = 7649ABAC8119B246CEE98E9B12E9197D
17
+ Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
18
+ Ciphertext = 5086CB9B507219EE95DB113A917678B2
19
+
20
+ Cipher = AES-128-CBC
21
+ Key = 2B7E151628AED2A6ABF7158809CF4F3C
22
+ IV = 5086CB9B507219EE95DB113A917678B2
23
+ Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
24
+ Ciphertext = 73BED6B8E3C1743B7116E69E22229516
25
+
26
+ Cipher = AES-128-CBC
27
+ Key = 2B7E151628AED2A6ABF7158809CF4F3C
28
+ IV = 73BED6B8E3C1743B7116E69E22229516
29
+ Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
30
+ Ciphertext = 3FF1CAA1681FAC09120ECA307586E1A7
31
+
32
+
33
+ # CBC-AES256.Encrypt and CBC-AES256.Decrypt
34
+ Cipher = AES-256-CBC
35
+ Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
36
+ IV = 000102030405060708090A0B0C0D0E0F
37
+ Plaintext = 6BC1BEE22E409F96E93D7E117393172A
38
+ Ciphertext = F58C4C04D6E5F1BA779EABFB5F7BFBD6
39
+
40
+ Cipher = AES-256-CBC
41
+ Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
42
+ IV = F58C4C04D6E5F1BA779EABFB5F7BFBD6
43
+ Plaintext = AE2D8A571E03AC9C9EB76FAC45AF8E51
44
+ Ciphertext = 9CFC4E967EDB808D679F777BC6702C7D
45
+
46
+ Cipher = AES-256-CBC
47
+ Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
48
+ IV = 9CFC4E967EDB808D679F777BC6702C7D
49
+ Plaintext = 30C81C46A35CE411E5FBC1191A0A52EF
50
+ Ciphertext = 39F23369A9D9BACFA530E26304231461
51
+
52
+ Cipher = AES-256-CBC
53
+ Key = 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4
54
+ IV = 39F23369A9D9BACFA530E26304231461
55
+ Plaintext = F69F2445DF4F9B17AD2B417BE66C3710
56
+ Ciphertext = B2EB05E2C39BE9FCDA6C19078C6A9D1B
57
+
58
+
59
+ # AES Counter test vectors from RFC3686
60
+ Cipher = AES-128-CTR
61
+ Key = AE6852F8121067CC4BF7A5765577F39E
62
+ IV = 00000030000000000000000000000001
63
+ Operation = ENCRYPT
64
+ Plaintext = 53696E676C6520626C6F636B206D7367
65
+ Ciphertext = E4095D4FB7A7B3792D6175A3261311B8
66
+
67
+ Cipher = AES-128-CTR
68
+ Key = 7E24067817FAE0D743D6CE1F32539163
69
+ IV = 006CB6DBC0543B59DA48D90B00000001
70
+ Operation = ENCRYPT
71
+ Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
72
+ Ciphertext = 5104A106168A72D9790D41EE8EDAD388EB2E1EFC46DA57C8FCE630DF9141BE28
73
+
74
+ Cipher = AES-128-CTR
75
+ Key = 7691BE035E5020A8AC6E618529F9A0DC
76
+ IV = 00E0017B27777F3F4A1786F000000001
77
+ Operation = ENCRYPT
78
+ Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
79
+ Ciphertext = C1CF48A89F2FFDD9CF4652E9EFDB72D74540A42BDE6D7836D59A5CEAAEF3105325B2072F
80
+
81
+ Cipher = AES-256-CTR
82
+ Key = 776BEFF2851DB06F4C8A0542C8696F6C6A81AF1EEC96B4D37FC1D689E6C1C104
83
+ IV = 00000060DB5672C97AA8F0B200000001
84
+ Operation = ENCRYPT
85
+ Plaintext = 53696E676C6520626C6F636B206D7367
86
+ Ciphertext = 145AD01DBF824EC7560863DC71E3E0C0
87
+
88
+ Cipher = AES-256-CTR
89
+ Key = F6D66D6BD52D59BB0796365879EFF886C66DD51A5B6A99744B50590C87A23884
90
+ IV = 00FAAC24C1585EF15A43D87500000001
91
+ Operation = ENCRYPT
92
+ Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
93
+ Ciphertext = F05E231B3894612C49EE000B804EB2A9B8306B508F839D6A5530831D9344AF1C
94
+
95
+ Cipher = AES-256-CTR
96
+ Key = FF7A617CE69148E4F1726E2F43581DE2AA62D9F805532EDFF1EED687FB54153D
97
+ IV = 001CC5B751A51D70A1C1114800000001
98
+ Operation = ENCRYPT
99
+ Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223
100
+ Ciphertext = EB6C52821D0BBBF7CE7594462ACA4FAAB407DF866569FD07F48CC0B583D6071F1EC0E6B8
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <PropertyGroup Label="Globals">
4
+ <ProjectGuid>{C8E7CDAF-3953-48E8-95F2-97DAC472E2E0}</ProjectGuid>
5
+ <TargetName>constant_time_test</TargetName>
6
+ </PropertyGroup>
7
+ <ImportGroup Label="PropertySheets">
8
+ <Import Project="..\mk\WindowsTest.props" />
9
+ </ImportGroup>
10
+ <PropertyGroup Label="Configuration">
11
+ <OutDir>$(OutRootDir)test\ring\crypto\</OutDir>
12
+ </PropertyGroup>
13
+ <ItemGroup>
14
+ <ClCompile Include="constant_time_test.c" />
15
+ </ItemGroup>
16
+ <ItemGroup>
17
+ <ProjectReference Include="libring.Windows.vcxproj">
18
+ <Project>{f4c0a1b6-5e09-41c8-8242-3e1f6762fb18}</Project>
19
+ </ProjectReference>
20
+ <ProjectReference Include="test\test.Windows.vcxproj">
21
+ <Project>{1dace503-6498-492d-b1ff-f9ee18624443}</Project>
22
+ </ProjectReference>
23
+ </ItemGroup>
24
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
25
+ </Project>
@@ -0,0 +1,304 @@
1
+ /*
2
+ * Utilities for constant-time cryptography.
3
+ *
4
+ * Author: Emilia Kasper (emilia@openssl.org)
5
+ * Based on previous work by Bodo Moeller, Emilia Kasper, Adam Langley
6
+ * (Google).
7
+ * ====================================================================
8
+ * Copyright (c) 2014 The OpenSSL Project. All rights reserved.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ * 3. All advertising materials mentioning features or use of this software
19
+ * must display the following acknowledgement:
20
+ * "This product includes cryptographic software written by
21
+ * Eric Young (eay@cryptsoft.com)"
22
+ * The word 'cryptographic' can be left out if the rouines from the library
23
+ * being used are not cryptographic related :-).
24
+ * 4. If you include any Windows specific code (or a derivative thereof) from
25
+ * the apps directory (application code) you must include an acknowledgement:
26
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
27
+ *
28
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
29
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
32
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38
+ * SUCH DAMAGE.
39
+ *
40
+ * The licence and distribution terms for any publically available version or
41
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
42
+ * copied and put under another distribution licence
43
+ * [including the GNU Public Licence.]
44
+ */
45
+
46
+ #include "internal.h"
47
+
48
+ #include <limits.h>
49
+ #include <stdio.h>
50
+ #include <stdlib.h>
51
+
52
+
53
+ static const unsigned int CONSTTIME_TRUE = (unsigned)(~0);
54
+ static const unsigned int CONSTTIME_FALSE = 0;
55
+ static const uint8_t CONSTTIME_TRUE_8 = 0xff;
56
+ static const uint8_t CONSTTIME_FALSE_8 = 0;
57
+
58
+ static int test_binary_op(unsigned int (*op)(unsigned int a, unsigned int b),
59
+ const char* op_name, unsigned int a, unsigned int b,
60
+ int is_true) {
61
+ unsigned c = op(a, b);
62
+ if (is_true && c != CONSTTIME_TRUE) {
63
+ fprintf(stderr,
64
+ "Test failed for %s(%du, %du): expected %du (TRUE), got %du\n",
65
+ op_name, a, b, CONSTTIME_TRUE, c);
66
+ return 1;
67
+ } else if (!is_true && c != CONSTTIME_FALSE) {
68
+ fprintf(stderr,
69
+ "Test failed for %s(%du, %du): expected %du (FALSE), got %du\n",
70
+ op_name, a, b, CONSTTIME_FALSE, c);
71
+ return 1;
72
+ }
73
+ return 0;
74
+ }
75
+
76
+ static int test_binary_op_8(uint8_t (*op)(unsigned int a, unsigned int b),
77
+ const char* op_name, unsigned int a, unsigned int b,
78
+ int is_true) {
79
+ uint8_t c = op(a, b);
80
+ if (is_true && c != CONSTTIME_TRUE_8) {
81
+ fprintf(stderr,
82
+ "Test failed for %s(%du, %du): expected %u (TRUE), got %u\n",
83
+ op_name, a, b, CONSTTIME_TRUE_8, c);
84
+ return 1;
85
+ } else if (!is_true && c != CONSTTIME_FALSE_8) {
86
+ fprintf(stderr,
87
+ "Test failed for %s(%du, %du): expected %u (FALSE), got %u\n",
88
+ op_name, a, b, CONSTTIME_FALSE_8, c);
89
+ return 1;
90
+ }
91
+ return 0;
92
+ }
93
+
94
+ static int test_is_zero(unsigned int a) {
95
+ unsigned int c = constant_time_is_zero(a);
96
+ if (a == 0 && c != CONSTTIME_TRUE) {
97
+ fprintf(stderr,
98
+ "Test failed for constant_time_is_zero(%du): expected %du (TRUE), "
99
+ "got %du\n",
100
+ a, CONSTTIME_TRUE, c);
101
+ return 1;
102
+ } else if (a != 0 && c != CONSTTIME_FALSE) {
103
+ fprintf(stderr,
104
+ "Test failed for constant_time_is_zero(%du): expected %du (FALSE), "
105
+ "got %du\n",
106
+ a, CONSTTIME_FALSE, c);
107
+ return 1;
108
+ }
109
+ return 0;
110
+ }
111
+
112
+ static int test_is_zero_8(unsigned int a) {
113
+ uint8_t c = constant_time_is_zero_8(a);
114
+ if (a == 0 && c != CONSTTIME_TRUE_8) {
115
+ fprintf(stderr,
116
+ "Test failed for constant_time_is_zero(%du): expected %u (TRUE), "
117
+ "got %u\n",
118
+ a, CONSTTIME_TRUE_8, c);
119
+ return 1;
120
+ } else if (a != 0 && c != CONSTTIME_FALSE) {
121
+ fprintf(stderr,
122
+ "Test failed for constant_time_is_zero(%du): expected %u (FALSE), "
123
+ "got %u\n",
124
+ a, CONSTTIME_FALSE_8, c);
125
+ return 1;
126
+ }
127
+ return 0;
128
+ }
129
+
130
+ static int test_select(unsigned int a, unsigned int b) {
131
+ unsigned int selected = constant_time_select(CONSTTIME_TRUE, a, b);
132
+ if (selected != a) {
133
+ fprintf(stderr,
134
+ "Test failed for constant_time_select(%du, %du,"
135
+ "%du): expected %du(first value), got %du\n",
136
+ CONSTTIME_TRUE, a, b, a, selected);
137
+ return 1;
138
+ }
139
+ selected = constant_time_select(CONSTTIME_FALSE, a, b);
140
+ if (selected != b) {
141
+ fprintf(stderr,
142
+ "Test failed for constant_time_select(%du, %du,"
143
+ "%du): expected %du(second value), got %du\n",
144
+ CONSTTIME_FALSE, a, b, b, selected);
145
+ return 1;
146
+ }
147
+ return 0;
148
+ }
149
+
150
+ static int test_select_8(uint8_t a, uint8_t b) {
151
+ uint8_t selected = constant_time_select_8(CONSTTIME_TRUE_8, a, b);
152
+ if (selected != a) {
153
+ fprintf(stderr,
154
+ "Test failed for constant_time_select(%u, %u,"
155
+ "%u): expected %u(first value), got %u\n",
156
+ CONSTTIME_TRUE, a, b, a, selected);
157
+ return 1;
158
+ }
159
+ selected = constant_time_select_8(CONSTTIME_FALSE_8, a, b);
160
+ if (selected != b) {
161
+ fprintf(stderr,
162
+ "Test failed for constant_time_select(%u, %u,"
163
+ "%u): expected %u(second value), got %u\n",
164
+ CONSTTIME_FALSE, a, b, b, selected);
165
+ return 1;
166
+ }
167
+ return 0;
168
+ }
169
+
170
+ static int test_select_int(int a, int b) {
171
+ int selected = constant_time_select_int(CONSTTIME_TRUE, a, b);
172
+ if (selected != a) {
173
+ fprintf(stderr,
174
+ "Test failed for constant_time_select(%du, %d,"
175
+ "%d): expected %d(first value), got %d\n",
176
+ CONSTTIME_TRUE, a, b, a, selected);
177
+ return 1;
178
+ }
179
+ selected = constant_time_select_int(CONSTTIME_FALSE, a, b);
180
+ if (selected != b) {
181
+ fprintf(stderr,
182
+ "Test failed for constant_time_select(%du, %d,"
183
+ "%d): expected %d(second value), got %d\n",
184
+ CONSTTIME_FALSE, a, b, b, selected);
185
+ return 1;
186
+ }
187
+ return 0;
188
+ }
189
+
190
+ static int test_eq_int(int a, int b) {
191
+ unsigned int equal = constant_time_eq_int(a, b);
192
+ if (a == b && equal != CONSTTIME_TRUE) {
193
+ fprintf(stderr,
194
+ "Test failed for constant_time_eq_int(%d, %d): expected %du(TRUE), "
195
+ "got %du\n",
196
+ a, b, CONSTTIME_TRUE, equal);
197
+ return 1;
198
+ } else if (a != b && equal != CONSTTIME_FALSE) {
199
+ fprintf(stderr,
200
+ "Test failed for constant_time_eq_int(%d, %d): expected "
201
+ "%du(FALSE), got %du\n",
202
+ a, b, CONSTTIME_FALSE, equal);
203
+ return 1;
204
+ }
205
+ return 0;
206
+ }
207
+
208
+ static int test_eq_int_8(int a, int b) {
209
+ uint8_t equal = constant_time_eq_int_8(a, b);
210
+ if (a == b && equal != CONSTTIME_TRUE_8) {
211
+ fprintf(stderr,
212
+ "Test failed for constant_time_eq_int_8(%d, %d): expected "
213
+ "%u(TRUE), got %u\n",
214
+ a, b, CONSTTIME_TRUE_8, equal);
215
+ return 1;
216
+ } else if (a != b && equal != CONSTTIME_FALSE_8) {
217
+ fprintf(stderr,
218
+ "Test failed for constant_time_eq_int_8(%d, %d): expected "
219
+ "%u(FALSE), got %u\n",
220
+ a, b, CONSTTIME_FALSE_8, equal);
221
+ return 1;
222
+ }
223
+ return 0;
224
+ }
225
+
226
+ static unsigned int test_values[] = {0, 1, 1024, 12345, 32000, UINT_MAX / 2 - 1,
227
+ UINT_MAX / 2, UINT_MAX / 2 + 1,
228
+ UINT_MAX - 1, UINT_MAX};
229
+
230
+ static uint8_t test_values_8[] = {0, 1, 2, 20, 32, 127, 128, 129, 255};
231
+
232
+ static int signed_test_values[] = {
233
+ 0, 1, -1, 1024, -1024, 12345, -12345,
234
+ 32000, -32000, INT_MAX, INT_MIN, INT_MAX - 1, INT_MIN + 1};
235
+
236
+ int main(int argc, char* argv[]) {
237
+ unsigned int a, b, i, j;
238
+ int c, d;
239
+ uint8_t e, f;
240
+ int num_failed = 0, num_all = 0;
241
+
242
+ for (i = 0; i < sizeof(test_values) / sizeof(int); ++i) {
243
+ a = test_values[i];
244
+ num_failed += test_is_zero(a);
245
+ num_failed += test_is_zero_8(a);
246
+ num_all += 2;
247
+ for (j = 0; j < sizeof(test_values) / sizeof(int); ++j) {
248
+ b = test_values[j];
249
+ num_failed +=
250
+ test_binary_op(&constant_time_lt, "constant_time_lt", a, b, a < b);
251
+ num_failed += test_binary_op_8(&constant_time_lt_8, "constant_time_lt_8",
252
+ a, b, a < b);
253
+ num_failed +=
254
+ test_binary_op(&constant_time_lt, "constant_time_lt_8", b, a, b < a);
255
+ num_failed += test_binary_op_8(&constant_time_lt_8, "constant_time_lt_8",
256
+ b, a, b < a);
257
+ num_failed +=
258
+ test_binary_op(&constant_time_ge, "constant_time_ge", a, b, a >= b);
259
+ num_failed += test_binary_op_8(&constant_time_ge_8, "constant_time_ge_8",
260
+ a, b, a >= b);
261
+ num_failed +=
262
+ test_binary_op(&constant_time_ge, "constant_time_ge", b, a, b >= a);
263
+ num_failed += test_binary_op_8(&constant_time_ge_8, "constant_time_ge_8",
264
+ b, a, b >= a);
265
+ num_failed +=
266
+ test_binary_op(&constant_time_eq, "constant_time_eq", a, b, a == b);
267
+ num_failed += test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8",
268
+ a, b, a == b);
269
+ num_failed +=
270
+ test_binary_op(&constant_time_eq, "constant_time_eq", b, a, b == a);
271
+ num_failed += test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8",
272
+ b, a, b == a);
273
+ num_failed += test_select(a, b);
274
+ num_all += 13;
275
+ }
276
+ }
277
+
278
+ for (i = 0; i < sizeof(signed_test_values) / sizeof(int); ++i) {
279
+ c = signed_test_values[i];
280
+ for (j = 0; j < sizeof(signed_test_values) / sizeof(int); ++j) {
281
+ d = signed_test_values[j];
282
+ num_failed += test_select_int(c, d);
283
+ num_failed += test_eq_int(c, d);
284
+ num_failed += test_eq_int_8(c, d);
285
+ num_all += 3;
286
+ }
287
+ }
288
+
289
+ for (i = 0; i < sizeof(test_values_8); ++i) {
290
+ e = test_values_8[i];
291
+ for (j = 0; j < sizeof(test_values_8); ++j) {
292
+ f = test_values_8[j];
293
+ num_failed += test_select_8(e, f);
294
+ num_all += 1;
295
+ }
296
+ }
297
+
298
+ if (!num_failed) {
299
+ return EXIT_SUCCESS;
300
+ } else {
301
+ fprintf(stdout, "%d of %d tests failed!\n", num_failed, num_all);
302
+ return EXIT_FAILURE;
303
+ }
304
+ }
@@ -0,0 +1,32 @@
1
+ # Copyright (c) 2014, Google Inc.
2
+ #
3
+ # Permission to use, copy, modify, and/or distribute this software for any
4
+ # purpose with or without fee is hereby granted, provided that the above
5
+ # copyright notice and this permission notice appear in all copies.
6
+ #
7
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+
15
+ #if !defined(OPENSSL_NO_ASM) && defined(__arm__)
16
+
17
+ .syntax unified
18
+ .cpu cortex-a8
19
+ .fpu neon
20
+ .text
21
+ .thumb
22
+ .align 2
23
+ .global CRYPTO_arm_neon_probe
24
+ .hidden CRYPTO_arm_neon_probe
25
+ .type CRYPTO_arm_neon_probe, %function
26
+ .thumb_func
27
+ CRYPTO_arm_neon_probe:
28
+ vorr q1, q1, q1
29
+ bx lr
30
+ .section .note.GNU-stack,"",%progbits
31
+
32
+ #endif /* !OPENSSL_NO_ASM && __arm__ */