From 8385a2ca13573435a64d6bd96769c97e2e9edee8 Mon Sep 17 00:00:00 2001 From: gefeili Date: Thu, 18 Apr 2024 09:53:57 +0930 Subject: [PATCH] Refactor on IssuerKeyID, bcpg.sig.Utils. Add comments to PGPKeyEncryptionMethodGenerator, make iv in SecretKeyPacket is copied when processing. Refactor on SExpression. --- .../bouncycastle/bcpg/SecretKeyPacket.java | 5 +++-- .../bouncycastle/bcpg/sig/IssuerKeyID.java | 19 +++---------------- .../java/org/bouncycastle/bcpg/sig/Utils.java | 14 ++++---------- .../org/bouncycastle/gpg/SExpression.java | 2 +- .../PGPKeyEncryptionMethodGenerator.java | 9 +++++++++ 5 files changed, 20 insertions(+), 29 deletions(-) diff --git a/pg/src/main/java/org/bouncycastle/bcpg/SecretKeyPacket.java b/pg/src/main/java/org/bouncycastle/bcpg/SecretKeyPacket.java index decb8a1214..379fee1e25 100644 --- a/pg/src/main/java/org/bouncycastle/bcpg/SecretKeyPacket.java +++ b/pg/src/main/java/org/bouncycastle/bcpg/SecretKeyPacket.java @@ -3,6 +3,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.bouncycastle.util.Arrays; import org.bouncycastle.util.io.Streams; /** @@ -208,7 +209,7 @@ public SecretKeyPacket( this.aeadAlgorithm = aeadAlgorithm; this.s2kUsage = s2kUsage; this.s2k = s2k; - this.iv = iv; + this.iv = Arrays.clone(iv); this.secKeyData = secKeyData; if (s2k != null && s2k.getType() == S2K.ARGON_2 && s2kUsage != USAGE_AEAD) @@ -242,7 +243,7 @@ public int getS2KUsage() public byte[] getIV() { - return iv; + return Arrays.clone(iv); } public S2K getS2K() diff --git a/pg/src/main/java/org/bouncycastle/bcpg/sig/IssuerKeyID.java b/pg/src/main/java/org/bouncycastle/bcpg/sig/IssuerKeyID.java index 737914cdfe..42f8616508 100644 --- a/pg/src/main/java/org/bouncycastle/bcpg/sig/IssuerKeyID.java +++ b/pg/src/main/java/org/bouncycastle/bcpg/sig/IssuerKeyID.java @@ -2,6 +2,7 @@ import org.bouncycastle.bcpg.SignatureSubpacket; import org.bouncycastle.bcpg.SignatureSubpacketTags; +import org.bouncycastle.util.Pack; /** * packet giving the issuer key ID. @@ -12,18 +13,7 @@ public class IssuerKeyID protected static byte[] keyIDToBytes( long keyId) { - byte[] data = new byte[8]; - - data[0] = (byte)(keyId >> 56); - data[1] = (byte)(keyId >> 48); - data[2] = (byte)(keyId >> 40); - data[3] = (byte)(keyId >> 32); - data[4] = (byte)(keyId >> 24); - data[5] = (byte)(keyId >> 16); - data[6] = (byte)(keyId >> 8); - data[7] = (byte)keyId; - - return data; + return Pack.longToBigEndian(keyId); } public IssuerKeyID( @@ -43,9 +33,6 @@ public IssuerKeyID( public long getKeyID() { - long keyID = ((long)(data[0] & 0xff) << 56) | ((long)(data[1] & 0xff) << 48) | ((long)(data[2] & 0xff) << 40) | ((long)(data[3] & 0xff) << 32) - | ((long)(data[4] & 0xff) << 24) | ((data[5] & 0xff) << 16) | ((data[6] & 0xff) << 8) | (data[7] & 0xff); - - return keyID; + return Pack.bigEndianToLong(data, 0); } } diff --git a/pg/src/main/java/org/bouncycastle/bcpg/sig/Utils.java b/pg/src/main/java/org/bouncycastle/bcpg/sig/Utils.java index 074a38760b..95cbe0cba8 100644 --- a/pg/src/main/java/org/bouncycastle/bcpg/sig/Utils.java +++ b/pg/src/main/java/org/bouncycastle/bcpg/sig/Utils.java @@ -1,5 +1,7 @@ package org.bouncycastle.bcpg.sig; +import org.bouncycastle.util.Pack; + class Utils { /** @@ -55,19 +57,11 @@ static long timeFromBytes(byte[] bytes) throw new IllegalStateException("Byte array has unexpected length. Expected length 4, got " + bytes.length); } - return ((long)(bytes[0] & 0xff) << 24) - | ((bytes[1] & 0xff) << 16) - | ((bytes[2] & 0xff) << 8) - | (bytes[3] & 0xff); + return Pack.bigEndianToInt(bytes, 0); } static byte[] timeToBytes(long t) { - byte[] data = new byte[4]; - data[0] = (byte)(t >> 24); - data[1] = (byte)(t >> 16); - data[2] = (byte)(t >> 8); - data[3] = (byte)t; - return data; + return Pack.intToBigEndian((int)t); } } diff --git a/pg/src/main/java/org/bouncycastle/gpg/SExpression.java b/pg/src/main/java/org/bouncycastle/gpg/SExpression.java index b9c57c2455..ee5083ad5e 100644 --- a/pg/src/main/java/org/bouncycastle/gpg/SExpression.java +++ b/pg/src/main/java/org/bouncycastle/gpg/SExpression.java @@ -165,7 +165,7 @@ private static SExpression parseExpression(InputStream src, SExpression expr, By else if (c == '#') { consumeUntilSkipWhiteSpace(src, accumulator, '#'); - expr.addValue(Hex.decode(Strings.fromByteArray(accumulator.toByteArray()))); + expr.addValue(Hex.decode(accumulator.toByteArray())); } else if (c == '"') { diff --git a/pg/src/main/java/org/bouncycastle/openpgp/operator/PGPKeyEncryptionMethodGenerator.java b/pg/src/main/java/org/bouncycastle/openpgp/operator/PGPKeyEncryptionMethodGenerator.java index ece3ed58d7..7a494e23e8 100644 --- a/pg/src/main/java/org/bouncycastle/openpgp/operator/PGPKeyEncryptionMethodGenerator.java +++ b/pg/src/main/java/org/bouncycastle/openpgp/operator/PGPKeyEncryptionMethodGenerator.java @@ -1,6 +1,7 @@ package org.bouncycastle.openpgp.operator; import org.bouncycastle.bcpg.ContainedPacket; +import org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags; import org.bouncycastle.openpgp.PGPEncryptedDataGenerator; import org.bouncycastle.openpgp.PGPException; @@ -9,6 +10,14 @@ */ public abstract class PGPKeyEncryptionMethodGenerator { + /** + * Generates a packet encoding the details of this encryption method. + * + * @param encAlgorithm the {@link SymmetricKeyAlgorithmTags encryption algorithm} being used + * @param sessionInfo session data generated by the encrypted data generator. + * @return a packet encoding the provided information and the configuration of this instance. + * @throws PGPException if an error occurs constructing the packet. + */ public abstract ContainedPacket generate(int encAlgorithm, byte[] sessionInfo) throws PGPException;