From 5ac39b19f346e72005f41f13ff956f4fa7c97f86 Mon Sep 17 00:00:00 2001 From: Peter Dettman Date: Tue, 28 Feb 2023 18:49:21 +0700 Subject: OpenPGP updates from bc-java --- .../src/openpgp/PgpSignatureSubpacketGenerator.cs | 205 ++++++++++++--------- 1 file changed, 120 insertions(+), 85 deletions(-) (limited to 'crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs') diff --git a/crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs b/crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs index 07b9fee17..010e7e052 100644 --- a/crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs +++ b/crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs @@ -5,7 +5,7 @@ using Org.BouncyCastle.Bcpg.Sig; namespace Org.BouncyCastle.Bcpg.OpenPgp { - /// Generator for signature subpackets. + /// Generator for signature subpackets. public class PgpSignatureSubpacketGenerator { private readonly List list = new List(); @@ -35,23 +35,17 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp } } - public void SetRevocable( - bool isCritical, - bool isRevocable) + public void SetRevocable(bool isCritical, bool isRevocable) { list.Add(new Revocable(isCritical, isRevocable)); } - public void SetExportable( - bool isCritical, - bool isExportable) + public void SetExportable(bool isCritical, bool isExportable) { list.Add(new Exportable(isCritical, isExportable)); } - public void SetFeature( - bool isCritical, - byte feature) + public void SetFeature(bool isCritical, byte feature) { list.Add(new Features(isCritical, feature)); } @@ -63,10 +57,7 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp /// true if the packet is critical. /// depth level. /// trust amount. - public void SetTrust( - bool isCritical, - int depth, - int trustAmount) + public void SetTrust(bool isCritical, int depth, int trustAmount) { list.Add(new TrustSignature(isCritical, depth, trustAmount)); } @@ -77,9 +68,7 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp /// /// True, if should be treated as critical, false otherwise. /// The number of seconds the key is valid, or zero if no expiry. - public void SetKeyExpirationTime( - bool isCritical, - long seconds) + public void SetKeyExpirationTime(bool isCritical, long seconds) { list.Add(new KeyExpirationTime(isCritical, seconds)); } @@ -90,9 +79,7 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp /// /// True, if should be treated as critical, false otherwise. /// The number of seconds the signature is valid, or zero if no expiry. - public void SetSignatureExpirationTime( - bool isCritical, - long seconds) + public void SetSignatureExpirationTime(bool isCritical, long seconds) { list.Add(new SignatureExpirationTime(isCritical, seconds)); } @@ -103,54 +90,56 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp /// Note: this overrides the generation of a creation time when the signature /// is generated.

/// - public void SetSignatureCreationTime( - bool isCritical, - DateTime date) + public void SetSignatureCreationTime(bool isCritical, DateTime date) { list.Add(new SignatureCreationTime(isCritical, date)); } - public void SetPreferredHashAlgorithms( - bool isCritical, - int[] algorithms) + public void SetPreferredHashAlgorithms(bool isCritical, int[] algorithms) { list.Add(new PreferredAlgorithms(SignatureSubpacketTag.PreferredHashAlgorithms, isCritical, algorithms)); } - public void SetPreferredSymmetricAlgorithms( - bool isCritical, - int[] algorithms) + public void SetPreferredSymmetricAlgorithms(bool isCritical, int[] algorithms) { list.Add(new PreferredAlgorithms(SignatureSubpacketTag.PreferredSymmetricAlgorithms, isCritical, algorithms)); } - public void SetPreferredCompressionAlgorithms( - bool isCritical, - int[] algorithms) + public void SetPreferredCompressionAlgorithms(bool isCritical, int[] algorithms) { list.Add(new PreferredAlgorithms(SignatureSubpacketTag.PreferredCompressionAlgorithms, isCritical, algorithms)); } - public void SetKeyFlags( - bool isCritical, - int flags) + public void SetPreferredAeadAlgorithms(bool isCritical, int[] algorithms) + { + list.Add(new PreferredAlgorithms(SignatureSubpacketTag.PreferredAeadAlgorithms, isCritical, algorithms)); + } + + public void AddPolicyUrl(bool isCritical, string policyUrl) + { + list.Add(new PolicyUrl(isCritical, policyUrl)); + } + + public void SetKeyFlags(bool isCritical, int flags) { list.Add(new KeyFlags(isCritical, flags)); } - public void SetSignerUserId( - bool isCritical, - string userId) + [Obsolete("Use 'AddSignerUserId' instead")] + public void SetSignerUserId(bool isCritical, string userId) + { + AddSignerUserId(isCritical, userId); + } + + public void AddSignerUserId(bool isCritical, string userId) { if (userId == null) throw new ArgumentNullException("userId"); - list.Add(new SignerUserId(isCritical, userId)); + list.Add(new SignerUserId(isCritical, userId)); } - public void SetSignerUserId( - bool isCritical, - byte[] rawUserId) + public void SetSignerUserId(bool isCritical, byte[] rawUserId) { if (rawUserId == null) throw new ArgumentNullException("rawUserId"); @@ -158,70 +147,116 @@ namespace Org.BouncyCastle.Bcpg.OpenPgp list.Add(new SignerUserId(isCritical, false, rawUserId)); } - public void SetEmbeddedSignature( - bool isCritical, - PgpSignature pgpSignature) + [Obsolete("Use 'AddEmbeddedSignature' instead")] + public void SetEmbeddedSignature(bool isCritical, PgpSignature pgpSignature) { - byte[] sig = pgpSignature.GetEncoded(); - byte[] data; - - // TODO Should be >= ? - if (sig.Length - 1 > 256) - { - data = new byte[sig.Length - 3]; - } - else - { - data = new byte[sig.Length - 2]; - } - - Array.Copy(sig, sig.Length - data.Length, data, 0, data.Length); - - list.Add(new EmbeddedSignature(isCritical, false, data)); + AddEmbeddedSignature(isCritical, pgpSignature); } - public void SetPrimaryUserId( - bool isCritical, - bool isPrimaryUserId) + public void AddEmbeddedSignature(bool isCritical, PgpSignature pgpSignature) + { + byte[] sig = pgpSignature.GetEncoded(); + byte[] data; + + // TODO Should be >= ? + if (sig.Length - 1 > 256) + { + data = new byte[sig.Length - 3]; + } + else + { + data = new byte[sig.Length - 2]; + } + + Array.Copy(sig, sig.Length - data.Length, data, 0, data.Length); + + list.Add(new EmbeddedSignature(isCritical, false, data)); + } + + public void SetPrimaryUserId(bool isCritical, bool isPrimaryUserId) { list.Add(new PrimaryUserId(isCritical, isPrimaryUserId)); } - public void SetNotationData( - bool isCritical, - bool isHumanReadable, - string notationName, - string notationValue) + [Obsolete("Use 'AddNotationData' instead")] + public void SetNotationData(bool isCritical, bool isHumanReadable, string notationName, string notationValue) { - list.Add(new NotationData(isCritical, isHumanReadable, notationName, notationValue)); + AddNotationData(isCritical, isHumanReadable, notationName, notationValue); } - /// - /// Sets revocation reason sub packet - /// - public void SetRevocationReason(bool isCritical, RevocationReasonTag reason, - string description) + public void AddNotationData(bool isCritical, bool isHumanReadable, string notationName, string notationValue) + { + list.Add(new NotationData(isCritical, isHumanReadable, notationName, notationValue)); + } + + /// + /// Sets revocation reason sub packet + /// + public void SetRevocationReason(bool isCritical, RevocationReasonTag reason, string description) { list.Add(new RevocationReason(isCritical, reason, description)); } - /// - /// Sets revocation key sub packet - /// + [Obsolete("Use 'AddRevocationKey' instead")] public void SetRevocationKey(bool isCritical, PublicKeyAlgorithmTag keyAlgorithm, byte[] fingerprint) { - list.Add(new RevocationKey(isCritical, RevocationKeyTag.ClassDefault, keyAlgorithm, fingerprint)); + AddRevocationKey(isCritical, keyAlgorithm, fingerprint); } - /// - /// Sets issuer key sub packet - /// - public void SetIssuerKeyID(bool isCritical, long keyID) + public void AddRevocationKey(bool isCritical, PublicKeyAlgorithmTag keyAlgorithm, byte[] fingerprint) + { + list.Add(new RevocationKey(isCritical, RevocationKeyTag.ClassDefault, keyAlgorithm, fingerprint)); + } + + /// + /// Sets issuer key sub packet + /// + public void SetIssuerKeyID(bool isCritical, long keyID) { list.Add(new IssuerKeyId(isCritical, keyID)); - } + } + + public void SetSignatureTarget(bool isCritical, int publicKeyAlgorithm, int hashAlgorithm, byte[] hashData) + { + list.Add(new SignatureTarget(isCritical, publicKeyAlgorithm, hashAlgorithm, hashData)); + } + + public void SetIssuerFingerprint(bool isCritical, PgpSecretKey secretKey) + { + SetIssuerFingerprint(isCritical, secretKey.PublicKey); + } + + public void SetIssuerFingerprint(bool isCritical, PgpPublicKey publicKey) + { + list.Add(new IssuerFingerprint(isCritical, publicKey.Version, publicKey.GetFingerprint())); + } + + public void AddIntendedRecipientFingerprint(bool isCritical, PgpPublicKey publicKey) + { + list.Add(new IntendedRecipientFingerprint(isCritical, publicKey.Version, publicKey.GetFingerprint())); + } + + public void AddCustomSubpacket(SignatureSubpacket subpacket) + { + list.Add(subpacket); + } + + public bool RemovePacket(SignatureSubpacket packet) + { + return list.Remove(packet); + } + + public bool HasSubpacket(SignatureSubpacketTag type) + { + return null != list.Find(subpacket => subpacket.SubpacketType == type); + } + + public SignatureSubpacket[] GetSubpackets(SignatureSubpacketTag type) + { + return list.FindAll(subpacket => subpacket.SubpacketType == type).ToArray(); + } - public PgpSignatureSubpacketVector Generate() + public PgpSignatureSubpacketVector Generate() { return new PgpSignatureSubpacketVector(list.ToArray()); } -- cgit 1.4.1