diff options
Diffstat (limited to 'pg/src/main/java/org/spongycastle/bcpg/attr/ImageAttribute.java')
-rw-r--r-- | pg/src/main/java/org/spongycastle/bcpg/attr/ImageAttribute.java | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/pg/src/main/java/org/spongycastle/bcpg/attr/ImageAttribute.java b/pg/src/main/java/org/spongycastle/bcpg/attr/ImageAttribute.java new file mode 100644 index 00000000..b7758587 --- /dev/null +++ b/pg/src/main/java/org/spongycastle/bcpg/attr/ImageAttribute.java @@ -0,0 +1,84 @@ +package org.spongycastle.bcpg.attr; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.spongycastle.bcpg.UserAttributeSubpacket; +import org.spongycastle.bcpg.UserAttributeSubpacketTags; + +/** + * Basic type for a image attribute packet. + */ +public class ImageAttribute + extends UserAttributeSubpacket +{ + public static final int JPEG = 1; + + private static final byte[] ZEROES = new byte[12]; + + private int hdrLength; + private int version; + private int encoding; + private byte[] imageData; + + public ImageAttribute( + byte[] data) + { + this(false, data); + } + + public ImageAttribute( + boolean forceLongLength, + byte[] data) + { + super(UserAttributeSubpacketTags.IMAGE_ATTRIBUTE, forceLongLength, data); + + hdrLength = ((data[1] & 0xff) << 8) | (data[0] & 0xff); + version = data[2] & 0xff; + encoding = data[3] & 0xff; + + imageData = new byte[data.length - hdrLength]; + System.arraycopy(data, hdrLength, imageData, 0, imageData.length); + } + + public ImageAttribute( + int imageType, + byte[] imageData) + { + this(toByteArray(imageType, imageData)); + } + + private static byte[] toByteArray(int imageType, byte[] imageData) + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + try + { + bOut.write(0x10); bOut.write(0x00); bOut.write(0x01); + bOut.write(imageType); + bOut.write(ZEROES); + bOut.write(imageData); + } + catch (IOException e) + { + throw new RuntimeException("unable to encode to byte array!"); + } + + return bOut.toByteArray(); + } + + public int version() + { + return version; + } + + public int getEncoding() + { + return encoding; + } + + public byte[] getImageData() + { + return imageData; + } +} |