diff --git a/app/models/post.rb b/app/models/post.rb index 872c3942e..2ca631ad5 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -47,16 +47,18 @@ class Post key :owner_signature, String def verify_signature return false unless owner_signature && person.key_fingerprint - puts to_xml.to_s - puts owner_signature - GPGME::verify(owner_signature, nil, {:armor => true, :always_trust => true}){ |signature| + validity = nil + message = GPGME::verify(owner_signature, nil, {:armor => true, :always_trust => true}){ |signature| puts signature puts signature.inspect - return signature.status == GPGME::GPG_ERR_NO_ERROR && + validity = signature.status == GPGME::GPG_ERR_NO_ERROR && #signature.to_s.include?("Good signature from ") && signature.fpr == person.key_fingerprint #validity = validity && person.key_fingerprint == signature.fpr } + puts message + puts to_xml.to_s + return validity && message == to_xml.to_s #validity = validity && (signed_text == to_xml.to_s) end protected diff --git a/app/models/user.rb b/app/models/user.rb index 0c1f2c599..79172b595 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -91,11 +91,11 @@ class User < Person protected def assign_key - keys = GPGME.list_keys(nil, true) + keys = GPGME.list_keys(real_name, true) if keys.empty? generate_key end - self.key_fingerprint = GPGME.list_keys(nil, true).first.subkeys.first.fingerprint + self.key_fingerprint = GPGME.list_keys(real_name, true).first.subkeys.first.fingerprint end def generate_key diff --git a/gpg/diaspora-test/pubring.gpg b/gpg/diaspora-test/pubring.gpg index 58a5cbaac..46e8a37d1 100644 Binary files a/gpg/diaspora-test/pubring.gpg and b/gpg/diaspora-test/pubring.gpg differ diff --git a/gpg/diaspora-test/secring.gpg b/gpg/diaspora-test/secring.gpg index eccac9905..81164ee0e 100644 Binary files a/gpg/diaspora-test/secring.gpg and b/gpg/diaspora-test/secring.gpg differ diff --git a/gpg/diaspora-test/trustdb.gpg b/gpg/diaspora-test/trustdb.gpg index b0d16300f..45e0c76ad 100644 Binary files a/gpg/diaspora-test/trustdb.gpg and b/gpg/diaspora-test/trustdb.gpg differ diff --git a/spec/user_encryption_spec.rb b/spec/user_encryption_spec.rb index 784866b6a..f56a3dba7 100644 --- a/spec/user_encryption_spec.rb +++ b/spec/user_encryption_spec.rb @@ -83,12 +83,18 @@ describe 'user encryption' do end it 'should verify a remote signature' 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) + 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.verify_signature.should be true end