module E3DB::Crypto

Private Instance Methods

base64decode(x) click to toggle source
# File lib/e3db/crypto.rb, line 48
def base64decode(x)
  Base64.urlsafe_decode64(x)
end
base64encode(x) click to toggle source
# File lib/e3db/crypto.rb, line 44
def base64encode(x)
  Base64.urlsafe_encode64(x, padding: false)
end
box_random_nonce() click to toggle source
# File lib/e3db/crypto.rb, line 36
def box_random_nonce
  RbNaCl::Random.random_bytes(RbNaCl::Box.nonce_bytes)
end
decode_private_key(s) click to toggle source
# File lib/e3db/crypto.rb, line 28
def decode_private_key(s)
  RbNaCl::PrivateKey.new(base64decode(s))
end
decode_public_key(s) click to toggle source
# File lib/e3db/crypto.rb, line 20
def decode_public_key(s)
  RbNaCl::PublicKey.new(base64decode(s))
end
decrypt_box(encrypted, pub, priv) click to toggle source
# File lib/e3db/crypto.rb, line 52
def decrypt_box(encrypted, pub, priv)
  pub = decode_public_key(pub) unless pub.is_a? RbNaCl::PublicKey
  priv = decode_private_key(priv) unless priv.is_a? RbNaCl::PrivateKey

  ciphertext, nonce = encrypted.split('.', 2).map { |f| base64decode(f) }
  RbNaCl::Box.new(pub, priv).decrypt(nonce, ciphertext)
end
encode_private_key(k) click to toggle source
# File lib/e3db/crypto.rb, line 32
def encode_private_key(k)
  base64encode(k.to_bytes)
end
encode_public_key(k) click to toggle source
# File lib/e3db/crypto.rb, line 24
def encode_public_key(k)
  base64encode(k.to_bytes)
end
encrypt_box(plain, pub, priv) click to toggle source
# File lib/e3db/crypto.rb, line 60
def encrypt_box(plain, pub, priv)
  pub = decode_public_key(pub) unless pub.is_a? RbNaCl::PublicKey
  priv = decode_private_key(priv) unless priv.is_a? RbNaCl::PrivateKey

  nonce = box_random_nonce
  encrypted = RbNaCl::Box.new(pub, priv).encrypt(nonce, plain)
  [encrypted, nonce].map { |f| base64encode(f) }.join(".")
end
new_access_key() click to toggle source

Create a new, random access key. Returns a string of bytes representing the key.

# File lib/e3db/crypto.rb, line 14
def new_access_key
  RbNaCl::Random.random_bytes(RbNaCl::SecretBox.key_bytes)
end
Also aliased as: new_data_key
new_data_key()
Alias for: new_access_key
secret_box_random_nonce() click to toggle source
# File lib/e3db/crypto.rb, line 40
def secret_box_random_nonce
  RbNaCl::Random.random_bytes(RbNaCl::SecretBox.nonce_bytes)
end