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

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; } } }