Now using detached signatures
This commit is contained in:
parent
6d431e9459
commit
a219801c2d
2 changed files with 26 additions and 28 deletions
|
|
@ -48,7 +48,7 @@ class Post
|
|||
def verify_signature
|
||||
return false unless owner_signature && person.key_fingerprint
|
||||
validity = nil
|
||||
message = GPGME::verify(owner_signature, nil, {:armor => true, :always_trust => true}){ |signature|
|
||||
GPGME::verify(owner_signature, to_xml.to_s, {:armor => true, :always_trust => true}){ |signature|
|
||||
puts signature
|
||||
puts signature.inspect
|
||||
validity = signature.status == GPGME::GPG_ERR_NO_ERROR &&
|
||||
|
|
@ -56,16 +56,16 @@ class Post
|
|||
signature.fpr == person.key_fingerprint
|
||||
#validity = validity && person.key_fingerprint == signature.fpr
|
||||
}
|
||||
puts message
|
||||
#puts message
|
||||
puts to_xml.to_s
|
||||
return validity && message == to_xml.to_s
|
||||
return validity# && message == to_xml.to_s
|
||||
#validity = validity && (signed_text == to_xml.to_s)
|
||||
end
|
||||
protected
|
||||
def sign_if_mine
|
||||
if self.person == User.first
|
||||
self.owner_signature = GPGME::sign(to_xml.to_s,nil,{
|
||||
:armor=> true})
|
||||
self.owner_signature = GPGME::sign(to_xml.to_s,nil,
|
||||
{:armor=> true, :mode => GPGME::SIG_MODE_DETACH})
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,15 @@ describe 'user encryption' do
|
|||
end
|
||||
|
||||
describe 'signing and verifying' do
|
||||
|
||||
before do
|
||||
@person = Factory.create(:person,
|
||||
:key_fingerprint => GPGME.list_keys("Remote Friend").first.subkeys.first.fpr,
|
||||
:profile => Profile.create(:first_name => 'Remote',
|
||||
:last_name => 'Friend'),
|
||||
:email => 'somewhere@else.com',
|
||||
:url => 'http://distant-example.com/',
|
||||
:key_fingerprint => '57F553EE2C230991566B7C60D3638485F3960087')
|
||||
end
|
||||
it 'should sign a message on create' do
|
||||
message = Factory.create(:status_message, :person => @u)
|
||||
message.verify_signature.should be true
|
||||
|
|
@ -83,38 +91,28 @@ describe 'user encryption' do
|
|||
end
|
||||
|
||||
it 'should verify a remote signature' do
|
||||
person = Factory.create(:person,
|
||||
:key_fingerprint => GPGME.list_keys("Remote Friend").first.subkeys.first.fpr,
|
||||
:profile => Profile.create(:first_name => 'Remote',
|
||||
:last_name => 'Friend'),
|
||||
:email => 'somewhere@else.com',
|
||||
:url => 'http://distant-example.com/',
|
||||
:key_fingerprint => '57F553EE2C230991566B7C60D3638485F3960087')
|
||||
puts person.inspect
|
||||
message = Factory.create(:status_message, :person => person)
|
||||
message.owner_signature = GPGME.sign(message.to_xml.to_s, nil, {:armor => true, :signers => [person.key]})
|
||||
message.save # :owner_signature => File.open(File.dirname(__FILE__) + "/fixtures/msg.xml.detached.asc").read)
|
||||
# :owner_signature => File.open(File.dirname(__FILE__) + "/fixtures/msg.xml.clear.asc").read)
|
||||
message = Factory.create(:status_message, :person => @person)
|
||||
message.owner_signature = GPGME.sign(message.to_xml.to_s, nil,
|
||||
{:mode => GPGME::SIG_MODE_DETACH, :armor => true, :signers => [@person.key]})
|
||||
message.save
|
||||
message.verify_signature.should be true
|
||||
end
|
||||
|
||||
it 'should know if the signature is from the wrong person' do
|
||||
person = Factory.create(:person, :key_fingerprint => GPGME.list_keys("Ilya").first.subkeys.first.fpr)
|
||||
message = Factory.create(:status_message, :person => person,
|
||||
:owner_signature => File.open(File.dirname(__FILE__) + "/fixtures/msg.xml.normal.asc").read)
|
||||
# :owner_signature => File.open(File.dirname(__FILE__) + "/fixtures/msg.xml.detached.asc").read)
|
||||
# :owner_signature => File.open(File.dirname(__FILE__) + "/fixtures/msg.xml.clear.asc").read)
|
||||
|
||||
message = Factory.create(:status_message, :person => @person)
|
||||
message.owner_signature = GPGME.sign(message.to_xml.to_s, nil,
|
||||
{:mode => GPGME::SIG_MODE_DETACH, :armor => true, :signers => [@person.key]})
|
||||
message.person = @u
|
||||
message.verify_signature.should be false
|
||||
end
|
||||
|
||||
it 'should know if the signature is for the wrong text' do
|
||||
person = Factory.create(:person, :key_fingerprint => GPGME.list_keys("Ilya").first.subkeys.first.fpr)
|
||||
message = Factory.create(:status_message, :message => 'I love VENISON', :person => person,
|
||||
:owner_signature => File.open(File.dirname(__FILE__) + "/fixtures/msg.xml.normal.asc").read)
|
||||
message = Factory.create(:status_message, :person => @person)
|
||||
message.owner_signature = GPGME.sign(message.to_xml.to_s, nil,
|
||||
{:mode => GPGME::SIG_MODE_DETACH, :armor => true, :signers => [@person.key]})
|
||||
message.message = 'I love VENISON'
|
||||
message.save
|
||||
message.verify_signature.should be false
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue