Class: Moxml::Signature::Algorithms::SignatureMethodBase

Inherits:
Object
  • Object
show all
Defined in:
lib/moxml/signature/algorithms/signature_method_base.rb

Overview

Base class for signature methods and MACs.

Subclasses declare an identifier URI per W3C spec §6.4 / §6.3 and implement #compute_signature and #verify_signature.

key is whatever OpenSSL expects (OpenSSL::PKey::RSA for RSA, a String secret for HMAC, etc.).

Direct Known Subclasses

DsaSha, EcdsaSha, HmacSha, RsaPkcs1Sha

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parameters = nil) ⇒ SignatureMethodBase

Optional constructor for parameterized methods (e.g. HMACOutputLength).



25
26
27
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 25

def initialize(parameters = nil)
  @parameters = parameters
end

Class Attribute Details

.digest_uriObject (readonly)

Returns the value of attribute digest_uri.



15
16
17
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 15

def digest_uri
  @digest_uri
end

.identifier_uriObject (readonly)

Returns the value of attribute identifier_uri.



15
16
17
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 15

def identifier_uri
  @identifier_uri
end

Class Method Details

.identifier(uri, digest_uri: nil) ⇒ Object



17
18
19
20
21
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 17

def identifier(uri, digest_uri: nil)
  @identifier_uri = uri
  @digest_uri = digest_uri
  Algorithms.register(:signature_method, uri, self)
end

Instance Method Details

#compute_signature(_data, _key) ⇒ Object



46
47
48
49
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 46

def compute_signature(_data, _key)
  raise NotImplementedError,
        "#{self.class} must implement #compute_signature"
end

#sign(data, key) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 29

def sign(data, key)
  compute_signature(data, key)
rescue OpenSSL::PKey::PKeyError => e
  raise SigningError.new(
    "signing failed: #{e.class}",
    algorithm: self.class.identifier_uri,
  )
end

#verify(data, key, signature) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 38

def verify(data, key, signature)
  verify_signature(data, key, signature)
rescue OpenSSL::PKey::PKeyError => e
  raise VerificationError.new(
    "verification raised: #{e.class}",
  )
end

#verify_signature(_data, _key, _signature) ⇒ Object



51
52
53
54
# File 'lib/moxml/signature/algorithms/signature_method_base.rb', line 51

def verify_signature(_data, _key, _signature)
  raise NotImplementedError,
        "#{self.class} must implement #verify_signature"
end