ring-native 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![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.
|
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.
|