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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 461c320a3ceded3e82039c266b94fb6ba358206a
4
+ data.tar.gz: b6b41a976430779509ad441fcbbf5d976ba639c7
5
+ SHA512:
6
+ metadata.gz: d0b2953cafbd07ffb6a96ea9676ff47a4b40e12452f05a5b4970f8afccfc56cd1bb2b6c6f57d1b3131b94b731e5e7e5f5ead068b4306128281ad284d49b85152
7
+ data.tar.gz: 471388e5ba6ee776b31076f2a86f2e2145525cb3dae649e937968259b7adcdb05469d50d5d5cfe346886661a17a366b115ac523b7edc154f5a01ebe14119d963
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,22 @@
1
+ ring-native
2
+ ===========
3
+ [![Gem Version](https://badge.fury.io/rb/ring-native.png)](http://badge.fury.io/rb/ring-native)
4
+
5
+ The [*ring* cryptography library][ring] packaged as a RubyGem. Since *ring* has
6
+ no upstream releases, this gem will be released as periodic snapshots with
7
+ version numbers corresponding to the date the snapshot was taken until such time
8
+ as *ring* has versioned releases.
9
+
10
+ The boilerplate code in the ring-native gem is MIT along with the rest of the
11
+ ruby-ring gem, however *ring* itself is a fork of BoringSSL and therefore
12
+ carries with it a mixture of licenses, mostly the OpenSSL license.
13
+
14
+ For more information on the licensing of *ring* itself, please see the
15
+ [*ring* LICENSE][license].
16
+
17
+ [ring]: https://github.com/briansmith/ring/
18
+ [license]: https://github.com/briansmith/ring/blob/master/LICENSE
19
+
20
+ # Usage
21
+
22
+ This gem is automatically installed along with the *ring* gem.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,29 @@
1
+ require "fileutils"
2
+
3
+ def sys(cmd)
4
+ puts " -- #{cmd}"
5
+ unless ret = system(cmd)
6
+ raise "ERROR: '#{cmd}' failed"
7
+ end
8
+ ret
9
+ end
10
+
11
+ ring_src = File.expand_path("../../../vendor/ring", __FILE__)
12
+ ring_dst = File.expand_path("../../../lib/ring/native", __FILE__)
13
+
14
+ filename = RUBY_DESCRIPTION[/darwin/] ? "libring.dylib" : "libring.so"
15
+
16
+ Dir.chdir(ring_src) do
17
+ sys("cargo build --release")
18
+ FileUtils.cp "target/release/#{filename}", ring_dst
19
+ end
20
+
21
+ makefile = <<MAKEFILE
22
+ install:
23
+ \t@echo "Nothing to do"
24
+
25
+ clean:
26
+ \t@echo "Nothing to do"
27
+ MAKEFILE
28
+
29
+ File.open("Makefile", "w") { |f| f.write(makefile) }
@@ -0,0 +1,8 @@
1
+ require "ring/native/version"
2
+
3
+ module Ring
4
+ module Native
5
+ filename = RUBY_DESCRIPTION[/darwin/] ? "libring.dylib" : "libring.so"
6
+ LIB_PATH = File.expand_path("../native/#{filename}", __FILE__)
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module Ring
2
+ module Native
3
+ VERSION = "0.0.0"
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ring/native/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ring-native"
8
+ spec.version = Ring::Native::VERSION
9
+ spec.authors = ["Tony Arcieri"]
10
+ spec.email = ["bascule@gmail.com"]
11
+
12
+ spec.summary = "The *ring* cryptography library, packaged as a RubyGem"
13
+ spec.description = "Snapshots of the *ring* cryptography library, packaged in RubyGem format"
14
+ spec.homepage = "https://github.com/cryptosphere/ruby-ring"
15
+ spec.license = "OpenSSL"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.files += Dir.glob("vendor/ring/**/*")
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.extensions = ["ext/ring/extconf.rb"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.11"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ end
@@ -0,0 +1,40 @@
1
+ Building *ring*
2
+ ===============
3
+
4
+ *ring*'s Rust crate is named ```ring```. You can build it
5
+ using ```cargo build --release``` and you can run the tests
6
+ with ```cargo test --release```. When you use ```cargo``` to build *ring,
7
+ the build script [build.rs](build.rs) automatically builds the C and
8
+ assembly language components of *ring*.
9
+
10
+ Currently on Windows you must currently invoke cargo from a Visual Studio
11
+ Native Tools Command Prompt. Otherwise the build will likely fail in confusing
12
+ ways because either msbuild won't be found or there will be a version mismatch
13
+ between the toolchain used to build the C parts of the library and the toolchain
14
+ used by cargo/rustc for linking. Visual Studio 2015 Update 1 and Visual Studio
15
+ 2013 Update 5 are supported.
16
+
17
+ *ring* uses Visual Studio's native build system (msbuild) on Windows, and GNU
18
+ Make otherwise. Because this is a little unusual, I would be particularly grateful
19
+ if you could report any problems building (or using) *ring*'s Rust crate.
20
+
21
+ GCC 4.8 and later, and Clang 3.4 and later are supported. Other compilers
22
+ will also probably work without too much trouble. Note in particular that if
23
+ you are cross-compiling an x86 build on a 64-bit version of Linux, then you
24
+ need to have the proper gcc-multilibs and g++-multilibs packages or equivalent
25
+ installed.
26
+
27
+
28
+
29
+ Prerequisites for Regenerating `crypto/chacha/chacha_vec_arm.S`
30
+ ===============================================================
31
+
32
+ If you change `crypto/chacha/chacha_vec.c`, you will need the
33
+ arm-linux-gnueabihf-gcc compiler:
34
+
35
+ ```
36
+ wget https://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz && \
37
+ echo bc4ca2ced084d2dc12424815a4442e19cb1422db87068830305d90075feb1a3b gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz | sha256sum -c && \
38
+ tar xf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz && \
39
+ sudo mv gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf /opt/
40
+ ```
@@ -0,0 +1,43 @@
1
+ [package]
2
+ authors = ["Brian Smith <brian@briansmith.org>"]
3
+ build = "build.rs"
4
+ description = "A Rust interface for a simplification of BoringSSL's libcrypto."
5
+ license-file = "LICENSE"
6
+ name = "ring"
7
+ readme = "README.md"
8
+ repository = "https://github.com/briansmith/ring"
9
+ version = "0.1.0"
10
+
11
+ [lib]
12
+ name = "ring"
13
+ crate_type = ["dylib"]
14
+
15
+ [build-dependencies]
16
+ num = "0.1.27"
17
+ rustc-serialize = "0.3.15"
18
+
19
+ [dev-dependencies]
20
+ rustc-serialize = "0.3.15"
21
+ time = "0.1.32"
22
+
23
+ # Fix the `bench`, `release`, and `test` profiles so they all have the
24
+ # same configuration.
25
+ #
26
+ # XXX: We can't build with `debug = true` yet because that breaks the
27
+ # Windows builds. See https://github.com/briansmith/ring/issues/44.
28
+
29
+ [profile.bench]
30
+ opt-level = 3
31
+ debug = false
32
+ rpath = false
33
+ lto = true
34
+ debug-assertions = false
35
+ codegen-units = 1
36
+
37
+ [profile.release]
38
+ opt-level = 3
39
+ debug = false
40
+ rpath = false
41
+ lto = true
42
+ debug-assertions = false
43
+ codegen-units = 1
@@ -0,0 +1,185 @@
1
+ BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
2
+ licensing. Files that are completely new have a Google copyright and an ISC
3
+ license. This license is reproduced at the bottom of this file.
4
+
5
+ Contributors to BoringSSL are required to follow the CLA rules for Chromium:
6
+ https://cla.developers.google.com/clas
7
+
8
+ Some files from Intel are under yet another license, which is also included
9
+ underneath.
10
+
11
+ The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
12
+ OpenSSL License and the original SSLeay license apply to the toolkit. See below
13
+ for the actual license texts. Actually both licenses are BSD-style Open Source
14
+ licenses. In case of any license issues related to OpenSSL please contact
15
+ openssl-core@openssl.org.
16
+
17
+ OpenSSL License
18
+ ---------------
19
+
20
+ /* ====================================================================
21
+ * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ *
27
+ * 1. Redistributions of source code must retain the above copyright
28
+ * notice, this list of conditions and the following disclaimer.
29
+ *
30
+ * 2. Redistributions in binary form must reproduce the above copyright
31
+ * notice, this list of conditions and the following disclaimer in
32
+ * the documentation and/or other materials provided with the
33
+ * distribution.
34
+ *
35
+ * 3. All advertising materials mentioning features or use of this
36
+ * software must display the following acknowledgment:
37
+ * "This product includes software developed by the OpenSSL Project
38
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
39
+ *
40
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
41
+ * endorse or promote products derived from this software without
42
+ * prior written permission. For written permission, please contact
43
+ * openssl-core@openssl.org.
44
+ *
45
+ * 5. Products derived from this software may not be called "OpenSSL"
46
+ * nor may "OpenSSL" appear in their names without prior written
47
+ * permission of the OpenSSL Project.
48
+ *
49
+ * 6. Redistributions of any form whatsoever must retain the following
50
+ * acknowledgment:
51
+ * "This product includes software developed by the OpenSSL Project
52
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
53
+ *
54
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
55
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
56
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
57
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
58
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
59
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
60
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
61
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
62
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
63
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
64
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
65
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
66
+ * ====================================================================
67
+ *
68
+ * This product includes cryptographic software written by Eric Young
69
+ * (eay@cryptsoft.com). This product includes software written by Tim
70
+ * Hudson (tjh@cryptsoft.com).
71
+ *
72
+ */
73
+
74
+ Original SSLeay License
75
+ -----------------------
76
+
77
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
78
+ * All rights reserved.
79
+ *
80
+ * This package is an SSL implementation written
81
+ * by Eric Young (eay@cryptsoft.com).
82
+ * The implementation was written so as to conform with Netscapes SSL.
83
+ *
84
+ * This library is free for commercial and non-commercial use as long as
85
+ * the following conditions are aheared to. The following conditions
86
+ * apply to all code found in this distribution, be it the RC4, RSA,
87
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
88
+ * included with this distribution is covered by the same copyright terms
89
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
90
+ *
91
+ * Copyright remains Eric Young's, and as such any Copyright notices in
92
+ * the code are not to be removed.
93
+ * If this package is used in a product, Eric Young should be given attribution
94
+ * as the author of the parts of the library used.
95
+ * This can be in the form of a textual message at program startup or
96
+ * in documentation (online or textual) provided with the package.
97
+ *
98
+ * Redistribution and use in source and binary forms, with or without
99
+ * modification, are permitted provided that the following conditions
100
+ * are met:
101
+ * 1. Redistributions of source code must retain the copyright
102
+ * notice, this list of conditions and the following disclaimer.
103
+ * 2. Redistributions in binary form must reproduce the above copyright
104
+ * notice, this list of conditions and the following disclaimer in the
105
+ * documentation and/or other materials provided with the distribution.
106
+ * 3. All advertising materials mentioning features or use of this software
107
+ * must display the following acknowledgement:
108
+ * "This product includes cryptographic software written by
109
+ * Eric Young (eay@cryptsoft.com)"
110
+ * The word 'cryptographic' can be left out if the rouines from the library
111
+ * being used are not cryptographic related :-).
112
+ * 4. If you include any Windows specific code (or a derivative thereof) from
113
+ * the apps directory (application code) you must include an acknowledgement:
114
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
115
+ *
116
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
117
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
118
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
119
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
120
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
121
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
122
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
123
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
124
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
125
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
126
+ * SUCH DAMAGE.
127
+ *
128
+ * The licence and distribution terms for any publically available version or
129
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
130
+ * copied and put under another distribution licence
131
+ * [including the GNU Public Licence.]
132
+ */
133
+
134
+
135
+ ISC license used for completely new code in BoringSSL:
136
+
137
+ /* Copyright (c) 2015, Google Inc.
138
+ *
139
+ * Permission to use, copy, modify, and/or distribute this software for any
140
+ * purpose with or without fee is hereby granted, provided that the above
141
+ * copyright notice and this permission notice appear in all copies.
142
+ *
143
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
144
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
145
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
146
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
147
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
148
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
149
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
150
+
151
+
152
+ Some files from Intel carry the following license:
153
+
154
+ # Copyright (c) 2012, Intel Corporation
155
+ #
156
+ # All rights reserved.
157
+ #
158
+ # Redistribution and use in source and binary forms, with or without
159
+ # modification, are permitted provided that the following conditions are
160
+ # met:
161
+ #
162
+ # * Redistributions of source code must retain the above copyright
163
+ # notice, this list of conditions and the following disclaimer.
164
+ #
165
+ # * Redistributions in binary form must reproduce the above copyright
166
+ # notice, this list of conditions and the following disclaimer in the
167
+ # documentation and/or other materials provided with the
168
+ # distribution.
169
+ #
170
+ # * Neither the name of the Intel Corporation nor the names of its
171
+ # contributors may be used to endorse or promote products derived from
172
+ # this software without specific prior written permission.
173
+ #
174
+ #
175
+ # THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY
176
+ # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
177
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
178
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
179
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
180
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
181
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
182
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
183
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
184
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
185
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,35 @@
1
+ # Copyright 2015 Brian Smith.
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 BRIAN SMITH AND THE AUTHORS DISCLAIM
8
+ # ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
9
+ # OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL BRIAN SMITH OR THE AUTHORS
10
+ # BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
11
+ # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
12
+ # AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+
15
+ include mk/top_of_makefile.mk
16
+
17
+ RING_PREFIX =
18
+
19
+ include mk/ring.mk
20
+
21
+ OBJS += \
22
+ $(RING_OBJS) \
23
+ $(RING_TEST_LIB_OBJS) \
24
+ $(RING_TEST_MAIN_OBJS) \
25
+ $(NULL)
26
+
27
+ LIBS += \
28
+ $(RING_LIB) \
29
+ $(NULL)
30
+
31
+ EXES += $(RING_TEST_EXES)
32
+
33
+ check:: check-ring
34
+
35
+ include mk/bottom_of_makefile.mk
@@ -0,0 +1,163 @@
1
+ # Porting from OpenSSL to BoringSSL
2
+
3
+ BoringSSL is an OpenSSL derivative and is mostly source-compatible, for the
4
+ subset of OpenSSL retained. Libraries ideally need little to no changes for
5
+ BoringSSL support, provided they do not use removed APIs. In general, see if the
6
+ library compiles and, on failure, consult the documentation in the header files
7
+ and see if problematic features can be removed.
8
+
9
+ In some cases, BoringSSL-specific code may be necessary. In that case, the
10
+ `OPENSSL_IS_BORINGSSL` preprocessor macro may be used in `#ifdef`s. This macro
11
+ should also be used in lieu of the presence of any particular function to detect
12
+ OpenSSL vs BoringSSL in configure scripts, etc., where those are necessary.
13
+
14
+ For convenience, BoringSSL defines upstream's `OPENSSL_NO_*` feature macros
15
+ corresponding to removed features. These may also be used to disable code which
16
+ uses a removed feature.
17
+
18
+ Note: BoringSSL does *not* have a stable API or ABI. It must be updated with its
19
+ consumers. It is not suitable for, say, a system library in a traditional Linux
20
+ distribution. For instance, Chromium statically links the specific revision of
21
+ BoringSSL it was built against. Likewise, Android's system-internal copy of
22
+ BoringSSL is not exposed by the NDK and must not be used by third-party
23
+ applications.
24
+
25
+
26
+ ## Major API changes
27
+
28
+ ### Integer types
29
+
30
+ Some APIs have been converted to use `size_t` for consistency and to avoid
31
+ integer overflows at the API boundary. (Existing logic uses a mismash of `int`,
32
+ `long`, and `unsigned`.) For the most part, implicit casts mean that existing
33
+ code continues to compile. In some cases, this may require BoringSSL-specific
34
+ code, particularly to avoid compiler warnings.
35
+
36
+ Most notably, the `STACK_OF(T)` types have all been converted to use `size_t`
37
+ instead of `int` for indices and lengths.
38
+
39
+ ### Reference counts
40
+
41
+ Some external consumers increment reference counts directly by calling
42
+ `CRYPTO_add` with the corresponding `CRYPTO_LOCK_*` value.
43
+
44
+ These APIs no longer exist in BoringSSL. Instead, code which increments
45
+ reference counts should call the corresponding `FOO_up_ref` function, such as
46
+ `EVP_PKEY_up_ref`. Note that not all of these APIs are present in OpenSSL and
47
+ may require `#ifdef`s.
48
+
49
+ ### Error codes
50
+
51
+ OpenSSL's errors are extremely specific, leaking internals of the library,
52
+ including even a function code for the function which emitted the error! As some
53
+ logic in BoringSSL has been rewritten, code which conditions on the error may
54
+ break (grep for `ERR_GET_REASON` and `ERR_GET_FUNC`). This danger also exists
55
+ when upgrading OpenSSL versions.
56
+
57
+ Where possible, avoid conditioning on the exact error reason. Otherwise, a
58
+ BoringSSL `#ifdef` may be necessary. Exactly how best to resolve this issue is
59
+ still being determined. It's possible some new APIs will be added in the future.
60
+
61
+ Function codes have been completely removed. Remove code which conditions on
62
+ these as it will break with the slightest change in the library, OpenSSL or
63
+ BoringSSL.
64
+
65
+ ### `*_ctrl` functions
66
+
67
+ Some OpenSSL APIs are implemented with `ioctl`-style functions such as
68
+ `SSL_ctrl` and `EVP_PKEY_CTX_ctrl`, combined with convenience macros, such as
69
+
70
+ # define SSL_CTX_set_mode(ctx,op) \
71
+ SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)
72
+
73
+ In BoringSSL, these macros have been replaced with proper functions. The
74
+ underlying `_ctrl` functions have been removed.
75
+
76
+ For convenience, `SSL_CTRL_*` values are retained as macros to `doesnt_exist` so
77
+ existing code which uses them (or the wrapper macros) in `#ifdef` expressions
78
+ will continue to function. However, the macros themselves will not work.
79
+
80
+ Switch any `*_ctrl` callers to the macro/function versions. This works in both
81
+ OpenSSL and BoringSSL. Note that BoringSSL's function versions will be
82
+ type-checked and may require more care with types.
83
+
84
+ ### HMAC `EVP_PKEY`s
85
+
86
+ `EVP_PKEY_HMAC` is removed. Use the `HMAC_*` functions in `hmac.h` instead. This
87
+ is compatible with OpenSSL.
88
+
89
+ ### DSA `EVP_PKEY`s
90
+
91
+ `EVP_PKEY_DSA` is deprecated. It is currently still possible to parse DER into a
92
+ DSA `EVP_PKEY`, but signing or verifying with those objects will not work.
93
+
94
+ ### DES
95
+
96
+ The `DES_cblock` type has been switched from an array to a struct to avoid the
97
+ pitfalls around array types in C. Where features which require DES cannot be
98
+ disabled, BoringSSL-specific codepaths may be necessary.
99
+
100
+ ### TLS renegotiation
101
+
102
+ OpenSSL enables TLS renegotiation by default and accepts renegotiation requests
103
+ from the peer transparently. Renegotiation is an extremely problematic protocol
104
+ feature, so BoringSSL rejects peer renegotiations by default.
105
+
106
+ To enable renegotiation, call `SSL_set_reject_peer_renegotiations` and set it to
107
+ off. Renegotiation is only supported as a client in SSL3/TLS and the
108
+ HelloRequest must be received at a quiet point in the application protocol. This
109
+ is sufficient to support the common use of requesting a new client certificate
110
+ between an HTTP request and response in (unpipelined) HTTP/1.1.
111
+
112
+ Things which do not work:
113
+
114
+ * There is no support for renegotiation as a server.
115
+
116
+ * There is no support for renegotiation in DTLS.
117
+
118
+ * There is no support for initiating renegotiation; `SSL_renegotiate` always
119
+ fails and `SSL_set_state` does nothing.
120
+
121
+ * Interleaving application data with the new handshake is forbidden.
122
+
123
+ * If a HelloRequest is received while `SSL_write` has unsent application data,
124
+ the renegotiation is rejected.
125
+
126
+ ### Lowercase hexadecimal
127
+
128
+ BoringSSL's `BN_bn2hex` function uses lowercase hexadecimal digits instead of
129
+ uppercase. Some code may require changes to avoid being sensitive to this
130
+ difference.
131
+
132
+
133
+ ## Optional BoringSSL-specific simplifications
134
+
135
+ BoringSSL makes some changes to OpenSSL which simplify the API but remain
136
+ compatible with OpenSSL consumers. In general, consult the BoringSSL
137
+ documentation for any functions in new BoringSSL-only code.
138
+
139
+ ### Return values
140
+
141
+ Most OpenSSL APIs return 1 on success and either 0 or -1 on failure. BoringSSL
142
+ has narrowed most of these to 1 on success and 0 on failure. BoringSSL-specific
143
+ code may take advantage of the less error-prone APIs and use `!` to check for
144
+ errors.
145
+
146
+ ### Initialization
147
+
148
+ OpenSSL has a number of different initialization functions for setting up error
149
+ strings and loading algorithms, etc. All of these functions still exist in
150
+ BoringSSL for convenience, but they do nothing and are not necessary.
151
+
152
+ The one exception is `CRYPTO_library_init`. In `BORINGSSL_NO_STATIC_INITIALIZER`
153
+ builds, it must be called to query CPU capabitilies before the rest of the
154
+ library. In the default configuration, this is done with a static initializer
155
+ and is also unnecessary.
156
+
157
+ ### Threading
158
+
159
+ OpenSSL provides a number of APIs to configure threading callbacks and set up
160
+ locks. Without initializing these, the library is not thread-safe. Configuring
161
+ these does nothing in BoringSSL. Instead, BoringSSL calls pthreads and the
162
+ corresponding Windows APIs internally and is always thread-safe where the API
163
+ guarantees it.