lib/cose/sign1.rb in cose-0.8.0 vs lib/cose/sign1.rb in cose-0.9.0
- old
+ new
@@ -1,19 +1,42 @@
+# frozen_string_literal: true
+
require "cbor"
+require "cose/error"
require "cose/security_message"
module COSE
class Sign1 < SecurityMessage
+ CONTEXT = "Signature1"
+
attr_reader :payload, :signature
def self.keyword_arguments_for_initialize(decoded)
- { payload: CBOR.decode(decoded[0]), signature: decoded[1] }
+ { payload: decoded[0], signature: decoded[1] }
end
+ def self.tag
+ 18
+ end
+
def initialize(payload:, signature:, **keyword_arguments)
super(**keyword_arguments)
@payload = payload
@signature = signature
+ end
+
+ def verify(key, external_aad = nil)
+ if key.kid == headers.kid
+ algorithm.verify(key, signature, verification_data(external_aad))
+ else
+ raise(COSE::Error, "Non matching kid")
+ end
+ end
+
+ private
+
+ def verification_data(external_aad = nil)
+ CBOR.encode([CONTEXT, serialized_map(protected_headers), external_aad || ZERO_LENGTH_BIN_STRING, payload])
end
end
end