class COSE::Sign

Constants

CONTEXT

Attributes

payload[R]
signatures[R]

Public Class Methods

keyword_arguments_for_initialize(decoded) click to toggle source
# File lib/cose/sign.rb, line 14
def self.keyword_arguments_for_initialize(decoded)
  { payload: decoded[0], signatures: decoded[1].map { |s| COSE::Signature.from_array(s) } }
end
new(payload:, signatures:, **keyword_arguments) click to toggle source
Calls superclass method COSE::SecurityMessage::new
# File lib/cose/sign.rb, line 22
def initialize(payload:, signatures:, **keyword_arguments)
  super(**keyword_arguments)

  @payload = payload
  @signatures = signatures
end
tag() click to toggle source
# File lib/cose/sign.rb, line 18
def self.tag
  98
end

Public Instance Methods

verify(key, external_aad = nil) click to toggle source
# File lib/cose/sign.rb, line 29
def verify(key, external_aad = nil)
  signature = signatures.detect { |s| s.headers.kid == key.kid }

  if signature
    signature.algorithm.verify(key, signature.signature, verification_data(signature, external_aad))
  else
    raise(COSE::Error, "No signature matches key kid")
  end
end

Private Instance Methods

verification_data(signature, external_aad = nil) click to toggle source
# File lib/cose/sign.rb, line 41
def verification_data(signature, external_aad = nil)
  @verification_data ||=
    CBOR.encode(
      [
        CONTEXT,
        serialized_map(protected_headers),
        serialized_map(signature.protected_headers),
        external_aad || ZERO_LENGTH_BIN_STRING,
        payload
      ]
    )
end