diaspora_federation/spec/support/shared_signable_spec.rb
cmrd Senya 69e523abd0 Extract account migration sign feature to a module
This module can be used to compute account migration signature in other
objects besides Entities::AccountMigration. For instance this is to be
used in AccountMigration model of diaspora* web application.
2017-12-27 18:37:48 +02:00

51 lines
1.9 KiB
Ruby

shared_examples "a signable" do
let(:private_key) { OpenSSL::PKey::RSA.generate(1024) }
let(:test_signature) { sign_with_key(private_key, test_string) }
describe "#sign_with_key" do
it "produces a correct signature" do
signature = test_class.new({}).sign_with_key(private_key)
expect(verify_signature(private_key.public_key, signature, test_string)).to be_truthy
end
end
describe "#verify_signature" do
it "doesn't raise if signature is correct" do
expect_callback(:fetch_public_key, "id@example.tld").and_return(private_key.public_key)
expect {
test_class
.new(my_signature: test_signature)
.verify_signature("id@example.tld", :my_signature)
}.not_to raise_error
end
it "raises PublicKeyNotFound when key isn't provided" do
expect_callback(:fetch_public_key, "id@example.tld").and_return(nil)
expect {
test_class
.new(my_signature: test_signature)
.verify_signature("id@example.tld", :my_signature)
}.to raise_error(DiasporaFederation::Entities::Signable::PublicKeyNotFound)
end
it "raises SignatureVerificationFailed when signature isn't provided" do
expect_callback(:fetch_public_key, "id@example.tld").and_return(private_key.public_key)
expect {
test_class.new({}).verify_signature("id@example.tld", :my_signature)
}.to raise_error(DiasporaFederation::Entities::Signable::SignatureVerificationFailed)
end
it "raises SignatureVerificationFailed when signature is wrong" do
expect_callback(:fetch_public_key, "id@example.tld").and_return(private_key.public_key)
expect {
test_class
.new(my_signature: "faked signature")
.verify_signature("id@example.tld", :my_signature)
}.to raise_error(DiasporaFederation::Entities::Signable::SignatureVerificationFailed)
end
end
end