class Crypto::Keys::KeyRing

Attributes

address[R]
private_key[R]
public_key[R]
seed[R]
wif[R]

Public Class Methods

generate(network = MAINNET) click to toggle source
# File lib/crypto/key_ring.rb, line 23
def self.generate(network = MAINNET)
  key_pair = KeyUtils.create_new_keypair
  private_key = PrivateKey.new(key_pair[:hex_private_key], network)
  public_key = PublicKey.new(key_pair[:hex_public_key], network)
  KeyRing.new(private_key, public_key, private_key.wif, public_key.address)
end
generate_hd(seed = nil, derivation = nil, network = MAINNET) click to toggle source
# File lib/crypto/key_ring.rb, line 30
def self.generate_hd(seed = nil, derivation = nil, network = MAINNET)
  _seed = seed.nil? ? SecureRandom.hex(64) : seed
  keys = (derivation.nil? || derivation.nil? && derivation == "m") ?
    HDKEY::KeyRing.get_master_key_from_seed(_seed) : HDKEY::KeyRing.derive_path(derivation, _seed, HDKEY::HARDENED_AXENTRO)

  private_key = PrivateKey.new(keys.private_key, network)
  _public_key = HDKEY::KeyRing.get_public_key(keys.private_key)[2..-1]
  public_key = PublicKey.new(_public_key, network)
  KeyRing.new(private_key, public_key, private_key.wif, public_key.address, _seed)
end
is_valid?(public_key, wif, address) click to toggle source
# File lib/crypto/key_ring.rb, line 41
def self.is_valid?(public_key, wif, address)
  address = Address.from(address)
  wif = Wif.new(wif)

  raise AxentroError, "network mismatch between address and wif" if address.network != wif.network

  public_key = PublicKey.from_hex(public_key, address.network)
  raise AxentroError, "public key mismatch between public key and wif" if public_key.as_hex != wif.public_key.as_hex

  true
end
new(private_key, public_key, wif, address, seed = nil) click to toggle source
# File lib/crypto/key_ring.rb, line 15
def initialize(private_key, public_key, wif, address, seed = nil)
  @private_key = private_key
  @public_key = public_key
  @wif = wif
  @address = address
  @seed = seed
end