package com.ripple.core.coretypes; import com.ripple.core.fields.BlobField; import com.ripple.core.fields.Field; import com.ripple.core.fields.Type; import com.ripple.core.serialized.BinaryParser; import com.ripple.core.serialized.BytesSink; import com.ripple.core.serialized.SerializedType; import com.ripple.core.serialized.TypeTranslator; import com.ripple.encodings.common.B16; import org.ripple.bouncycastle.util.encoders.Hex; public class Blob implements SerializedType { public Blob(byte[] bytes) { buffer = bytes; } byte[] buffer; @Override public Object toJSON() { return translate.toJSON(this); } @Override public byte[] toBytes() { return buffer; } @Override public String toHex() { return translate.toHex(this); } @Override public void toBytesSink(BytesSink to) { translate.toBytesSink(this, to); } @Override public Type type() { return Type.Blob; } public static Blob fromBytes(byte[] bytes) { return new Blob(bytes); } public static class Translator extends TypeTranslator<Blob> { @Override public Blob fromParser(BinaryParser parser, Integer hint) { if (hint == null) { hint = parser.size() - parser.pos(); } return new Blob(parser.read(hint)); } @Override public Object toJSON(Blob obj) { return toString(obj); } @Override public String toString(Blob obj) { return B16.toString(obj.buffer); } @Override public Blob fromString(String value) { return new Blob(Hex.decode(value)); } @Override public void toBytesSink(Blob obj, BytesSink to) { to.add(obj.buffer); } } static public Translator translate = new Translator(); public static BlobField blobField(final Field f) { return new BlobField() { @Override public Field getField() { return f; } }; } static public BlobField PublicKey = blobField(Field.PublicKey); static public BlobField MessageKey = blobField(Field.MessageKey); static public BlobField SigningPubKey = blobField(Field.SigningPubKey); static public BlobField TxnSignature = blobField(Field.TxnSignature); static public BlobField Generator = blobField(Field.Generator); static public BlobField Signature = blobField(Field.Signature); static public BlobField Domain = blobField(Field.Domain); static public BlobField FundCode = blobField(Field.FundCode); static public BlobField RemoveCode = blobField(Field.RemoveCode); static public BlobField ExpireCode = blobField(Field.ExpireCode); static public BlobField CreateCode = blobField(Field.CreateCode); static public BlobField MemoType = blobField(Field.MemoType); static public BlobField MemoData = blobField(Field.MemoData); static public BlobField MemoFormat = blobField(Field.MemoFormat); }