diff --git a/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/AEADAlgorithm.kt b/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/AEADAlgorithm.kt index 6a3a6214..8bafa811 100644 --- a/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/AEADAlgorithm.kt +++ b/pgpainless-core/src/main/kotlin/org/pgpainless/algorithm/AEADAlgorithm.kt @@ -4,6 +4,8 @@ package org.pgpainless.algorithm +import org.bouncycastle.openpgp.api.MessageEncryptionMechanism + enum class AEADAlgorithm(val algorithmId: Int, val ivLength: Int, val tagLength: Int) { /** @@ -27,6 +29,9 @@ enum class AEADAlgorithm(val algorithmId: Int, val ivLength: Int, val tagLength: GCM(3, 12, 16), ; + fun toMechanism(ciphermode: SymmetricKeyAlgorithm): MessageEncryptionMechanism = + MessageEncryptionMechanism.aead(ciphermode.algorithmId, this.algorithmId) + companion object { @JvmStatic fun fromId(id: Int): AEADAlgorithm? { diff --git a/pgpainless-core/src/test/java/org/pgpainless/encryption_signing/EncryptDecryptTest.java b/pgpainless-core/src/test/java/org/pgpainless/encryption_signing/EncryptDecryptTest.java index c6fafa16..8de0d9ad 100644 --- a/pgpainless-core/src/test/java/org/pgpainless/encryption_signing/EncryptDecryptTest.java +++ b/pgpainless-core/src/test/java/org/pgpainless/encryption_signing/EncryptDecryptTest.java @@ -21,7 +21,6 @@ import java.util.Set; import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.openpgp.PGPException; import org.bouncycastle.openpgp.PGPSignature; -import org.bouncycastle.openpgp.api.MessageEncryptionMechanism; import org.bouncycastle.openpgp.api.OpenPGPCertificate; import org.bouncycastle.openpgp.api.OpenPGPKey; import org.bouncycastle.util.io.Streams; @@ -338,14 +337,13 @@ public class EncryptDecryptTest { .onOutputStream(bOut) .withOptions(ProducerOptions.encrypt( EncryptionOptions.encryptCommunications() - .overrideEncryptionMechanism(MessageEncryptionMechanism.aead(SymmetricKeyAlgorithm.AES_192.getAlgorithmId(), AEADAlgorithm.OCB.getAlgorithmId())) + .overrideEncryptionMechanism(AEADAlgorithm.OCB.toMechanism(SymmetricKeyAlgorithm.AES_192)) .addRecipient(keyWithoutSEIPD2Feature.toCertificate()))); eOut.write(testMessage.getBytes(StandardCharsets.UTF_8)); eOut.close(); EncryptionResult result = eOut.getResult(); - assertEquals(MessageEncryptionMechanism.aead( - SymmetricKeyAlgorithm.AES_192.getAlgorithmId(), AEADAlgorithm.OCB.getAlgorithmId()), + assertEquals(AEADAlgorithm.OCB.toMechanism(SymmetricKeyAlgorithm.AES_192), result.getEncryptionMechanism()); ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray()); @@ -357,7 +355,7 @@ public class EncryptDecryptTest { decIn.close(); MessageMetadata metadata = decIn.getMetadata(); - assertEquals(MessageEncryptionMechanism.aead(SymmetricKeyAlgorithm.AES_192.getAlgorithmId(), AEADAlgorithm.OCB.getAlgorithmId()), + assertEquals(AEADAlgorithm.OCB.toMechanism(SymmetricKeyAlgorithm.AES_192), metadata.getEncryptionMechanism()); } @@ -371,10 +369,7 @@ public class EncryptDecryptTest { .withOptions( ProducerOptions.encrypt(EncryptionOptions.encryptCommunications() .overrideEncryptionMechanism( - MessageEncryptionMechanism.aead( - SymmetricKeyAlgorithm.AES_192.getAlgorithmId(), - AEADAlgorithm.OCB.getAlgorithmId() - )) + AEADAlgorithm.OCB.toMechanism(SymmetricKeyAlgorithm.AES_192)) .addMessagePassphrase(Passphrase.fromPassword("sw0rdf1sh")) )); @@ -382,8 +377,7 @@ public class EncryptDecryptTest { eOut.close(); EncryptionResult result = eOut.getResult(); - assertEquals(MessageEncryptionMechanism.aead( - SymmetricKeyAlgorithm.AES_192.getAlgorithmId(), AEADAlgorithm.OCB.getAlgorithmId()), + assertEquals(AEADAlgorithm.OCB.toMechanism(SymmetricKeyAlgorithm.AES_192), result.getEncryptionMechanism()); ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray()); @@ -394,7 +388,7 @@ public class EncryptDecryptTest { Streams.drain(decIn); decIn.close(); MessageMetadata metadata = decIn.getMetadata(); - assertEquals(MessageEncryptionMechanism.aead(SymmetricKeyAlgorithm.AES_192.getAlgorithmId(), AEADAlgorithm.OCB.getAlgorithmId()), + assertEquals(AEADAlgorithm.OCB.toMechanism(SymmetricKeyAlgorithm.AES_192), metadata.getEncryptionMechanism()); }