class ZKSync::Key
Public Class Methods
new(passphrase, opts={})
click to toggle source
# File lib/zksync/key.rb, line 31 def initialize(passphrase, opts={}) @raw_key = case opts[:type] when :literal passphrase when :passphrase kdf(passphrase) else Digest::SHA256.digest(passphrase) end @mode = opts[:mode] || :CBC @iv = Digest::SHA256.digest("iv" + @raw_key) end
size()
click to toggle source
# File lib/zksync/key.rb, line 20 def self.size 32 # size in bytes of the key end
write_size()
click to toggle source
# File lib/zksync/key.rb, line 24 def self.write_size return @write_size if @write_size k = Key.new("", type: :key) @write_size = k.encrypt(k.to_b).length end
Public Instance Methods
child_key(string, opts={})
click to toggle source
# File lib/zksync/key.rb, line 49 def child_key(string, opts={}) Key.new(to_s + "::" + string, {type: :key}.merge(opts)) end
decrypt(ciphertext)
click to toggle source
# File lib/zksync/key.rb, line 65 def decrypt(ciphertext) decipher = OpenSSL::Cipher::AES.new(8*self.class.size, @mode) decipher.decrypt decipher.key = @raw_key decipher.iv = @iv decipher.update(ciphertext) + decipher.final end
encrypt(plaintext, padding=0)
click to toggle source
# File lib/zksync/key.rb, line 57 def encrypt(plaintext, padding=0) cipher = OpenSSL::Cipher::AES.new(8*self.class.size, @mode) cipher.encrypt cipher.key = to_b cipher.iv = @iv cipher.update(plaintext) + cipher.final end
kdf(passphrase)
click to toggle source
# File lib/zksync/key.rb, line 45 def kdf(passphrase) OpenSSL::PKCS5.pbkdf2_hmac_sha1(passphrase, "ZKSync", 2**16, self.class.size) end
to_b()
click to toggle source
# File lib/zksync/key.rb, line 77 def to_b @raw_key end
to_s()
click to toggle source
# File lib/zksync/key.rb, line 73 def to_s @raw_key.unpack("H*").first end
write_size()
click to toggle source
# File lib/zksync/key.rb, line 53 def write_size to_b.length end