mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-18 02:12:06 +01:00
Add test for UniversalSignatureBuilder
This commit is contained in:
parent
4426895814
commit
ae6a427d90
3 changed files with 95 additions and 2 deletions
|
@ -12,7 +12,6 @@ import org.bouncycastle.openpgp.PGPSignature;
|
||||||
import org.bouncycastle.openpgp.PGPSignatureGenerator;
|
import org.bouncycastle.openpgp.PGPSignatureGenerator;
|
||||||
import org.pgpainless.algorithm.SignatureType;
|
import org.pgpainless.algorithm.SignatureType;
|
||||||
import org.pgpainless.key.protection.SecretKeyRingProtector;
|
import org.pgpainless.key.protection.SecretKeyRingProtector;
|
||||||
import org.pgpainless.signature.subpackets.BaseSignatureSubpackets;
|
|
||||||
import org.pgpainless.signature.subpackets.SignatureSubpackets;
|
import org.pgpainless.signature.subpackets.SignatureSubpackets;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -43,7 +42,7 @@ public class UniversalSignatureBuilder extends AbstractSignatureBuilder<Universa
|
||||||
return unhashedSubpackets;
|
return unhashedSubpackets;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyCallback(@Nullable BaseSignatureSubpackets.Callback callback) {
|
public void applyCallback(@Nullable SignatureSubpackets.Callback callback) {
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.modifyHashedSubpackets(getHashedSubpackets());
|
callback.modifyHashedSubpackets(getHashedSubpackets());
|
||||||
callback.modifyUnhashedSubpackets(getUnhashedSubpackets());
|
callback.modifyUnhashedSubpackets(getUnhashedSubpackets());
|
||||||
|
|
|
@ -82,6 +82,10 @@ public class SignatureSubpackets
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface Callback extends SignatureSubpacketCallback<SignatureSubpackets> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static SignatureSubpackets refreshHashedSubpackets(PGPPublicKey issuer, PGPSignature oldSignature) {
|
public static SignatureSubpackets refreshHashedSubpackets(PGPPublicKey issuer, PGPSignature oldSignature) {
|
||||||
return createHashedSubpacketsFrom(issuer, oldSignature.getHashedSubPackets());
|
return createHashedSubpacketsFrom(issuer, oldSignature.getHashedSubPackets());
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
// SPDX-FileCopyrightText: 2022 Paul Schaub <vanitasvitae@fsfe.org>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package org.pgpainless.signature.builder;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.bouncycastle.bcpg.sig.PrimaryUserID;
|
||||||
|
import org.bouncycastle.openpgp.PGPException;
|
||||||
|
import org.bouncycastle.openpgp.PGPSecretKey;
|
||||||
|
import org.bouncycastle.openpgp.PGPSecretKeyRing;
|
||||||
|
import org.bouncycastle.openpgp.PGPSignature;
|
||||||
|
import org.bouncycastle.openpgp.PGPSignatureGenerator;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.pgpainless.PGPainless;
|
||||||
|
import org.pgpainless.algorithm.HashAlgorithm;
|
||||||
|
import org.pgpainless.algorithm.KeyFlag;
|
||||||
|
import org.pgpainless.algorithm.SignatureType;
|
||||||
|
import org.pgpainless.key.protection.SecretKeyRingProtector;
|
||||||
|
import org.pgpainless.signature.subpackets.SignatureSubpackets;
|
||||||
|
|
||||||
|
public class UniversalSignatureBuilderTest {
|
||||||
|
|
||||||
|
private static final String KEY = "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" +
|
||||||
|
"Version: PGPainless\n" +
|
||||||
|
"Comment: 9611 510F 313E DBC2 BBBC DC24 3BAD F1F8 3E70 DC34\n" +
|
||||||
|
"Comment: Signora Universa <signora@pgpainless.org>\n" +
|
||||||
|
"\n" +
|
||||||
|
"lFgEY4DKKRYJKwYBBAHaRw8BAQdA65vJxvvLASI/gczDP8ZKH4C+16MLU7F5iP91\n" +
|
||||||
|
"8WWUqM0AAQCRSTHLLQWT9tuNRgkG3xaIiBGkEGD7Ou/R3oga6tc1MA8UtClTaWdu\n" +
|
||||||
|
"b3JhIFVuaXZlcnNhIDxzaWdub3JhQHBncGFpbmxlc3Mub3JnPoiPBBMWCgBBBQJj\n" +
|
||||||
|
"gMopCRA7rfH4PnDcNBYhBJYRUQ8xPtvCu7zcJDut8fg+cNw0Ap4BApsBBRYCAwEA\n" +
|
||||||
|
"BAsJCAcFFQoJCAsCmQEAAOgMAPwIOXWt3EBBusK5Ps3m7p/5HsecZv3IXtscEQBx\n" +
|
||||||
|
"vKlULwD/YuLP1XJSqcE2cQJRNt6OLi9Nt02MKBYkhWrRCYZAcQicXQRjgMopEgor\n" +
|
||||||
|
"BgEEAZdVAQUBAQdAWTstuhvHwmSXaQ4Vh8yxl0DZcvjrWkZI+n9/uFBxEmoDAQgH\n" +
|
||||||
|
"AAD/eRt6kgOMzWsTuM00am4UhSygxmDt7h6JkBTnpyyhK0gPiYh1BBgWCgAdBQJj\n" +
|
||||||
|
"gMopAp4BApsMBRYCAwEABAsJCAcFFQoJCAsACgkQO63x+D5w3DRnZAEA6GlS9Tw8\n" +
|
||||||
|
"9SJlUvh5aciYSlQUplnEdng+Pvzbj74zcXIA/2OkyMN428ddNhkHWWkZCMOxApum\n" +
|
||||||
|
"/zNDSYMwvByQ2KcFnFgEY4DKKRYJKwYBBAHaRw8BAQdAfhPrtVuG3g/zXF51VrPv\n" +
|
||||||
|
"kpQQk9aqjrkBMI0qlztBpu0AAP9Mw7NCsAVwg9CgmSzG2ATIDp3yf/4BGVYDs7qu\n" +
|
||||||
|
"+sbn7xKIiNUEGBYKAH0FAmOAyikCngECmwIFFgIDAQAECwkIBwUVCgkIC18gBBkW\n" +
|
||||||
|
"CgAGBQJjgMopAAoJENmzwZA/hq5ZCqIBAMYeOnASBd+WWta7Teh3g7Bl7sFY42Qy\n" +
|
||||||
|
"0OnaSGk/pLm9AP4yC62Xpb9DhWeiQIOY7k5n4lhNn173IfzDK6KXzBKkBgAKCRA7\n" +
|
||||||
|
"rfH4PnDcNMInAP4oanG9tbuczBNLN3JY4Hg4AaB+w5kfdOJxKwnAw7U0cgEAtasg\n" +
|
||||||
|
"67qSjHvsEvjNKeXzUm+db7NWP3fpIHxAmjWVjwM=\n" +
|
||||||
|
"=Dqbd\n" +
|
||||||
|
"-----END PGP PRIVATE KEY BLOCK-----";
|
||||||
|
|
||||||
|
private PGPSecretKeyRing secretKeys;
|
||||||
|
private final SecretKeyRingProtector protector = SecretKeyRingProtector.unprotectedKeys();
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void parseKey() throws IOException {
|
||||||
|
secretKeys = PGPainless.readKeyRing().secretKeyRing(KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createPetNameSignature() throws PGPException {
|
||||||
|
PGPSecretKey signingKey = secretKeys.getSecretKey();
|
||||||
|
PGPSignature archetype = signingKey.getPublicKey().getSignatures().next();
|
||||||
|
UniversalSignatureBuilder builder = new UniversalSignatureBuilder(
|
||||||
|
signingKey, protector, archetype);
|
||||||
|
|
||||||
|
builder.applyCallback(new SignatureSubpackets.Callback() {
|
||||||
|
@Override
|
||||||
|
public void modifyHashedSubpackets(SignatureSubpackets hashedSubpackets) {
|
||||||
|
hashedSubpackets.setExportable(true, false);
|
||||||
|
hashedSubpackets.setPrimaryUserId(new PrimaryUserID(false, false));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
PGPSignatureGenerator generator = builder.getSignatureGenerator();
|
||||||
|
|
||||||
|
String petName = "mykey";
|
||||||
|
PGPSignature petNameSig = generator.generateCertification(petName, secretKeys.getPublicKey());
|
||||||
|
|
||||||
|
assertEquals(SignatureType.POSITIVE_CERTIFICATION.getCode(), petNameSig.getSignatureType());
|
||||||
|
assertEquals(4, petNameSig.getVersion());
|
||||||
|
assertEquals(signingKey.getKeyID(), petNameSig.getKeyID());
|
||||||
|
assertEquals(HashAlgorithm.SHA512.getAlgorithmId(), petNameSig.getHashAlgorithm());
|
||||||
|
assertEquals(KeyFlag.toBitmask(KeyFlag.CERTIFY_OTHER), petNameSig.getHashedSubPackets().getKeyFlags());
|
||||||
|
assertFalse(petNameSig.getHashedSubPackets().isExportable());
|
||||||
|
assertFalse(petNameSig.getHashedSubPackets().isPrimaryUserID());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue