Merge ~cjwatson/launchpad:gpg-ecdsa into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: e9f2cb05a247796a1f77196cf9e7bf4d919ca476
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:gpg-ecdsa
Merge into: launchpad:master
Diff against target: 130 lines (+68/-10)
5 files modified
lib/lp/registry/templates/person-editpgpkeys.pt (+6/-0)
lib/lp/services/gpg/interfaces.py (+24/-4)
lib/lp/services/gpg/tests/test_gpghandler.py (+6/-6)
lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.pub (+14/-0)
lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.sec (+18/-0)
Reviewer Review Type Date Requested Status
Guruprasad Approve
Jürgen Gmach Approve
Review via email: mp+429660@code.launchpad.net

Commit message

Support GPG ECDSA/ECDH keys

Description of the change

Only some choices of elliptic curve will in fact work at the moment, due to limitations in the versions of GnuPG and GPGME on production; I've tested that at least `nistp256` works.

To post a comment you must log in.
Revision history for this message
Jürgen Gmach (jugmac00) :
review: Approve
Revision history for this message
Guruprasad (lgp171188) wrote :

LGTM 👍

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/registry/templates/person-editpgpkeys.pt b/lib/lp/registry/templates/person-editpgpkeys.pt
2index 169c5f0..f6dd57b 100644
3--- a/lib/lp/registry/templates/person-editpgpkeys.pt
4+++ b/lib/lp/registry/templates/person-editpgpkeys.pt
5@@ -163,6 +163,12 @@
6 fingerprint</a>)
7 </p>
8
9+ <p>
10+ At present, only RSA, DSA, and some ECC keys are supported; see
11+ <a href="https://bugs.launchpad.net/launchpad/+bug/1827369">bug
12+ 1827369</a> for details on the state of support for other key types.
13+ </p>
14+
15 <table class="form" id="launchpad-form-widgets">
16 <tbody>
17 <tr>
18diff --git a/lib/lp/services/gpg/interfaces.py b/lib/lp/services/gpg/interfaces.py
19index 39ec411..48bae87 100644
20--- a/lib/lp/services/gpg/interfaces.py
21+++ b/lib/lp/services/gpg/interfaces.py
22@@ -77,10 +77,14 @@ class GPGKeyAlgorithm(DBEnumeratedType):
23 """
24 GPG Compliant Key Algorithms Types:
25
26- 1 : "R", # RSA
27- 16: "g", # ElGamal
28- 17: "D", # DSA
29- 20: "G", # ElGamal, compromised
30+ 1 : "R", # RSA
31+ 16 : "g", # ElGamal
32+ 17 : "D", # DSA
33+ 20 : "G", # ElGamal, compromised
34+ 301: "E", # ECDSA
35+ 302: "e", # ECDH
36+
37+ See `pubkey_letter` in GnuPG for the single-letter codes used here.
38
39 FIXME
40 Rewrite it according to the experimental API returning also a name
41@@ -120,6 +124,22 @@ class GPGKeyAlgorithm(DBEnumeratedType):
42 ElGamal, compromised""",
43 )
44
45+ ECDSA = DBItem(
46+ 301,
47+ """
48+ E
49+
50+ ECDSA""",
51+ )
52+
53+ ECDH = DBItem(
54+ 302,
55+ """
56+ e
57+
58+ ECDH""",
59+ )
60+
61
62 class MoreThanOneGPGKeyFound(Exception):
63 """More than one GPG key was found.
64diff --git a/lib/lp/services/gpg/tests/test_gpghandler.py b/lib/lp/services/gpg/tests/test_gpghandler.py
65index 32cbaf5..653740d 100644
66--- a/lib/lp/services/gpg/tests/test_gpghandler.py
67+++ b/lib/lp/services/gpg/tests/test_gpghandler.py
68@@ -117,12 +117,12 @@ class TestGPGHandler(TestCase):
69 fingerprints = {
70 key.fingerprint for key in self.gpg_handler.localKeys()
71 }
72- self.assertTrue(
73- "340CA3BB270E2716C9EE0B768E7EB7086C64A8C5" in fingerprints
74- )
75- self.assertTrue(
76- "A419AE861E88BC9E04B9C26FBA2B9389DFD20543" in fingerprints
77- )
78+ # foo.bar@canonical.com
79+ self.assertIn("340CA3BB270E2716C9EE0B768E7EB7086C64A8C5", fingerprints)
80+ # test@canonical.com
81+ self.assertIn("A419AE861E88BC9E04B9C26FBA2B9389DFD20543", fingerprints)
82+ # foo.bar@canonical.com-nistp256
83+ self.assertIn("7DF8FEA9E998922E7CCB3EC9BF5D16BC1C0A8AE4", fingerprints)
84
85 def testFilteredGetKeys(self):
86 """Check the filtered key lookup mechanism.
87diff --git a/lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.pub b/lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.pub
88new file mode 100644
89index 0000000..56ec19c
90--- /dev/null
91+++ b/lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.pub
92@@ -0,0 +1,14 @@
93+-----BEGIN PGP PUBLIC KEY BLOCK-----
94+
95+mFIEYxox9BMIKoZIzj0DAQcCAwTbLMABKGPLD4yX+osrnVWQ9ngSiGBv5muILqO0
96+iNYo7kg3rCbp33oBQjJKlEFV0HrlJQTze14c5d2Z1EQnGhHstB9Gb28gQmFyIDxm
97+b28uYmFyQGNhbm9uaWNhbC5jb20+iJAEExMIADgWIQR9+P6p6ZiSLnzLPsm/XRa8
98+HAqK5AUCYxox9AIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRC/XRa8HAqK
99+5CQQAQDLbv63nO+pL+2y1weL4SaGCGny7juMkCQa2V0wU7y74AD/UJVN85Bpw4VD
100+XEHW8zhXiEj3Yj9M17viG7tbcZS9mCi4VgRjGjH0EggqhkjOPQMBBwIDBHPuDddS
101+Sn1O5XXIDw+k33dccqRz4Z+WSO4k4N+OrSoSAqwe97Wc0YdgDQwW0Tp1gtVQD0mh
102+zARX1hepE6vRfTkDAQgHiHgEGBMIACAWIQR9+P6p6ZiSLnzLPsm/XRa8HAqK5AUC
103+Yxox9AIbDAAKCRC/XRa8HAqK5D8WAQDkguaZBxo41fbas0FJOFiCDdv5SI5a5Aaa
104+nRf2hENLNAEAsEXYzFcKTmx7xkAmynsfN7T80ub5mjkkr27lBYCQfw0=
105+=bA48
106+-----END PGP PUBLIC KEY BLOCK-----
107diff --git a/lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.sec b/lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.sec
108new file mode 100644
109index 0000000..f0d99a8
110--- /dev/null
111+++ b/lib/lp/testing/gpgkeys/data/foo.bar@canonical.com-nistp256.sec
112@@ -0,0 +1,18 @@
113+-----BEGIN PGP PRIVATE KEY BLOCK-----
114+
115+lKUEYxox9BMIKoZIzj0DAQcCAwTbLMABKGPLD4yX+osrnVWQ9ngSiGBv5muILqO0
116+iNYo7kg3rCbp33oBQjJKlEFV0HrlJQTze14c5d2Z1EQnGhHs/gcDAttSqfrTn5HX
117+/8N6mjpGbfiaAA/VXUR6+r52IUMn5/9rx7THcjKnSyRtkC+f5w4/Fh/Asm8tpocM
118+XMqJPC+oBiF2bMvM+q+4OZj8bUTQR6K0H0ZvbyBCYXIgPGZvby5iYXJAY2Fub25p
119+Y2FsLmNvbT6IkAQTEwgAOBYhBH34/qnpmJIufMs+yb9dFrwcCorkBQJjGjH0AhsD
120+BQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJEL9dFrwcCorkJBABAMtu/rec76kv
121+7bLXB4vhJoYIafLuO4yQJBrZXTBTvLvgAP9QlU3zkGnDhUNcQdbzOFeISPdiP0zX
122+u+Ibu1txlL2YKJypBGMaMfQSCCqGSM49AwEHAgMEc+4N11JKfU7ldcgPD6Tfd1xy
123+pHPhn5ZI7iTg346tKhICrB73tZzRh2ANDBbROnWC1VAPSaHMBFfWF6kTq9F9OQMB
124+CAf+BwMCIIWZ4OnQZvb/hEJ/s7Kl7PuAEK4eCVw0dkBpIXCR8FQdl8k/Bb5BEO+t
125+O9A28j8teXzTRP2sBVHz9rTw+YPOAJYGSIXSXB8i+H+Tt4wgJIh4BBgTCAAgFiEE
126+ffj+qemYki58yz7Jv10WvBwKiuQFAmMaMfQCGwwACgkQv10WvBwKiuQ/FgEA5ILm
127+mQcaONX22rNBSThYgg3b+UiOWuQGmp0X9oRDSzQBALBF2MxXCk5se8ZAJsp7Hze0
128+/NLm+Zo5JK9u5QWAkH8N
129+=i86g
130+-----END PGP PRIVATE KEY BLOCK-----

Subscribers

People subscribed via source and target branches

to status/vote changes: