diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ssh/AuthenticationOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ssh/AuthenticationOperation.java index d30f305b1..5bef23b0d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ssh/AuthenticationOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ssh/AuthenticationOperation.java @@ -218,7 +218,7 @@ public class AuthenticationOperation extends BaseOperation signatureGenerator.update(challenge, 0, challenge.length); try { - signature = signatureGenerator.generate().getSignature(); + signature = signatureGenerator.getSignature(); } catch (NfcSyncPGPContentSignerBuilder.NfcInteractionNeeded e) { // this secret key diverts to a OpenPGP card, thus requires user interaction log.add(LogType.MSG_AUTH_PENDING_NFC, indent); diff --git a/libkeychain/src/main/java/org/bouncycastle/openpgp/AuthenticationSignatureGenerator.java b/libkeychain/src/main/java/org/bouncycastle/openpgp/AuthenticationSignatureGenerator.java index cb36576f4..99889550c 100644 --- a/libkeychain/src/main/java/org/bouncycastle/openpgp/AuthenticationSignatureGenerator.java +++ b/libkeychain/src/main/java/org/bouncycastle/openpgp/AuthenticationSignatureGenerator.java @@ -1,15 +1,11 @@ package org.bouncycastle.openpgp; -import org.bouncycastle.bcpg.MPInteger; import org.bouncycastle.bcpg.PublicKeyAlgorithmTags; -import org.bouncycastle.bcpg.SignaturePacket; import org.bouncycastle.openpgp.operator.PGPContentSigner; import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder; -import org.bouncycastle.util.BigIntegers; import java.io.IOException; import java.io.OutputStream; -import java.math.BigInteger; /** * Generator for authentication signatures. @@ -71,30 +67,20 @@ public class AuthenticationSignatureGenerator { } /** - * Return a signature object containing the current signature state. + * Return the signature. * - * @return PGPSignature + * @return byte[] * @throws PGPException */ - public PGPSignature generate() throws PGPException { - MPInteger[] sigValues; - + public byte[] getSignature() throws PGPException { if (contentSigner.getKeyAlgorithm() == PublicKeyAlgorithmTags.RSA_SIGN - || contentSigner.getKeyAlgorithm() == PublicKeyAlgorithmTags.RSA_GENERAL) { - sigValues = new MPInteger[1]; - sigValues[0] = new MPInteger(new BigInteger(1, contentSigner.getSignature())); - } else if (contentSigner.getKeyAlgorithm() == PublicKeyAlgorithmTags.EDDSA) { - byte[] sig = contentSigner.getSignature(); - - sigValues = new MPInteger[2]; - - sigValues[0] = new MPInteger(BigIntegers.fromUnsignedByteArray(sig, 0, 32)); - sigValues[1] = new MPInteger(BigIntegers.fromUnsignedByteArray(sig, 32, 32)); + || contentSigner.getKeyAlgorithm() == PublicKeyAlgorithmTags.RSA_GENERAL + || contentSigner.getKeyAlgorithm() == PublicKeyAlgorithmTags.EDDSA + || contentSigner.getKeyAlgorithm() == PublicKeyAlgorithmTags.ECDSA + || contentSigner.getKeyAlgorithm() == PublicKeyAlgorithmTags.DSA) { + return contentSigner.getSignature(); } else { - sigValues = PGPUtil.dsaSigToMpi(contentSigner.getSignature()); + throw new UnsupportedOperationException("Unsupported algorithm"); } - - return new PGPSignature(new SignaturePacket(sigType, contentSigner.getKeyID(), contentSigner.getKeyAlgorithm(), - contentSigner.getHashAlgorithm(), null, null, null, sigValues)); } }