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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/Gemfile +3 -0
- data/README.md +22 -0
- data/Rakefile +1 -0
- data/ext/ring/extconf.rb +29 -0
- data/lib/ring/native.rb +8 -0
- data/lib/ring/native/version.rb +5 -0
- data/ring-native.gemspec +25 -0
- data/vendor/ring/BUILDING.md +40 -0
- data/vendor/ring/Cargo.toml +43 -0
- data/vendor/ring/LICENSE +185 -0
- data/vendor/ring/Makefile +35 -0
- data/vendor/ring/PORTING.md +163 -0
- data/vendor/ring/README.md +113 -0
- data/vendor/ring/STYLE.md +197 -0
- data/vendor/ring/appveyor.yml +27 -0
- data/vendor/ring/build.rs +108 -0
- data/vendor/ring/crypto/aes/aes.c +1142 -0
- data/vendor/ring/crypto/aes/aes_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/aes/aes_test.cc +93 -0
- data/vendor/ring/crypto/aes/asm/aes-586.pl +2368 -0
- data/vendor/ring/crypto/aes/asm/aes-armv4.pl +1249 -0
- data/vendor/ring/crypto/aes/asm/aes-x86_64.pl +2246 -0
- data/vendor/ring/crypto/aes/asm/aesni-x86.pl +1318 -0
- data/vendor/ring/crypto/aes/asm/aesni-x86_64.pl +2084 -0
- data/vendor/ring/crypto/aes/asm/aesv8-armx.pl +675 -0
- data/vendor/ring/crypto/aes/asm/bsaes-armv7.pl +1364 -0
- data/vendor/ring/crypto/aes/asm/bsaes-x86_64.pl +1565 -0
- data/vendor/ring/crypto/aes/asm/vpaes-x86.pl +841 -0
- data/vendor/ring/crypto/aes/asm/vpaes-x86_64.pl +1116 -0
- data/vendor/ring/crypto/aes/internal.h +87 -0
- data/vendor/ring/crypto/aes/mode_wrappers.c +61 -0
- data/vendor/ring/crypto/bn/add.c +394 -0
- data/vendor/ring/crypto/bn/asm/armv4-mont.pl +694 -0
- data/vendor/ring/crypto/bn/asm/armv8-mont.pl +1503 -0
- data/vendor/ring/crypto/bn/asm/bn-586.pl +774 -0
- data/vendor/ring/crypto/bn/asm/co-586.pl +287 -0
- data/vendor/ring/crypto/bn/asm/rsaz-avx2.pl +1882 -0
- data/vendor/ring/crypto/bn/asm/x86-mont.pl +592 -0
- data/vendor/ring/crypto/bn/asm/x86_64-gcc.c +599 -0
- data/vendor/ring/crypto/bn/asm/x86_64-mont.pl +1393 -0
- data/vendor/ring/crypto/bn/asm/x86_64-mont5.pl +3507 -0
- data/vendor/ring/crypto/bn/bn.c +352 -0
- data/vendor/ring/crypto/bn/bn_asn1.c +74 -0
- data/vendor/ring/crypto/bn/bn_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/bn/bn_test.cc +1696 -0
- data/vendor/ring/crypto/bn/cmp.c +200 -0
- data/vendor/ring/crypto/bn/convert.c +433 -0
- data/vendor/ring/crypto/bn/ctx.c +311 -0
- data/vendor/ring/crypto/bn/div.c +594 -0
- data/vendor/ring/crypto/bn/exponentiation.c +1335 -0
- data/vendor/ring/crypto/bn/gcd.c +711 -0
- data/vendor/ring/crypto/bn/generic.c +1019 -0
- data/vendor/ring/crypto/bn/internal.h +316 -0
- data/vendor/ring/crypto/bn/montgomery.c +516 -0
- data/vendor/ring/crypto/bn/mul.c +888 -0
- data/vendor/ring/crypto/bn/prime.c +829 -0
- data/vendor/ring/crypto/bn/random.c +334 -0
- data/vendor/ring/crypto/bn/rsaz_exp.c +262 -0
- data/vendor/ring/crypto/bn/rsaz_exp.h +53 -0
- data/vendor/ring/crypto/bn/shift.c +276 -0
- data/vendor/ring/crypto/bytestring/bytestring_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/bytestring/bytestring_test.cc +421 -0
- data/vendor/ring/crypto/bytestring/cbb.c +399 -0
- data/vendor/ring/crypto/bytestring/cbs.c +227 -0
- data/vendor/ring/crypto/bytestring/internal.h +46 -0
- data/vendor/ring/crypto/chacha/chacha_generic.c +140 -0
- data/vendor/ring/crypto/chacha/chacha_vec.c +323 -0
- data/vendor/ring/crypto/chacha/chacha_vec_arm.S +1447 -0
- data/vendor/ring/crypto/chacha/chacha_vec_arm_generate.go +153 -0
- data/vendor/ring/crypto/cipher/cipher_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/cipher/e_aes.c +390 -0
- data/vendor/ring/crypto/cipher/e_chacha20poly1305.c +208 -0
- data/vendor/ring/crypto/cipher/internal.h +173 -0
- data/vendor/ring/crypto/cipher/test/aes_128_gcm_tests.txt +543 -0
- data/vendor/ring/crypto/cipher/test/aes_128_key_wrap_tests.txt +9 -0
- data/vendor/ring/crypto/cipher/test/aes_256_gcm_tests.txt +475 -0
- data/vendor/ring/crypto/cipher/test/aes_256_key_wrap_tests.txt +23 -0
- data/vendor/ring/crypto/cipher/test/chacha20_poly1305_old_tests.txt +422 -0
- data/vendor/ring/crypto/cipher/test/chacha20_poly1305_tests.txt +484 -0
- data/vendor/ring/crypto/cipher/test/cipher_test.txt +100 -0
- data/vendor/ring/crypto/constant_time_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/constant_time_test.c +304 -0
- data/vendor/ring/crypto/cpu-arm-asm.S +32 -0
- data/vendor/ring/crypto/cpu-arm.c +199 -0
- data/vendor/ring/crypto/cpu-intel.c +261 -0
- data/vendor/ring/crypto/crypto.c +151 -0
- data/vendor/ring/crypto/curve25519/asm/x25519-arm.S +2118 -0
- data/vendor/ring/crypto/curve25519/curve25519.c +4888 -0
- data/vendor/ring/crypto/curve25519/x25519_test.cc +128 -0
- data/vendor/ring/crypto/digest/md32_common.h +181 -0
- data/vendor/ring/crypto/ec/asm/p256-x86_64-asm.pl +2725 -0
- data/vendor/ring/crypto/ec/ec.c +193 -0
- data/vendor/ring/crypto/ec/ec_curves.c +61 -0
- data/vendor/ring/crypto/ec/ec_key.c +228 -0
- data/vendor/ring/crypto/ec/ec_montgomery.c +114 -0
- data/vendor/ring/crypto/ec/example_mul.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/ec/internal.h +243 -0
- data/vendor/ring/crypto/ec/oct.c +253 -0
- data/vendor/ring/crypto/ec/p256-64.c +1794 -0
- data/vendor/ring/crypto/ec/p256-x86_64-table.h +9548 -0
- data/vendor/ring/crypto/ec/p256-x86_64.c +509 -0
- data/vendor/ring/crypto/ec/simple.c +1007 -0
- data/vendor/ring/crypto/ec/util-64.c +183 -0
- data/vendor/ring/crypto/ec/wnaf.c +508 -0
- data/vendor/ring/crypto/ecdh/ecdh.c +155 -0
- data/vendor/ring/crypto/ecdsa/ecdsa.c +304 -0
- data/vendor/ring/crypto/ecdsa/ecdsa_asn1.c +193 -0
- data/vendor/ring/crypto/ecdsa/ecdsa_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/ecdsa/ecdsa_test.cc +327 -0
- data/vendor/ring/crypto/header_removed.h +17 -0
- data/vendor/ring/crypto/internal.h +495 -0
- data/vendor/ring/crypto/libring.Windows.vcxproj +101 -0
- data/vendor/ring/crypto/mem.c +98 -0
- data/vendor/ring/crypto/modes/asm/aesni-gcm-x86_64.pl +1045 -0
- data/vendor/ring/crypto/modes/asm/ghash-armv4.pl +517 -0
- data/vendor/ring/crypto/modes/asm/ghash-x86.pl +1393 -0
- data/vendor/ring/crypto/modes/asm/ghash-x86_64.pl +1741 -0
- data/vendor/ring/crypto/modes/asm/ghashv8-armx.pl +422 -0
- data/vendor/ring/crypto/modes/ctr.c +226 -0
- data/vendor/ring/crypto/modes/gcm.c +1206 -0
- data/vendor/ring/crypto/modes/gcm_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/modes/gcm_test.c +348 -0
- data/vendor/ring/crypto/modes/internal.h +299 -0
- data/vendor/ring/crypto/perlasm/arm-xlate.pl +170 -0
- data/vendor/ring/crypto/perlasm/readme +100 -0
- data/vendor/ring/crypto/perlasm/x86_64-xlate.pl +1164 -0
- data/vendor/ring/crypto/perlasm/x86asm.pl +292 -0
- data/vendor/ring/crypto/perlasm/x86gas.pl +263 -0
- data/vendor/ring/crypto/perlasm/x86masm.pl +200 -0
- data/vendor/ring/crypto/perlasm/x86nasm.pl +187 -0
- data/vendor/ring/crypto/poly1305/poly1305.c +331 -0
- data/vendor/ring/crypto/poly1305/poly1305_arm.c +301 -0
- data/vendor/ring/crypto/poly1305/poly1305_arm_asm.S +2015 -0
- data/vendor/ring/crypto/poly1305/poly1305_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/poly1305/poly1305_test.cc +80 -0
- data/vendor/ring/crypto/poly1305/poly1305_test.txt +52 -0
- data/vendor/ring/crypto/poly1305/poly1305_vec.c +892 -0
- data/vendor/ring/crypto/rand/asm/rdrand-x86_64.pl +75 -0
- data/vendor/ring/crypto/rand/internal.h +32 -0
- data/vendor/ring/crypto/rand/rand.c +189 -0
- data/vendor/ring/crypto/rand/urandom.c +219 -0
- data/vendor/ring/crypto/rand/windows.c +56 -0
- data/vendor/ring/crypto/refcount_c11.c +66 -0
- data/vendor/ring/crypto/refcount_lock.c +53 -0
- data/vendor/ring/crypto/refcount_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/refcount_test.c +58 -0
- data/vendor/ring/crypto/rsa/blinding.c +462 -0
- data/vendor/ring/crypto/rsa/internal.h +108 -0
- data/vendor/ring/crypto/rsa/padding.c +300 -0
- data/vendor/ring/crypto/rsa/rsa.c +450 -0
- data/vendor/ring/crypto/rsa/rsa_asn1.c +261 -0
- data/vendor/ring/crypto/rsa/rsa_impl.c +944 -0
- data/vendor/ring/crypto/rsa/rsa_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/rsa/rsa_test.cc +437 -0
- data/vendor/ring/crypto/sha/asm/sha-armv8.pl +436 -0
- data/vendor/ring/crypto/sha/asm/sha-x86_64.pl +2390 -0
- data/vendor/ring/crypto/sha/asm/sha256-586.pl +1275 -0
- data/vendor/ring/crypto/sha/asm/sha256-armv4.pl +735 -0
- data/vendor/ring/crypto/sha/asm/sha256-armv8.pl +14 -0
- data/vendor/ring/crypto/sha/asm/sha256-x86_64.pl +14 -0
- data/vendor/ring/crypto/sha/asm/sha512-586.pl +911 -0
- data/vendor/ring/crypto/sha/asm/sha512-armv4.pl +666 -0
- data/vendor/ring/crypto/sha/asm/sha512-armv8.pl +14 -0
- data/vendor/ring/crypto/sha/asm/sha512-x86_64.pl +14 -0
- data/vendor/ring/crypto/sha/sha1.c +271 -0
- data/vendor/ring/crypto/sha/sha256.c +204 -0
- data/vendor/ring/crypto/sha/sha512.c +355 -0
- data/vendor/ring/crypto/test/file_test.cc +326 -0
- data/vendor/ring/crypto/test/file_test.h +181 -0
- data/vendor/ring/crypto/test/malloc.cc +150 -0
- data/vendor/ring/crypto/test/scoped_types.h +95 -0
- data/vendor/ring/crypto/test/test.Windows.vcxproj +35 -0
- data/vendor/ring/crypto/test/test_util.cc +46 -0
- data/vendor/ring/crypto/test/test_util.h +41 -0
- data/vendor/ring/crypto/thread_none.c +55 -0
- data/vendor/ring/crypto/thread_pthread.c +165 -0
- data/vendor/ring/crypto/thread_test.Windows.vcxproj +25 -0
- data/vendor/ring/crypto/thread_test.c +200 -0
- data/vendor/ring/crypto/thread_win.c +282 -0
- data/vendor/ring/examples/checkdigest.rs +103 -0
- data/vendor/ring/include/openssl/aes.h +121 -0
- data/vendor/ring/include/openssl/arm_arch.h +129 -0
- data/vendor/ring/include/openssl/base.h +156 -0
- data/vendor/ring/include/openssl/bn.h +794 -0
- data/vendor/ring/include/openssl/buffer.h +18 -0
- data/vendor/ring/include/openssl/bytestring.h +235 -0
- data/vendor/ring/include/openssl/chacha.h +37 -0
- data/vendor/ring/include/openssl/cmac.h +76 -0
- data/vendor/ring/include/openssl/cpu.h +184 -0
- data/vendor/ring/include/openssl/crypto.h +43 -0
- data/vendor/ring/include/openssl/curve25519.h +88 -0
- data/vendor/ring/include/openssl/ec.h +225 -0
- data/vendor/ring/include/openssl/ec_key.h +129 -0
- data/vendor/ring/include/openssl/ecdh.h +110 -0
- data/vendor/ring/include/openssl/ecdsa.h +156 -0
- data/vendor/ring/include/openssl/err.h +201 -0
- data/vendor/ring/include/openssl/mem.h +101 -0
- data/vendor/ring/include/openssl/obj_mac.h +71 -0
- data/vendor/ring/include/openssl/opensslfeatures.h +68 -0
- data/vendor/ring/include/openssl/opensslv.h +18 -0
- data/vendor/ring/include/openssl/ossl_typ.h +18 -0
- data/vendor/ring/include/openssl/poly1305.h +51 -0
- data/vendor/ring/include/openssl/rand.h +70 -0
- data/vendor/ring/include/openssl/rsa.h +399 -0
- data/vendor/ring/include/openssl/thread.h +133 -0
- data/vendor/ring/include/openssl/type_check.h +71 -0
- data/vendor/ring/mk/Common.props +63 -0
- data/vendor/ring/mk/Windows.props +42 -0
- data/vendor/ring/mk/WindowsTest.props +18 -0
- data/vendor/ring/mk/appveyor.bat +62 -0
- data/vendor/ring/mk/bottom_of_makefile.mk +54 -0
- data/vendor/ring/mk/ring.mk +266 -0
- data/vendor/ring/mk/top_of_makefile.mk +214 -0
- data/vendor/ring/mk/travis.sh +40 -0
- data/vendor/ring/mk/update-travis-yml.py +229 -0
- data/vendor/ring/ring.sln +153 -0
- data/vendor/ring/src/aead.rs +682 -0
- data/vendor/ring/src/agreement.rs +248 -0
- data/vendor/ring/src/c.rs +129 -0
- data/vendor/ring/src/constant_time.rs +37 -0
- data/vendor/ring/src/der.rs +96 -0
- data/vendor/ring/src/digest.rs +690 -0
- data/vendor/ring/src/digest_tests.txt +57 -0
- data/vendor/ring/src/ecc.rs +28 -0
- data/vendor/ring/src/ecc_build.rs +279 -0
- data/vendor/ring/src/ecc_curves.rs +117 -0
- data/vendor/ring/src/ed25519_tests.txt +2579 -0
- data/vendor/ring/src/exe_tests.rs +46 -0
- data/vendor/ring/src/ffi.rs +29 -0
- data/vendor/ring/src/file_test.rs +187 -0
- data/vendor/ring/src/hkdf.rs +153 -0
- data/vendor/ring/src/hkdf_tests.txt +59 -0
- data/vendor/ring/src/hmac.rs +414 -0
- data/vendor/ring/src/hmac_tests.txt +97 -0
- data/vendor/ring/src/input.rs +312 -0
- data/vendor/ring/src/lib.rs +41 -0
- data/vendor/ring/src/pbkdf2.rs +265 -0
- data/vendor/ring/src/pbkdf2_tests.txt +113 -0
- data/vendor/ring/src/polyfill.rs +57 -0
- data/vendor/ring/src/rand.rs +28 -0
- data/vendor/ring/src/signature.rs +314 -0
- data/vendor/ring/third-party/NIST/README.md +9 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA1LongMsg.rsp +263 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA1Monte.rsp +309 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA1ShortMsg.rsp +267 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA224LongMsg.rsp +263 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA224Monte.rsp +309 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA224ShortMsg.rsp +267 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA256LongMsg.rsp +263 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA256Monte.rsp +309 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA256ShortMsg.rsp +267 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA384LongMsg.rsp +519 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA384Monte.rsp +309 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA384ShortMsg.rsp +523 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA512LongMsg.rsp +519 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA512Monte.rsp +309 -0
- data/vendor/ring/third-party/NIST/SHAVS/SHA512ShortMsg.rsp +523 -0
- data/vendor/ring/third-party/NIST/sha256sums.txt +1 -0
- metadata +333 -0
checksums.yaml
ADDED
|
@@ -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
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
ring-native
|
|
2
|
+
===========
|
|
3
|
+
[](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.
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
data/ext/ring/extconf.rb
ADDED
|
@@ -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) }
|
data/lib/ring/native.rb
ADDED
data/ring-native.gemspec
ADDED
|
@@ -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
|
data/vendor/ring/LICENSE
ADDED
|
@@ -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.
|