38 lines
890 B
Ruby
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
|