module Interapp::Cryptography

Public Class Methods

generate_keypair() click to toggle source
# File lib/interapp/cryptography.rb, line 3
def self.generate_keypair
  private_key = 1 + SecureRandom.random_number(group.order - 1)
  public_key = group.generator.multiply_by_scalar(private_key)
  public_key_binary = ECDSA::Format::PointOctetString.encode(public_key, compression: true)
  return private_key.to_s(16), public_key_binary.unpack('H*').first
end
sign(payload, private_key_binary) click to toggle source
# File lib/interapp/cryptography.rb, line 10
def self.sign(payload, private_key_binary)
  digest = Digest::SHA2.digest(payload)
  signature = nil
  while signature.nil?
    temp_key = 1 + SecureRandom.random_number(group.order - 1)
    signature = ECDSA.sign(group, private_key_binary, digest, temp_key)
  end
  ECDSA::Format::SignatureDerString.encode(signature)
end
verify(payload, signature_decoded, public_key_decoded) click to toggle source
# File lib/interapp/cryptography.rb, line 20
def self.verify(payload, signature_decoded, public_key_decoded)
  digest = Digest::SHA2.digest(payload)
  ECDSA.valid_signature?(public_key_decoded, digest, signature_decoded)
end

Private Class Methods

group() click to toggle source
# File lib/interapp/cryptography.rb, line 26
def self.group
  Interapp::EC_GROUP
end