module RbNaCl::SelfTest

Self-test performed at startup

Public Instance Methods

box_common_test(box) click to toggle source
# File lib/rbnacl/self_test.rb, line 31
def box_common_test(box)
  nonce      = vector :box_nonce
  message    = vector :box_message
  ciphertext = vector :box_ciphertext

  raise SelfTestFailure, "failed to generate correct ciphertext" unless box.encrypt(nonce, message) == ciphertext
  raise SelfTestFailure, "failed to decrypt ciphertext correctly" unless box.decrypt(nonce, ciphertext) == message

  begin
    passed         = false
    corrupt_ct     = ciphertext.dup
    corrupt_ct[23] = " "
    box.decrypt(nonce, corrupt_ct)
  rescue CryptoError
    passed = true
  ensure
    passed || raise(SelfTestFailure, "failed to detect corrupt ciphertext")
  end
end
box_test() click to toggle source
# File lib/rbnacl/self_test.rb, line 18
def box_test
  alicepk = RbNaCl::PublicKey.new(vector(:alice_public))
  bobsk = RbNaCl::PrivateKey.new(vector(:bob_private))

  box = RbNaCl::Box.new(alicepk, bobsk)
  box_common_test(box)
end
digital_signature_test() click to toggle source
# File lib/rbnacl/self_test.rb, line 51
def digital_signature_test
  signing_key = SigningKey.new(vector(:sign_private))
  verify_key  = signing_key.verify_key

  unless verify_key.to_s == vector(:sign_public)
    #:nocov:
    raise SelfTestFailure, "failed to generate verify key correctly"
    #:nocov:
  end

  message   = vector :sign_message
  signature = signing_key.sign(message)

  unless signature == vector(:sign_signature)
    #:nocov:
    raise SelfTestFailure, "failed to generate correct signature"
    #:nocov:
  end

  unless verify_key.verify(signature, message)
    #:nocov:
    raise SelfTestFailure, "failed to verify a valid signature"
    #:nocov:
  end

  begin
    passed = false
    bad_signature = signature[0, 63] + "0"
    verify_key.verify(bad_signature, message)
  rescue CryptoError
    passed = true
  ensure
    passed || raise(SelfTestFailure, "failed to detect corrupt ciphertext")
  end
end
hmac_test(klass, tag) click to toggle source
# File lib/rbnacl/self_test.rb, line 94
def hmac_test(klass, tag)
  authenticator = klass.new(vector("auth_key_#{klass.key_bytes}".to_sym))

  message = vector :auth_message

  raise SelfTestFailure, "#{klass} generated incorrect authentication tag" unless authenticator.auth(message) == vector(tag)
  raise SelfTestFailure, "#{klass} failed to verify authentication tag" unless authenticator.verify(vector(tag), message)

  begin
    passed = false
    authenticator.verify(vector(tag), message + " ")
  rescue CryptoError
    passed = true
  ensure
    passed || raise(SelfTestFailure, "failed to detect corrupt ciphertext")
  end
end
secret_box_test() click to toggle source
# File lib/rbnacl/self_test.rb, line 26
def secret_box_test
  box = SecretBox.new(vector(:secret_key))
  box_common_test(box)
end
sha256_test() click to toggle source
# File lib/rbnacl/self_test.rb, line 87
def sha256_test
  message = vector :sha256_message
  digest  = vector :sha256_digest

  raise SelfTestFailure, "failed to generate a correct SHA256 digest" unless RbNaCl::Hash.sha256(message) == digest
end
vector(name) click to toggle source
# File lib/rbnacl/self_test.rb, line 14
def vector(name)
  [TEST_VECTORS[name]].pack("H*")
end