class Virgil::SDK::Client::CardValidator
Class used for cards signatures validation.
Constants
- SERVICE_CARD_ID
- SERVICE_PUBLIC_KEY
Attributes
crypto[R]
verifiers[R]
Public Class Methods
new(crypto)
click to toggle source
# File lib/virgil/sdk/client/card_validator.rb, line 48 def initialize(crypto) @crypto = crypto @public_key_bytes = Crypto::Bytes.from_base64(SERVICE_PUBLIC_KEY) @public_key = crypto.import_public_key(@public_key_bytes) @verifiers = { SERVICE_CARD_ID => @public_key } end
Public Instance Methods
add_verifier(card_id, public_key)
click to toggle source
Add signature verifier.
Args:
card_id: Card identifier public_key: Public key used for signature verification.
# File lib/virgil/sdk/client/card_validator.rb, line 62 def add_verifier(card_id, public_key) @verifiers[card_id] = public_key end
is_valid?(card)
click to toggle source
Validates Card
using verifiers.
Args:
card: Card for validation.
Returns:
True if card signatures are valid, false otherwise.
# File lib/virgil/sdk/client/card_validator.rb, line 72 def is_valid?(card) return true if (card.version == '3.0') if (card.nil? || !card.is_a?(Card) || card.snapshot.nil? || (card.signatures.nil? || card.signatures.empty?)) return false end # add self signature verifier fingerprint = self.crypto.calculate_fingerprint( Crypto::Bytes.from_string(card.snapshot) ) fingerprint_hex = fingerprint.to_hex return false if fingerprint_hex != card.id verifiers = self.verifiers.clone card_public_key = self.crypto.import_public_key(card.public_key) verifiers[fingerprint_hex] = card_public_key verifiers.each do |id, key| unless card.signatures.has_key?(id) return false end is_valid = self.crypto.verify( fingerprint.value, Crypto::Bytes.from_base64(card.signatures[id]), key ) return false unless is_valid end true end