class Eth::Key

Attributes

private_key[RW]
public_key[RW]

Public Class Methods

decrypt(data, password) click to toggle source
# File lib/eth/key.rb, line 14
def self.decrypt(data, password)
  priv = Decrypter.perform data, password
  default priv: priv
end
default(priv: nil) click to toggle source
# File lib/eth/key.rb, line 39
def default(priv: nil)
  key = self.new
  private_key = MoneyTree::PrivateKey.new key: priv
  public_key = MoneyTree::PublicKey.new(private_key, compressed: false)
  key.private_key = private_key
  key.public_key = public_key
  return key
end
encrypt(key, password) click to toggle source
# File lib/eth/key.rb, line 8
def self.encrypt(key, password)
  key = new(priv: key) unless key.is_a?(Key)

  Encrypter.perform key.private_hex, password
end
from_node(node) click to toggle source
# File lib/eth/key.rb, line 30
def from_node(node)
  key = self.new
  private_key = MoneyTree::PrivateKey.new(key: node.private_key.to_hex)
  public_key = MoneyTree::PublicKey.new(node.private_key, compressed: false)
  key.private_key = private_key
  key.public_key = public_key
  return key
end
from_private_key_hex(private_key_hex) click to toggle source
# File lib/eth/key.rb, line 20
def from_private_key_hex(private_key_hex)
  private_key = MoneyTree::PrivateKey.new(key: private_key_hex)
  private_key.remove_instance_variable(:@raw_key)
  private_key.options[:key] = nil
  key = self.new
  key.private_key = private_key
  key.public_key = MoneyTree::PublicKey.new private_key, compressed: false
  return key
end

Public Instance Methods

address() click to toggle source
# File lib/eth/key.rb, line 67
def address
  Utils.public_key_to_address public_hex
end
Also aliased as: to_address
private_hex() click to toggle source

def initialize(priv: nil) @private_key = MoneyTree::PrivateKey.new key: priv @public_key = MoneyTree::PublicKey.new private_key, compressed: false end

# File lib/eth/key.rb, line 55
def private_hex
  private_key.to_hex
end
public_bytes() click to toggle source
# File lib/eth/key.rb, line 59
def public_bytes
  public_key.to_bytes
end
public_hex() click to toggle source
# File lib/eth/key.rb, line 63
def public_hex
  public_key.to_hex
end
sign(message) click to toggle source
# File lib/eth/key.rb, line 72
def sign(message)
  sign_hash message_hash(message)
end
sign_hash(hash) click to toggle source
# File lib/eth/key.rb, line 76
def sign_hash(hash)
  loop do
    signature = OpenSsl.sign_compact hash, private_hex, public_hex
    return signature if valid_s? signature
  end
end
to_address()
Alias for: address
verify_signature(message, signature) click to toggle source
# File lib/eth/key.rb, line 83
def verify_signature(message, signature)
  hash = message_hash(message)
  public_hex == OpenSsl.recover_compact(hash, signature)
end

Private Instance Methods

message_hash(message) click to toggle source
# File lib/eth/key.rb, line 91
def message_hash(message)
  Utils.keccak256 message
end
valid_s?(signature) click to toggle source
# File lib/eth/key.rb, line 95
def valid_s?(signature)
  s_value = Utils.v_r_s_for(signature).last
  s_value <= Secp256k1::N/2 && s_value != 0
end