mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-09-27 18:19:34 +02:00
F
This commit is contained in:
parent
09026f56b0
commit
7ca2b9a821
|
@ -9,6 +9,8 @@ import org.bouncycastle.bcpg.sig.EmbeddedSignature;
|
||||||
import org.bouncycastle.bcpg.sig.Exportable;
|
import org.bouncycastle.bcpg.sig.Exportable;
|
||||||
import org.bouncycastle.bcpg.sig.Features;
|
import org.bouncycastle.bcpg.sig.Features;
|
||||||
import org.bouncycastle.bcpg.sig.IntendedRecipientFingerprint;
|
import org.bouncycastle.bcpg.sig.IntendedRecipientFingerprint;
|
||||||
|
import org.bouncycastle.bcpg.sig.IssuerFingerprint;
|
||||||
|
import org.bouncycastle.bcpg.sig.IssuerKeyID;
|
||||||
import org.bouncycastle.bcpg.sig.KeyExpirationTime;
|
import org.bouncycastle.bcpg.sig.KeyExpirationTime;
|
||||||
import org.bouncycastle.bcpg.sig.KeyFlags;
|
import org.bouncycastle.bcpg.sig.KeyFlags;
|
||||||
import org.bouncycastle.bcpg.sig.NotationData;
|
import org.bouncycastle.bcpg.sig.NotationData;
|
||||||
|
@ -17,6 +19,7 @@ import org.bouncycastle.bcpg.sig.PrimaryUserID;
|
||||||
import org.bouncycastle.bcpg.sig.Revocable;
|
import org.bouncycastle.bcpg.sig.Revocable;
|
||||||
import org.bouncycastle.bcpg.sig.RevocationKey;
|
import org.bouncycastle.bcpg.sig.RevocationKey;
|
||||||
import org.bouncycastle.bcpg.sig.RevocationReason;
|
import org.bouncycastle.bcpg.sig.RevocationReason;
|
||||||
|
import org.bouncycastle.bcpg.sig.SignatureCreationTime;
|
||||||
import org.bouncycastle.bcpg.sig.SignatureExpirationTime;
|
import org.bouncycastle.bcpg.sig.SignatureExpirationTime;
|
||||||
import org.bouncycastle.bcpg.sig.SignatureTarget;
|
import org.bouncycastle.bcpg.sig.SignatureTarget;
|
||||||
import org.bouncycastle.bcpg.sig.SignerUserID;
|
import org.bouncycastle.bcpg.sig.SignerUserID;
|
||||||
|
@ -36,9 +39,16 @@ public class SignatureSubpacketsHelper {
|
||||||
org.pgpainless.algorithm.SignatureSubpacket type = org.pgpainless.algorithm.SignatureSubpacket.fromCode(subpacket.getType());
|
org.pgpainless.algorithm.SignatureSubpacket type = org.pgpainless.algorithm.SignatureSubpacket.fromCode(subpacket.getType());
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case signatureCreationTime:
|
case signatureCreationTime:
|
||||||
|
SignatureCreationTime sigCreationTime = (SignatureCreationTime) subpacket;
|
||||||
|
subpackets.setSignatureCreationTime(sigCreationTime);
|
||||||
|
break;
|
||||||
case issuerKeyId:
|
case issuerKeyId:
|
||||||
|
IssuerKeyID issuerKeyID = (IssuerKeyID) subpacket;
|
||||||
|
subpackets.setIssuerKeyId(issuerKeyID);
|
||||||
|
break;
|
||||||
case issuerFingerprint:
|
case issuerFingerprint:
|
||||||
// ignore, we override this anyways
|
IssuerFingerprint issuerFingerprint = (IssuerFingerprint) subpacket;
|
||||||
|
subpackets.setIssuerFingerprint(issuerFingerprint);
|
||||||
break;
|
break;
|
||||||
case signatureExpirationTime:
|
case signatureExpirationTime:
|
||||||
SignatureExpirationTime sigExpTime = (SignatureExpirationTime) subpacket;
|
SignatureExpirationTime sigExpTime = (SignatureExpirationTime) subpacket;
|
||||||
|
|
|
@ -8,8 +8,7 @@ import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||||
|
|
||||||
import java.security.InvalidAlgorithmParameterException;
|
import java.io.IOException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ -25,19 +24,36 @@ import org.pgpainless.util.TestAllImplementations;
|
||||||
|
|
||||||
public class OldSignatureSubpacketsArePreservedOnNewSig {
|
public class OldSignatureSubpacketsArePreservedOnNewSig {
|
||||||
|
|
||||||
|
private static final String nonExpiringKey = "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" +
|
||||||
|
"Version: PGPainless\n" +
|
||||||
|
"Comment: 4398 3833 6CCB 85C4 BB5A 9E3A 1D0A 4A95 635B EE3F\n" +
|
||||||
|
"Comment: Alice <alice@wonderland.lit>\n" +
|
||||||
|
"\n" +
|
||||||
|
"lFgEYdDrURYJKwYBBAHaRw8BAQdAKQ9V1m76/9Nh9Je2b69yznCeT31Sjl4MzV3E\n" +
|
||||||
|
"q9/v014AAP9EEWaTbaUrmQWeoh/kclIOTOd/b6r4cFcFx2vOdFzUxxA3tBxBbGlj\n" +
|
||||||
|
"ZSA8YWxpY2VAd29uZGVybGFuZC5saXQ+iI8EExYKAEEFAmHQ61IJkB0KSpVjW+4/\n" +
|
||||||
|
"FqEEQ5g4M2zLhcS7Wp46HQpKlWNb7j8CngECmwMFlgIDAQAEiwkIBwWVCgkICwKZ\n" +
|
||||||
|
"AQAAT+4A/2LrJ4O1f7npnE3vGemysXNkAb/h1XuiyIzspLJwjIyaAP97vn/n6xuJ\n" +
|
||||||
|
"0bk78ZLEJE7IurNjuhb5xmREa68AYcmUAZxdBGHQ61ISCisGAQQBl1UBBQEBB0AN\n" +
|
||||||
|
"tuRI87tPfJbKmXGGwbOjspLQ3qhFEKohaqeDmFe7OQMBCAcAAP976zWucXZ100RR\n" +
|
||||||
|
"8KsjFGgO50O9TQ5f4adi2N41zTUrOBAviHUEGBYKAB0FAmHQ61ICngECmwwFlgID\n" +
|
||||||
|
"AQAEiwkIBwWVCgkICwAKCRAdCkqVY1vuP/LEAQDg/K1bmNdpQdkPrZD00r55HP9T\n" +
|
||||||
|
"vvExdYJtFaX2rCIANgEAidfP0vSG/17L6iDR3/TQC0qWew/iQaRhE95ALUn38g0=\n" +
|
||||||
|
"=mNne\n" +
|
||||||
|
"-----END PGP PRIVATE KEY BLOCK-----";
|
||||||
|
|
||||||
@TestTemplate
|
@TestTemplate
|
||||||
@ExtendWith(TestAllImplementations.class)
|
@ExtendWith(TestAllImplementations.class)
|
||||||
public void verifyOldSignatureSubpacketsArePreservedOnNewExpirationDateSig()
|
public void verifyOldSignatureSubpacketsArePreservedOnNewExpirationDateSig()
|
||||||
throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, PGPException, InterruptedException {
|
throws PGPException, IOException {
|
||||||
PGPSecretKeyRing secretKeys = PGPainless.generateKeyRing()
|
PGPSecretKeyRing secretKeys = PGPainless.readKeyRing().secretKeyRing(nonExpiringKey);
|
||||||
.simpleEcKeyRing("Alice <alice@wonderland.lit>");
|
|
||||||
|
|
||||||
PGPSignature oldSignature = PGPainless.inspectKeyRing(secretKeys).getLatestUserIdCertification("Alice <alice@wonderland.lit>");
|
PGPSignature oldSignature = PGPainless.inspectKeyRing(secretKeys).getLatestUserIdCertification("Alice <alice@wonderland.lit>");
|
||||||
PGPSignatureSubpacketVector oldPackets = oldSignature.getHashedSubPackets();
|
PGPSignatureSubpacketVector oldPackets = oldSignature.getHashedSubPackets();
|
||||||
|
|
||||||
|
// key does not expire
|
||||||
assertEquals(0, oldPackets.getKeyExpirationTime());
|
assertEquals(0, oldPackets.getKeyExpirationTime());
|
||||||
|
|
||||||
Thread.sleep(1000);
|
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
calendar.setTime(now);
|
calendar.setTime(now);
|
||||||
|
|
|
@ -11,6 +11,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
import java.security.InvalidAlgorithmParameterException;
|
import java.security.InvalidAlgorithmParameterException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import org.bouncycastle.openpgp.PGPException;
|
import org.bouncycastle.openpgp.PGPException;
|
||||||
import org.bouncycastle.openpgp.PGPSecretKeyRing;
|
import org.bouncycastle.openpgp.PGPSecretKeyRing;
|
||||||
|
|
|
@ -39,6 +39,7 @@ import org.bouncycastle.openpgp.PGPSignature;
|
||||||
import org.bouncycastle.openpgp.PGPSignatureGenerator;
|
import org.bouncycastle.openpgp.PGPSignatureGenerator;
|
||||||
import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator;
|
import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator;
|
||||||
import org.bouncycastle.openpgp.PGPSignatureSubpacketVector;
|
import org.bouncycastle.openpgp.PGPSignatureSubpacketVector;
|
||||||
|
import org.bouncycastle.util.encoders.Hex;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -449,11 +450,9 @@ public class SignatureSubpacketsTest {
|
||||||
long keyId = fingerprint.getKeyId();
|
long keyId = fingerprint.getKeyId();
|
||||||
|
|
||||||
PGPSignatureSubpacketGenerator subpackets = new PGPSignatureSubpacketGenerator();
|
PGPSignatureSubpacketGenerator subpackets = new PGPSignatureSubpacketGenerator();
|
||||||
// These are not extracted from the vector
|
|
||||||
subpackets.setSignatureCreationTime(true, sigCreationDate);
|
subpackets.setSignatureCreationTime(true, sigCreationDate);
|
||||||
subpackets.setIssuerKeyID(true, keyId);
|
subpackets.setIssuerKeyID(true, keyId);
|
||||||
subpackets.setIssuerFingerprint(true, publicKeys.getPublicKey());
|
subpackets.setIssuerFingerprint(true, publicKeys.getPublicKey());
|
||||||
// These are extracted
|
|
||||||
subpackets.setSignatureExpirationTime(true, 256000);
|
subpackets.setSignatureExpirationTime(true, 256000);
|
||||||
subpackets.setExportable(true, true);
|
subpackets.setExportable(true, true);
|
||||||
subpackets.setTrust(true, 5, 15);
|
subpackets.setTrust(true, 5, 15);
|
||||||
|
@ -488,12 +487,9 @@ public class SignatureSubpacketsTest {
|
||||||
SignatureSubpackets wrapper = SignatureSubpackets.createSubpacketsFrom(subpackets.generate());
|
SignatureSubpackets wrapper = SignatureSubpackets.createSubpacketsFrom(subpackets.generate());
|
||||||
PGPSignatureSubpacketVector vector = SignatureSubpacketsHelper.toVector(wrapper);
|
PGPSignatureSubpacketVector vector = SignatureSubpacketsHelper.toVector(wrapper);
|
||||||
|
|
||||||
// Verify these are not extracted
|
assertEquals(keyId, vector.getIssuerKeyID());
|
||||||
assertEquals(0, vector.getIssuerKeyID());
|
assertEquals(fingerprint.toString(), Hex.toHexString(vector.getIssuerFingerprint().getFingerprint()).toUpperCase());
|
||||||
assertNull(vector.getIssuerFingerprint());
|
assertEquals(sigCreationDate.getTime(), vector.getSignatureCreationTime().getTime());
|
||||||
assertNull(vector.getSignatureCreationTime());
|
|
||||||
|
|
||||||
// Verify these are extracted
|
|
||||||
assertEquals(256000, vector.getSignatureExpirationTime());
|
assertEquals(256000, vector.getSignatureExpirationTime());
|
||||||
assertTrue(((Exportable) vector.getSubpacket(SignatureSubpacketTags.EXPORTABLE)).isExportable());
|
assertTrue(((Exportable) vector.getSubpacket(SignatureSubpacketTags.EXPORTABLE)).isExportable());
|
||||||
TrustSignature trust = (TrustSignature) vector.getSubpacket(SignatureSubpacketTags.TRUST_SIG);
|
TrustSignature trust = (TrustSignature) vector.getSubpacket(SignatureSubpacketTags.TRUST_SIG);
|
||||||
|
|
Loading…
Reference in a new issue