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