<PackageReference Include="BouncyCastle.Cryptography" Version="2.7.0-beta.98" />

PublicKeyPacket

using Org.BouncyCastle.Utilities.Date; using System; using System.IO; namespace Org.BouncyCastle.Bcpg { public class PublicKeyPacket : ContainedPacket { private int version; private long time; private int validDays; private PublicKeyAlgorithmTag algorithm; private IBcpgKey key; public virtual int Version => version; public virtual PublicKeyAlgorithmTag Algorithm => algorithm; public virtual int ValidDays => validDays; public virtual IBcpgKey Key => key; internal PublicKeyPacket(BcpgInputStream bcpgIn) { version = bcpgIn.RequireByte(); time = StreamUtilities.RequireUInt32BE(bcpgIn); if (version <= 3) validDays = StreamUtilities.RequireUInt16BE(bcpgIn); algorithm = (PublicKeyAlgorithmTag)bcpgIn.RequireByte(); PublicKeyAlgorithmTag publicKeyAlgorithmTag = algorithm; if ((uint)(publicKeyAlgorithmTag - 1) > 2) { switch (publicKeyAlgorithmTag) { case PublicKeyAlgorithmTag.Dsa: key = new DsaPublicBcpgKey(bcpgIn); break; case PublicKeyAlgorithmTag.ElGamalEncrypt: case PublicKeyAlgorithmTag.ElGamalGeneral: key = new ElGamalPublicBcpgKey(bcpgIn); break; case PublicKeyAlgorithmTag.ECDH: key = new ECDHPublicBcpgKey(bcpgIn); break; case PublicKeyAlgorithmTag.ECDsa: key = new ECDsaPublicBcpgKey(bcpgIn); break; case PublicKeyAlgorithmTag.EdDsa: key = new EdDsaPublicBcpgKey(bcpgIn); break; default: throw new IOException("unknown PGP public key algorithm encountered"); } } else key = new RsaPublicBcpgKey(bcpgIn); } public PublicKeyPacket(PublicKeyAlgorithmTag algorithm, DateTime time, IBcpgKey key) { version = 4; this.time = DateTimeUtilities.DateTimeToUnixMs(time) / 1000; this.algorithm = algorithm; this.key = key; } public virtual DateTime GetTime() { return DateTimeUtilities.UnixMsToDateTime(time * 1000); } public virtual byte[] GetEncodedContents() { MemoryStream memoryStream = new MemoryStream(); using (BcpgOutputStream bcpgOutputStream = new BcpgOutputStream(memoryStream)) { bcpgOutputStream.WriteByte((byte)version); StreamUtilities.WriteUInt32BE(bcpgOutputStream, (uint)time); if (version <= 3) StreamUtilities.WriteUInt16BE(bcpgOutputStream, (ushort)validDays); bcpgOutputStream.WriteByte((byte)algorithm); ((BcpgObject)key).Encode(bcpgOutputStream); } return memoryStream.ToArray(); } public override void Encode(BcpgOutputStream bcpgOut) { bcpgOut.WritePacket(PacketTag.PublicKey, GetEncodedContents()); } } }