Class: Lanet::Signer

Inherits:
Object
  • Object
show all
Defined in:
lib/lanet/signer.rb

Defined Under Namespace

Classes: Error

Class Method Summary collapse

Class Method Details

.generate_key_pair(bits = 2048) ⇒ Hash

Generates a new RSA key pair

Parameters:

  • bits (Integer) (defaults to: 2048)

    key size in bits

Returns:

  • (Hash)

    containing :private_key and :public_key as PEM strings



39
40
41
42
43
44
45
# File 'lib/lanet/signer.rb', line 39

def self.generate_key_pair(bits = 2048)
  key = OpenSSL::PKey::RSA.new(bits)
  {
    private_key: key.to_pem,
    public_key: key.public_key.to_pem
  }
end

.sign(message, private_key_pem) ⇒ String

Signs a message using the provided private key

Parameters:

  • message (String)

    the message to sign

  • private_key_pem (String)

    the PEM-encoded private key

Returns:

  • (String)

    Base64-encoded signature



15
16
17
18
19
20
21
# File 'lib/lanet/signer.rb', line 15

def self.sign(message, private_key_pem)
  private_key = OpenSSL::PKey::RSA.new(private_key_pem)
  signature = private_key.sign(OpenSSL::Digest.new("SHA256"), message.to_s)
  Base64.strict_encode64(signature)
rescue StandardError => e
  raise Error, "Signing failed: #{e.message}"
end

.verify(message, signature_base64, public_key_pem) ⇒ Boolean

Verifies a signature using the provided public key

Parameters:

  • message (String)

    the original message

  • signature_base64 (String)

    the Base64-encoded signature

  • public_key_pem (String)

    the PEM-encoded public key

Returns:

  • (Boolean)

    true if signature is valid



28
29
30
31
32
33
34
# File 'lib/lanet/signer.rb', line 28

def self.verify(message, signature_base64, public_key_pem)
  public_key = OpenSSL::PKey::RSA.new(public_key_pem)
  signature = Base64.strict_decode64(signature_base64)
  public_key.verify(OpenSSL::Digest.new("SHA256"), signature, message.to_s)
rescue StandardError => e
  raise Error, "Verification failed: #{e.message}"
end