module RbNaCl::SelfTest
def box_common_test(box)
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
def box_test
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
def digital_signature_test
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
def hmac_test(klass, tag)
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
def secret_box_test
def secret_box_test box = SecretBox.new(vector(:secret_key)) box_common_test(box) end
def sha256_test
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
def vector(name)
def vector(name) [TEST_VECTORS[name]].pack("H*") end