ImageAttrib
using Org.BouncyCastle.Crypto.Utilities;
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Bcpg.Attr
{
public class ImageAttrib : UserAttributeSubpacket
{
public enum Format : byte
{
Jpeg = 1
}
private readonly int m_hdrLength;
private readonly int m_version;
private readonly int m_encoding;
private readonly byte[] m_imageData;
public virtual int Version => m_version;
public virtual int Encoding => m_encoding;
public ImageAttrib(byte[] data)
: this(false, data)
{
}
public ImageAttrib(bool forceLongLength, byte[] data)
: base(UserAttributeSubpacketTag.ImageAttribute, forceLongLength, data)
{
if (data == null)
throw new ArgumentNullException("data");
if (data.Length < 4)
throw new ArgumentException("Image header truncated", "data");
m_hdrLength = Pack.LE_To_UInt16(data, 0);
m_version = data[2];
m_encoding = data[3];
if (data.Length < m_hdrLength)
throw new ArgumentException($"""{data.Length}""{m_hdrLength}");
m_imageData = Arrays.CopyOfRange(data, m_hdrLength, data.Length);
}
public ImageAttrib(Format imageType, byte[] imageData)
: this(ToByteArray(imageType, imageData))
{
}
private static byte[] ToByteArray(Format imageType, byte[] imageData)
{
int num = 16;
byte[] array = new byte[num + imageData.Length];
Pack.UInt16_To_LE((ushort)num, array, 0);
array[2] = 1;
array[3] = (byte)imageType;
imageData.CopyTo(array, num);
return array;
}
public virtual byte[] GetImageData()
{
return m_imageData;
}
}
}