34 lines
831 B
Ruby
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
|