SignatureSubpacket
Basic type for a PGP Signature subpacket.
using Org.BouncyCastle.Utilities;
using System.IO;
namespace Org.BouncyCastle.Bcpg
{
public class SignatureSubpacket
{
private readonly SignatureSubpacketTag m_type;
private readonly bool m_critical;
private readonly bool m_longLength;
private readonly byte[] m_data;
internal byte[] Data => m_data;
public SignatureSubpacketTag SubpacketType => m_type;
protected internal SignatureSubpacket(SignatureSubpacketTag type, bool critical, bool isLongLength, byte[] data)
{
m_type = type;
m_critical = critical;
m_longLength = isLongLength;
m_data = data;
}
public bool IsCritical()
{
return m_critical;
}
public bool IsLongLength()
{
return m_longLength;
}
public byte[] GetData()
{
return Arrays.Clone(m_data);
}
public void Encode(Stream os)
{
StreamUtilities.WriteNewPacketLength(os, 1 + m_data.Length, m_longLength);
byte b = (byte)m_type;
if (m_critical)
b = (byte)(b | 128);
os.WriteByte(b);
os.Write(m_data, 0, m_data.Length);
}
public override int GetHashCode()
{
return (m_critical ? 1 : 0) + 7 * (int)m_type + 49 * Arrays.GetHashCode(m_data);
}
public override bool Equals(object obj)
{
SignatureSubpacket signatureSubpacket = obj as SignatureSubpacket;
if (signatureSubpacket != null && m_type == signatureSubpacket.m_type && m_critical == signatureSubpacket.m_critical)
return Arrays.AreEqual(m_data, signatureSubpacket.m_data);
return false;
}
}
}