Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/Org/BouncyCastle/Bcpg/OpenPgp/PgpKeyRing.cs
2025-10-09 09:57:24 +09:00

64 lines
1.7 KiB
C#

using System.Collections;
using System.IO;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Bcpg.OpenPgp;
public abstract class PgpKeyRing : PgpObject
{
internal PgpKeyRing()
{
}
internal static TrustPacket ReadOptionalTrustPacket(BcpgInputStream bcpgInput)
{
if (bcpgInput.NextPacketTag() != PacketTag.Trust)
{
return null;
}
return (TrustPacket)bcpgInput.ReadPacket();
}
internal static IList ReadSignaturesAndTrust(BcpgInputStream bcpgInput)
{
try
{
IList list = Platform.CreateArrayList();
while (bcpgInput.NextPacketTag() == PacketTag.Signature)
{
SignaturePacket sigPacket = (SignaturePacket)bcpgInput.ReadPacket();
TrustPacket trustPacket = ReadOptionalTrustPacket(bcpgInput);
list.Add(new PgpSignature(sigPacket, trustPacket));
}
return list;
}
catch (PgpException ex)
{
throw new IOException("can't create signature object: " + ex.Message, ex);
}
}
internal static void ReadUserIDs(BcpgInputStream bcpgInput, out IList ids, out IList idTrusts, out IList idSigs)
{
ids = Platform.CreateArrayList();
idTrusts = Platform.CreateArrayList();
idSigs = Platform.CreateArrayList();
while (bcpgInput.NextPacketTag() == PacketTag.UserId || bcpgInput.NextPacketTag() == PacketTag.UserAttribute)
{
Packet packet = bcpgInput.ReadPacket();
if (packet is UserIdPacket)
{
UserIdPacket userIdPacket = (UserIdPacket)packet;
ids.Add(userIdPacket.GetId());
}
else
{
UserAttributePacket userAttributePacket = (UserAttributePacket)packet;
ids.Add(new PgpUserAttributeSubpacketVector(userAttributePacket.GetSubpackets()));
}
idTrusts.Add(ReadOptionalTrustPacket(bcpgInput));
idSigs.Add(ReadSignaturesAndTrust(bcpgInput));
}
}
}