Class: ZKSync::Key
- Inherits:
-
Object
- Object
- ZKSync::Key
- Defined in:
- lib/zksync/key.rb
Class Method Summary collapse
Instance Method Summary collapse
- #child_key(string, opts = {}) ⇒ Object
- #decrypt(ciphertext) ⇒ Object
- #encrypt(plaintext, padding = 0) ⇒ Object
-
#initialize(passphrase, opts = {}) ⇒ Key
constructor
A new instance of Key.
- #kdf(passphrase) ⇒ Object
- #to_b ⇒ Object
- #to_s ⇒ Object
- #write_size ⇒ Object
Constructor Details
#initialize(passphrase, opts = {}) ⇒ Key
Returns a new instance of Key.
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# 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 |
Class Method Details
.size ⇒ Object
20 21 22 |
# File 'lib/zksync/key.rb', line 20 def self.size 32 # size in bytes of the key end |
Instance Method Details
#child_key(string, opts = {}) ⇒ Object
49 50 51 |
# File 'lib/zksync/key.rb', line 49 def child_key(string, opts={}) Key.new(to_s + "::" + string, {type: :key}.merge(opts)) end |
#decrypt(ciphertext) ⇒ Object
65 66 67 68 69 70 71 |
# 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) ⇒ Object
57 58 59 60 61 62 63 |
# 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) ⇒ Object
45 46 47 |
# 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 ⇒ Object
77 78 79 |
# File 'lib/zksync/key.rb', line 77 def to_b @raw_key end |
#to_s ⇒ Object
73 74 75 |
# File 'lib/zksync/key.rb', line 73 def to_s @raw_key.unpack("H*").first end |
#write_size ⇒ Object
53 54 55 |
# File 'lib/zksync/key.rb', line 53 def write_size to_b.length end |