You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

81 lines
2.0 KiB

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 pIn)
{
PacketTag tag = pIn.SkipMarkerPackets();
return tag == PacketTag.Trust ? (TrustPacket)pIn.ReadPacket() : null;
}
internal static IList ReadSignaturesAndTrust(BcpgInputStream pIn)
{
try
{
IList sigList = Platform.CreateArrayList();
while (pIn.SkipMarkerPackets() == PacketTag.Signature)
{
SignaturePacket signaturePacket = (SignaturePacket)pIn.ReadPacket();
TrustPacket trustPacket = ReadOptionalTrustPacket(pIn);
sigList.Add(new PgpSignature(signaturePacket, trustPacket));
}
return sigList;
}
catch (PgpException e)
{
throw new IOException("can't create signature object: " + e.Message, e);
}
}
internal static void ReadUserIDs(BcpgInputStream pIn, out IList ids, out IList idTrusts, out IList idSigs)
{
ids = Platform.CreateArrayList();
idTrusts = Platform.CreateArrayList();
idSigs = Platform.CreateArrayList();
while (IsUserTag(pIn.SkipMarkerPackets()))
{
Packet obj = pIn.ReadPacket();
if (obj is UserIdPacket)
{
UserIdPacket id = (UserIdPacket)obj;
ids.Add(id.GetId());
}
else
{
UserAttributePacket user = (UserAttributePacket)obj;
ids.Add(new PgpUserAttributeSubpacketVector(user.GetSubpackets()));
}
idTrusts.Add(ReadOptionalTrustPacket(pIn));
idSigs.Add(ReadSignaturesAndTrust(pIn));
}
}
private static bool IsUserTag(PacketTag tag)
{
switch (tag)
{
case PacketTag.UserAttribute:
case PacketTag.UserId:
return true;
default:
return false;
}
}
}
}