Skip to content

Commit

Permalink
Fix test and add temporary workaround
Browse files Browse the repository at this point in the history
  • Loading branch information
vanitasvitae committed Aug 1, 2023
1 parent 23e31a1 commit 0e51e1c
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@
import org.pgpainless.algorithm.PublicKeyAlgorithm;
import org.pgpainless.key.util.RevocationAttributes;

import java.util.ArrayList;
import java.util.List;

public class SignatureSubpacketsHelper {

public static SignatureSubpackets applyFrom(PGPSignatureSubpacketVector vector, SignatureSubpackets subpackets) {
Expand Down Expand Up @@ -81,6 +84,19 @@ public static SignatureSubpackets applyFrom(PGPSignatureSubpacketVector vector,
subpackets.setPreferredCompressionAlgorithms((PreferredAlgorithms) subpacket);
break;
case preferredAEADAlgorithms:
// Workaround for https://github.com/pgpainless/pgpainless/pull/399
// TODO: Remove when BC 1.77 is released
if (subpacket instanceof PreferredAlgorithms) {
List<PreferredAEADCiphersuites.Combination> combinationList = new ArrayList<>();
int[] algorithms = ((PreferredAlgorithms) subpacket).getPreferences();
for (int i = 0; i < algorithms.length; i += 2) {
combinationList.add(new PreferredAEADCiphersuites.Combination(algorithms[i], algorithms[i + 1]));
}
PreferredAEADCiphersuites aead = new PreferredAEADCiphersuites(
subpacket.isCritical(), combinationList.toArray(new PreferredAEADCiphersuites.Combination[0]));
subpackets.setPreferredAEADCiphersuites(aead);
break;
}
subpackets.setPreferredAEADCiphersuites((PreferredAEADCiphersuites) subpacket);
break;
case primaryUserId:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@
import java.util.Iterator;
import java.util.Random;

import org.bouncycastle.bcpg.AEADAlgorithmTags;
import org.bouncycastle.bcpg.SignatureSubpacket;
import org.bouncycastle.bcpg.SignatureSubpacketTags;
import org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags;
import org.bouncycastle.bcpg.sig.Exportable;
import org.bouncycastle.bcpg.sig.Features;
import org.bouncycastle.bcpg.sig.IssuerFingerprint;
import org.bouncycastle.bcpg.sig.NotationData;
import org.bouncycastle.bcpg.sig.PreferredAEADCiphersuites;
import org.bouncycastle.bcpg.sig.PreferredAlgorithms;
import org.bouncycastle.bcpg.sig.Revocable;
import org.bouncycastle.bcpg.sig.RevocationKey;
Expand Down Expand Up @@ -481,9 +484,17 @@ public void testExtractSubpacketsFromVector() throws IOException {
new Random().nextBytes(hash);
subpackets.setSignatureTarget(false, publicKeys.getPublicKey().getAlgorithm(), HashAlgorithm.SHA512.getAlgorithmId(), hash);
subpackets.addIntendedRecipientFingerprint(true, publicKeys.getPublicKey());
PreferredAlgorithms aead = new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_AEAD_ALGORITHMS, false, new int[] {2});
subpackets.addCustomSubpacket(aead);

PreferredAEADCiphersuites.Combination[] aead = new PreferredAEADCiphersuites.Combination[] {
new PreferredAEADCiphersuites.Combination(SymmetricKeyAlgorithmTags.AES_256, AEADAlgorithmTags.OCB),
new PreferredAEADCiphersuites.Combination(SymmetricKeyAlgorithmTags.AES_128, AEADAlgorithmTags.EAX),
// Implicitly supported
new PreferredAEADCiphersuites.Combination(SymmetricKeyAlgorithmTags.AES_128, AEADAlgorithmTags.OCB)
};
subpackets.setPreferredAEADAlgorithms(false, new int[] {
aead[0].getSymmetricAlgorithm(), aead[0].getAeadAlgorithm(),
aead[1].getSymmetricAlgorithm(), aead[1].getAeadAlgorithm(),
aead[2].getSymmetricAlgorithm(), aead[2].getAeadAlgorithm()
});

SignatureSubpackets wrapper = SignatureSubpackets.createSubpacketsFrom(subpackets.generate());
PGPSignatureSubpacketVector vector = SignatureSubpacketsHelper.toVector(wrapper);
Expand Down Expand Up @@ -530,7 +541,7 @@ public void testExtractSubpacketsFromVector() throws IOException {
assertEquals(HashAlgorithm.SHA512.getAlgorithmId(), signatureTarget.getHashAlgorithm());
assertArrayEquals(hash, signatureTarget.getHashData());
assertArrayEquals(publicKeys.getPublicKey().getFingerprint(), vector.getIntendedRecipientFingerprint().getFingerprint());
PreferredAlgorithms aeadAlgorithms = (PreferredAlgorithms) vector.getSubpacket(SignatureSubpacketTags.PREFERRED_AEAD_ALGORITHMS);
assertArrayEquals(aead.getPreferences(), aeadAlgorithms.getPreferences());
PreferredAEADCiphersuites aeadAlgorithms = (PreferredAEADCiphersuites) vector.getSubpacket(SignatureSubpacketTags.PREFERRED_AEAD_ALGORITHMS);
assertArrayEquals(aead, aeadAlgorithms.getAlgorithms());
}
}

0 comments on commit 0e51e1c

Please sign in to comment.