From 3fb47716024700ccb29888ca2d1ea9d4f2d1cc9b Mon Sep 17 00:00:00 2001 From: David Hedberg Date: Sat, 20 Feb 2021 14:26:18 +0100 Subject: [PATCH] Activate ssh encoding of public keys for ed25519 --- .../keychain/pgp/SshPublicKey.java | 19 +++++++++---------- extern/bouncycastle | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/SshPublicKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/SshPublicKey.java index f6b5224d5..407da6b14 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/SshPublicKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/SshPublicKey.java @@ -19,11 +19,13 @@ package org.sufficientlysecure.keychain.pgp; import org.bouncycastle.bcpg.DSAPublicBCPGKey; import org.bouncycastle.bcpg.ECPublicBCPGKey; +import org.bouncycastle.bcpg.EdDSAPublicBCPGKey; import org.bouncycastle.bcpg.RSAPublicBCPGKey; import org.bouncycastle.openpgp.PGPPublicKey; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.ssh.key.SshDSAPublicKey; import org.sufficientlysecure.keychain.ssh.key.SshECDSAPublicKey; +import org.sufficientlysecure.keychain.ssh.key.SshEd25519PublicKey; import org.sufficientlysecure.keychain.ssh.key.SshRSAPublicKey; import org.sufficientlysecure.keychain.ssh.utils.SshUtils; @@ -46,9 +48,8 @@ public class SshPublicKey { return encodeRSAKey(key); case PGPPublicKey.ECDSA: return encodeECKey(key); - // TODO -// case PGPPublicKey.EDDSA: -// return encodeEdDSAKey(key); + case PGPPublicKey.EDDSA: + return encodeEdDSAKey(key); case PGPPublicKey.DSA: return encodeDSAKey(key); default: @@ -73,15 +74,13 @@ public class SshPublicKey { return sshECDSAPublicKey.getPublicKeyBlob(); } + private String encodeEdDSAKey(PGPPublicKey publicKey) { + EdDSAPublicBCPGKey publicBCPGKey = (EdDSAPublicBCPGKey) publicKey.getPublicKeyPacket().getKey(); + SshEd25519PublicKey pubkey = new SshEd25519PublicKey(publicBCPGKey.getEdDSAEncodedPoint()); -// private String encodeEdDSAKey(PGPPublicKey publicKey) { -// EdDSAPublicBCPGKey publicBCPGKey = (EdDSAPublicBCPGKey) publicKey.getPublicKeyPacket().getKey(); -// -// SshEd25519PublicKey pubkey = new SshEd25519PublicKey(publicBCPGKey.getEdDSAEncodedPoint()); -// -// return pubkey.getPublicKeyBlob(); -// } + return pubkey.getPublicKeyBlob(); + } private String encodeDSAKey(PGPPublicKey publicKey) { DSAPublicBCPGKey publicBCPGKey = (DSAPublicBCPGKey) publicKey.getPublicKeyPacket().getKey(); diff --git a/extern/bouncycastle b/extern/bouncycastle index 40bdff642..be424633c 160000 --- a/extern/bouncycastle +++ b/extern/bouncycastle @@ -1 +1 @@ -Subproject commit 40bdff6428fbe09f20f727abcb06ce5c62efb436 +Subproject commit be424633c3bfb942dd07f290dc4b7299034ac021