Class: Moxml::Signature::Algorithms::DigestBase

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

Overview

Base class for message digest algorithms (SHA family).

Subclasses MUST declare:

- `identifier "http://..."` to register
- either `digest_bits N` and `openssl_digest_name "SHA256"` etc.,
OR override `#compute_digest`.

Direct Known Subclasses

SHA1, SHA224, SHA256, SHA384, SHA512

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.digest_size_bitsObject (readonly)

Returns the value of attribute digest_size_bits.



17
18
19
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 17

def digest_size_bits
  @digest_size_bits
end

.identifier_uriObject (readonly)

Returns the value of attribute identifier_uri.



17
18
19
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 17

def identifier_uri
  @identifier_uri
end

Class Method Details

.digest_bits(bits) ⇒ Object



24
25
26
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 24

def digest_bits(bits)
  @digest_size_bits = bits
end

.identifier(uri) ⇒ Object



19
20
21
22
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 19

def identifier(uri)
  @identifier_uri = uri
  Algorithms.register(:digest, uri, self)
end

.openssl_digest_name(name) ⇒ Object



28
29
30
31
32
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 28

def openssl_digest_name(name)
  define_method(:compute_digest) do |data|
    OpenSSL::Digest.digest(name, data)
  end
end

Instance Method Details

#compute_digest(_data) ⇒ Object



43
44
45
46
47
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 43

def compute_digest(_data)
  raise NotImplementedError,
        "#{self.class} must implement #compute_digest " \
        "or declare openssl_digest_name"
end

#digest(data) ⇒ Object



35
36
37
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 35

def digest(data)
  compute_digest(data.to_s)
end

#digest_base64(data) ⇒ Object



39
40
41
# File 'lib/moxml/signature/algorithms/digest_base.rb', line 39

def digest_base64(data)
  Base64.strict_encode64(digest(data))
end