Pigeon-Ruby/lib/pigeon/local_identity.rb

34 lines
831 B
Ruby

module Pigeon
# A public and private key pair that represents the local
# user who "owns" the database.
#
# Provides a wrapper around the `ed25519` gem to
# help us maintain our sanity when the Gem's API
# changes.
class LocalIdentity
# `seed` is a 32-byte seed value from which
# the key should be derived
def initialize(seed)
@seed = seed
@signing_key = Ed25519::SigningKey.new(@seed)
end
def private_key
@private_key ||= Helpers.b32_encode(@seed)
end
def multihash
bytes = @signing_key.verify_key.to_bytes
b64 = Helpers.b32_encode(bytes)
@multihash ||= [IDENTITY_SIGIL, b64, IDENTITY_FOOTER].join("")
end
def sign(string)
hex = @signing_key.sign(string)
b64 = Helpers.b32_encode(hex)
b64 + SIG_FOOTER
end
end
end