sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 13e0035d02bb88e33b8093e7b346d2520deb59c7
parent cce594e358be881c12b93c53ac36118795ece50c
Author: Matthieu Rakotojaona <matthieu.rakotojaona@gmail.com>
Date:   Wed, 18 Feb 2015 23:11:40 +0100

Merge branch 'fix-ecc' into develop

Diffstat:
M lib/sup/crypto.rb | 1 +
A test/gnupg_test_home/.gpg-v21-migrated | 0
A test/gnupg_test_home/key_ecc.gen | 13 +++++++++++++
A test/gnupg_test_home/private-keys-v1.d/719C7455A7169C6EE8819C6E91002E4F9DD00A65.key | 2 ++
A test/gnupg_test_home/private-keys-v1.d/8A130806A754AA29D59487D76BD355040D9F26C0.key | 0
A test/gnupg_test_home/private-keys-v1.d/B7AA46B22BD8A6AD1B4F266C19A3B124A32DDD71.key | 0
A test/gnupg_test_home/private-keys-v1.d/FA64ACD7CC871371BDF57285A6CDF0E618827783.key | 0
M test/gnupg_test_home/pubring.gpg | 0
M test/gnupg_test_home/regen_keys.sh | 3 +++
M test/test_crypto.rb | 12 +++++++++++-
10 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/lib/sup/crypto.rb b/lib/sup/crypto.rb
@@ -467,6 +467,7 @@ private
     when GPGME::PK_DSA then "DSA "
     when GPGME::PK_ELG then "ElGamel "
     when GPGME::PK_ELG_E then "ElGamel "
+    else "unknown key type (#{subkey.pubkey_algo}) "
     end
   end
 
diff --git a/test/gnupg_test_home/.gpg-v21-migrated b/test/gnupg_test_home/.gpg-v21-migrated
diff --git a/test/gnupg_test_home/key_ecc.gen b/test/gnupg_test_home/key_ecc.gen
@@ -0,0 +1,13 @@
+ %echo Generating a standard key
+ Key-Type: eddsa
+ Key-Curve: Ed25519
+ Name-Real: Sup Test ECC
+ Name-Comment: Test ECC key
+ Name-Email: sup-test-ecc@foo.bar
+ Expire-Date: 1y
+ %no-protection
+ %pubring pubring.gpg
+ %secring secring.gpg
+ # Do a commit here, so that we can later print "done" :-)
+ %commit
+ %echo done
diff --git a/test/gnupg_test_home/private-keys-v1.d/719C7455A7169C6EE8819C6E91002E4F9DD00A65.key b/test/gnupg_test_home/private-keys-v1.d/719C7455A7169C6EE8819C6E91002E4F9DD00A65.key
@@ -0,0 +1 @@
+(11:private-key(3:ecc(5:curve7:Ed25519)(5:flags5:eddsa)(1:q33:@�R���:_��eݒ�٥�K����28iA-�t)(1:d32:��}������y���U����D��h��T��@)))
+\ No newline at end of file
diff --git a/test/gnupg_test_home/private-keys-v1.d/8A130806A754AA29D59487D76BD355040D9F26C0.key b/test/gnupg_test_home/private-keys-v1.d/8A130806A754AA29D59487D76BD355040D9F26C0.key
Binary files differ.
diff --git a/test/gnupg_test_home/private-keys-v1.d/B7AA46B22BD8A6AD1B4F266C19A3B124A32DDD71.key b/test/gnupg_test_home/private-keys-v1.d/B7AA46B22BD8A6AD1B4F266C19A3B124A32DDD71.key
Binary files differ.
diff --git a/test/gnupg_test_home/private-keys-v1.d/FA64ACD7CC871371BDF57285A6CDF0E618827783.key b/test/gnupg_test_home/private-keys-v1.d/FA64ACD7CC871371BDF57285A6CDF0E618827783.key
Binary files differ.
diff --git a/test/gnupg_test_home/pubring.gpg b/test/gnupg_test_home/pubring.gpg
Binary files differ.
diff --git a/test/gnupg_test_home/regen_keys.sh b/test/gnupg_test_home/regen_keys.sh
@@ -26,6 +26,9 @@ mv pubring.gpg receiver_pubring.gpg
 echo "generate sender key.."
 gpg --batch --gen-key key1.gen
 
+echo "generate ecc key.."
+gpg --batch --gen-key key_ecc.gen
+
 echo "import receiver key.."
 gpg --import sup-test-2@foo.bar.asc
 
diff --git a/test/test_crypto.rb b/test/test_crypto.rb
@@ -29,6 +29,7 @@ class TestCryptoManager < Minitest::Test
 
     def setup
         @from_email = 'sup-test-1@foo.bar'
+        @from_email_ecc = 'sup-fake-ecc@fake.fake'
         @to_email   = 'sup-test-2@foo.bar'
         # Use test gnupg setup
         @orig_gnupghome = ENV['GNUPGHOME']
@@ -37,7 +38,7 @@ class TestCryptoManager < Minitest::Test
         @path = Dir.mktmpdir
         Redwood::HookManager.init File.join(@path, 'hooks')
 
-        am = {:default=> {:name => "test", :email=> 'sup-test-1@foo.bar'}}
+        am = {:default=> {name: "test", email: @from_email, alternates: [@from_email_ecc]}}
         Redwood::AccountManager.init am
 
         Redwood::CryptoManager.init
@@ -104,6 +105,15 @@ class TestCryptoManager < Minitest::Test
             CryptoManager.verify signed.body[0], signed.body[1], true
         end
     end
+
+    def test_verify_unknown_keytype
+        if CryptoManager.have_crypto?
+            signed = CryptoManager.sign @from_email_ecc, @to_email, "ABCDEFG"
+            assert_instance_of RMail::Message, signed
+            assert_instance_of String, (signed.body[1].body)
+            CryptoManager.verify signed.body[0], signed.body[1], true
+        end
+    end
 end
 
 end