Class: Eth::Key

Inherits:
Object
  • Object
show all
Defined in:
lib/eth/key.rb

Defined Under Namespace

Classes: Decrypter, Encrypter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#private_keyObject

Returns the value of attribute private_key.



6
7
8
# File 'lib/eth/key.rb', line 6

def private_key
  @private_key
end

#public_keyObject

Returns the value of attribute public_key.



6
7
8
# File 'lib/eth/key.rb', line 6

def public_key
  @public_key
end

Class Method Details

.decrypt(data, password) ⇒ Object



14
15
16
17
# File 'lib/eth/key.rb', line 14

def self.decrypt(data, password)
  priv = Decrypter.perform data, password
  default priv: priv
end

.default(priv: nil) ⇒ Object



39
40
41
42
43
44
45
46
# 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) ⇒ Object



8
9
10
11
12
# 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) ⇒ Object



30
31
32
33
34
35
36
37
# 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) ⇒ Object



20
21
22
23
24
25
26
27
28
# 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

Instance Method Details

#addressObject Also known as: to_address



67
68
69
# File 'lib/eth/key.rb', line 67

def address
  Utils.public_key_to_address public_hex
end

#get_signer_key(message, signature) ⇒ Object



88
89
90
91
92
93
94
95
# File 'lib/eth/key.rb', line 88

def get_signer_key(message, signature)
  hash = message_hash(message)
  signer_public_hex = OpenSsl.recover_compact(hash, signature)
  signer_public_key = MoneyTree::PublicKey.new(signer_public_hex, compressed: false)
  signer_key = Eth::Key.new
  signer_key.public_key = signer_public_key
  return signer_key
end

#private_hexObject

end



55
56
57
# File 'lib/eth/key.rb', line 55

def private_hex
  private_key.to_hex
end

#public_bytesObject



59
60
61
# File 'lib/eth/key.rb', line 59

def public_bytes
  public_key.to_bytes
end

#public_hexObject



63
64
65
# File 'lib/eth/key.rb', line 63

def public_hex
  public_key.to_hex
end

#sign(message) ⇒ Object



72
73
74
# File 'lib/eth/key.rb', line 72

def sign(message)
  sign_hash message_hash(message)
end

#sign_hash(hash) ⇒ Object



76
77
78
79
80
81
# 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

#verify_rpc_signature(message, signature, signer_address) ⇒ Object



97
98
99
100
# File 'lib/eth/key.rb', line 97

def verify_rpc_signature(message, signature, signer_address)
  signer = get_signer_key(message, signature)
  signer.address == signer_address 
end

#verify_rpc_signature_no_prefix(message, signature, signer_address) ⇒ Object



102
103
104
105
# File 'lib/eth/key.rb', line 102

def verify_rpc_signature_no_prefix(message, signature, signer_address)
  prefixed_message = Eth::Utils.prefix_message(message)
  verify_rpc_signature(prefixed_message, signature, signer_address) 
end

#verify_signature(message, signature) ⇒ Object



83
84
85
86
# File 'lib/eth/key.rb', line 83

def verify_signature(message, signature)
  hash = message_hash(message)
  public_hex == OpenSsl.recover_compact(hash, signature)
end