Only skip hashing when creating an EDDSA authentication signature

This commit is contained in:
David Hedberg
2021-03-27 11:37:44 +01:00
parent 43b85e12ea
commit f45254cf07
2 changed files with 23 additions and 9 deletions

View File

@@ -255,14 +255,20 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey {
private PGPContentSignerBuilder getAuthenticationContentSignerBuilder(int hashAlgorithm, Map<ByteBuffer,
byte[]> signedHashes) {
if (
getAlgorithm() == PublicKeyAlgorithmTags.EDDSA
&& mPrivateKeyState != PRIVATE_KEY_STATE_DIVERT_TO_CARD) {
if (getAlgorithm() == PublicKeyAlgorithmTags.EDDSA) {
// content signer feeding the input directly into the signature engine,
// since EdDSA hashes the input anyway
return new EdDsaAuthenticationContentSignerBuilder(
mSecretKey.getPublicKey().getAlgorithm(), hashAlgorithm)
.setProvider(Constants.BOUNCY_CASTLE_PROVIDER_NAME);
if (mPrivateKeyState == PRIVATE_KEY_STATE_DIVERT_TO_CARD) {
return new NfcSyncPGPContentSignerBuilder(
mSecretKey.getPublicKey().getAlgorithm(), hashAlgorithm,
mSecretKey.getKeyID(), signedHashes)
.configureForEdDsaAuthenticationSignature()
.setProvider(Constants.BOUNCY_CASTLE_PROVIDER_NAME);
} else {
return new EdDsaAuthenticationContentSignerBuilder(
mSecretKey.getPublicKey().getAlgorithm(), hashAlgorithm)
.setProvider(Constants.BOUNCY_CASTLE_PROVIDER_NAME);
}
} else {
return getContentSignerBuilder(hashAlgorithm, signedHashes);
}