ring-native 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
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.