Sha256: 5cf4779f0007eee4b7273a16a4958b7f0e003fff9358d5b1396e035dbd0dfd1c
Contents?: true
Size: 1.35 KB
Versions: 1
Compression:
Stored size: 1.35 KB
Contents
# frozen_string_literal: true require "forwardable" require "openssl" require_relative "key_description" require_relative "fixed_length_secure_compare" module AndroidKeyAttestation class Statement EXTENSION_DATA_OID = "1.3.6.1.4.1.11129.2.1.17" extend Forwardable def_delegators :key_description, :attestation_version, :attestation_security_level, :keymaster_version, :keymaster_security_level, :unique_id, :tee_enforced, :software_enforced using FixedLengthSecureCompare def initialize(*certificates) @certificates = certificates end def attestation_certificate @certificates.first end def verify_challenge(challenge) attestation_challenge = key_description.attestation_challenge attestation_challenge.bytesize == challenge.bytesize && OpenSSL.fixed_length_secure_compare(attestation_challenge, challenge) || raise(ChallengeMismatchError) end def key_description @key_description ||= begin extension_data = attestation_certificate.extensions.detect { |ext| ext.oid == EXTENSION_DATA_OID } raise AndroidKeyAttestation::ExtensionMissingError unless extension_data raw_key_description = OpenSSL::ASN1.decode(extension_data).value.last KeyDescription.new(OpenSSL::ASN1.decode(raw_key_description.value).value) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
android_key_attestation-0.2.0 | lib/android_key_attestation/statement.rb |