android_key_attestation 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -2
- data/Gemfile.lock +1 -1
- data/lib/android_key_attestation.rb +3 -0
- data/lib/android_key_attestation/google_hardware_attestation_root.pem +31 -0
- data/lib/android_key_attestation/statement.rb +13 -0
- data/lib/android_key_attestation/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80a822b17938c94650c9a22a6aa11f984774ceb095fa2f21907dffe635471f9d
|
4
|
+
data.tar.gz: 00b086c968d927e5e1c71639922255bd3e664120e8246a2be7998a28b72b17ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb59d0fcba2c3c65b73a9e3500e812e7229acb9dc56a75bc981258b70c62c215215f21a6382ac31452bf5c8fdf0cabdf9aa17204ba0015280466638245d40423
|
7
|
+
data.tar.gz: 7c588c47e006d3270de6c5ebca545b9bb8468ed4974d88d4c45cc5ddd756752655c6017118ef9feebf76358fff0733ce784b431629f861466a3df6471c57907b
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [Unreleased]
|
8
|
+
|
9
|
+
## [0.3.0] - 2020-02-16
|
10
|
+
### Added
|
11
|
+
- `Statement#verify_certificate_chain` to verify if the attestation certificate is trustworthy
|
12
|
+
|
7
13
|
## [0.2.0] - 2019-12-31
|
8
14
|
### Changed
|
9
15
|
- Raise `ChallengeMismatchError` if the challenge lengths are different, not `ArgumentError`
|
@@ -12,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
12
18
|
### Added
|
13
19
|
- Extracted from [webauthn-ruby](https://github.com/cedarcode/webauthn-ruby) after discussion with the maintainers. Thanks for the feedback @grzuy and @brauliomartinezlm!
|
14
20
|
|
15
|
-
[Unreleased]: https://github.com/bdewater/android_key_attestation/compare/v0.
|
16
|
-
[0.
|
21
|
+
[Unreleased]: https://github.com/bdewater/android_key_attestation/compare/v0.3.0...HEAD
|
22
|
+
[0.3.0]: https://github.com/bdewater/android_key_attestation/compare/v0.2.0...v0.3.0
|
23
|
+
[0.2.0]: https://github.com/bdewater/android_key_attestation/compare/v0.1.0...v0.2.0
|
17
24
|
[0.1.0]: https://github.com/bdewater/android_key_attestation/releases/tag/v0.1.0
|
data/Gemfile.lock
CHANGED
@@ -4,6 +4,9 @@ module AndroidKeyAttestation
|
|
4
4
|
class Error < StandardError; end
|
5
5
|
class ExtensionMissingError < Error; end
|
6
6
|
class ChallengeMismatchError < Error; end
|
7
|
+
class CertificateVerificationError < Error; end
|
8
|
+
|
9
|
+
GEM_ROOT = File.expand_path(__dir__)
|
7
10
|
end
|
8
11
|
|
9
12
|
require_relative "android_key_attestation/statement"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
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
|
31
|
+
-----END CERTIFICATE-----
|
@@ -8,6 +8,10 @@ require_relative "fixed_length_secure_compare"
|
|
8
8
|
module AndroidKeyAttestation
|
9
9
|
class Statement
|
10
10
|
EXTENSION_DATA_OID = "1.3.6.1.4.1.11129.2.1.17"
|
11
|
+
GOOGLE_ROOT_CERTIFICATES = begin
|
12
|
+
file = File.read(File.join(GEM_ROOT, "android_key_attestation", "google_hardware_attestation_root.pem"))
|
13
|
+
[OpenSSL::X509::Certificate.new(file)]
|
14
|
+
end.freeze
|
11
15
|
|
12
16
|
extend Forwardable
|
13
17
|
def_delegators :key_description, :attestation_version, :attestation_security_level, :keymaster_version,
|
@@ -30,6 +34,15 @@ module AndroidKeyAttestation
|
|
30
34
|
raise(ChallengeMismatchError)
|
31
35
|
end
|
32
36
|
|
37
|
+
def verify_certificate_chain(root_certificates: GOOGLE_ROOT_CERTIFICATES, time: Time.now)
|
38
|
+
store = OpenSSL::X509::Store.new
|
39
|
+
root_certificates.each { |cert| store.add_cert(cert) }
|
40
|
+
store.time = time
|
41
|
+
|
42
|
+
store.verify(attestation_certificate, @certificates[1..-1]) ||
|
43
|
+
raise(CertificateVerificationError, store.error_string)
|
44
|
+
end
|
45
|
+
|
33
46
|
def key_description
|
34
47
|
@key_description ||= begin
|
35
48
|
extension_data = attestation_certificate.extensions.detect { |ext| ext.oid == EXTENSION_DATA_OID }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: android_key_attestation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bart de Water
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- lib/android_key_attestation.rb
|
91
91
|
- lib/android_key_attestation/authorization_list.rb
|
92
92
|
- lib/android_key_attestation/fixed_length_secure_compare.rb
|
93
|
+
- lib/android_key_attestation/google_hardware_attestation_root.pem
|
93
94
|
- lib/android_key_attestation/key_description.rb
|
94
95
|
- lib/android_key_attestation/statement.rb
|
95
96
|
- lib/android_key_attestation/version.rb
|
@@ -115,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
116
|
- !ruby/object:Gem::Version
|
116
117
|
version: '0'
|
117
118
|
requirements: []
|
118
|
-
rubygems_version: 3.
|
119
|
+
rubygems_version: 3.0.3
|
119
120
|
signing_key:
|
120
121
|
specification_version: 4
|
121
122
|
summary: Android key attestation verification
|