71 lines
2.0 KiB
Ruby
71 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Nostr
|
|
# A pair of public and private keys
|
|
class KeyPair
|
|
# 32-bytes hex-encoded private key
|
|
#
|
|
# @api public
|
|
#
|
|
# @example
|
|
# keypair.private_key # => '893c4cc8088924796b41dc788f7e2f746734497010b1a9f005c1faad7074b900'
|
|
#
|
|
# @return [PrivateKey]
|
|
#
|
|
attr_reader :private_key
|
|
|
|
# 32-bytes hex-encoded public key
|
|
#
|
|
# @api public
|
|
#
|
|
# @example
|
|
# keypair.public_key # => '2d7661527d573cc8e84f665fa971dd969ba51e2526df00c149ff8e40a58f9558'
|
|
#
|
|
# @return [PublicKey]
|
|
#
|
|
attr_reader :public_key
|
|
|
|
# Instantiates a key pair
|
|
#
|
|
# @api public
|
|
#
|
|
# @example
|
|
# keypair = Nostr::KeyPair.new(
|
|
# private_key: Nostr::PrivateKey.new('893c4cc8088924796b41dc788f7e2f746734497010b1a9f005c1faad7074b900'),
|
|
# public_key: Nostr::PublicKey.new('2d7661527d573cc8e84f665fa971dd969ba51e2526df00c149ff8e40a58f9558'),
|
|
# )
|
|
#
|
|
# @param private_key [PrivateKey] 32-bytes hex-encoded private key.
|
|
# @param public_key [PublicKey] 32-bytes hex-encoded public key.
|
|
#
|
|
# @raise ArgumentError when the private key is not a +PrivateKey+
|
|
# @raise ArgumentError when the public key is not a +PublicKey+
|
|
#
|
|
def initialize(private_key:, public_key:)
|
|
validate_keys(private_key, public_key)
|
|
|
|
@private_key = private_key
|
|
@public_key = public_key
|
|
end
|
|
|
|
private
|
|
|
|
# Validates the keys
|
|
#
|
|
# @api private
|
|
#
|
|
# @param private_key [PrivateKey] 32-bytes hex-encoded private key.
|
|
# @param public_key [PublicKey] 32-bytes hex-encoded public key.
|
|
#
|
|
# @raise ArgumentError when the private key is not a +PrivateKey+
|
|
# @raise ArgumentError when the public key is not a +PublicKey+
|
|
#
|
|
# @return [void]
|
|
#
|
|
def validate_keys(private_key, public_key)
|
|
raise ArgumentError, 'private_key is not an instance of PrivateKey' unless private_key.is_a?(Nostr::PrivateKey)
|
|
raise ArgumentError, 'public_key is not an instance of PublicKey' unless public_key.is_a?(Nostr::PublicKey)
|
|
end
|
|
end
|
|
end
|