demarches-normaliennes/app/services/signature_service.rb
2018-04-04 18:44:08 +02:00

38 lines
890 B
Ruby

class SignatureService
CONFIG_PATH = Rails.root.join("config", "signing_key.yml")
class << self
def generate
RbNaCl::Util.bin2hex(RbNaCl::SigningKey.generate)
end
def verify(signature, message)
message = Base64.urlsafe_encode64(message)
begin
signing_key.verify_key
.verify(RbNaCl::Util.hex2bin(signature), message)
rescue RbNaCl::BadSignatureError, RbNaCl::LengthError
return false
end
end
def sign(message)
message = Base64.urlsafe_encode64(message)
RbNaCl::Util.bin2hex(signing_key.sign(message))
end
private
def signing_key
@@signing_key ||= RbNaCl::SigningKey.new(RbNaCl::Util.hex2bin(config[:key]))
end
def config
if File.exist?(CONFIG_PATH)
YAML.safe_load(File.read(CONFIG_PATH)).symbolize_keys
else
{}
end
end
end
end