package org.bouncycastle.asn1.bc;

import java.math.BigInteger;
import java.util.Date;

import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1GeneralizedTime;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERUTF8String;
import org.bouncycastle.util.Arrays;

ObjectData ::= SEQUENCE {
    type             INTEGER,
    identifier       UTF8String,
    creationDate     GeneralizedTime,
    lastModifiedDate GeneralizedTime,
    data             OCTET STRING,
    comment          UTF8String OPTIONAL
}
/** * <pre> * ObjectData ::= SEQUENCE { * type INTEGER, * identifier UTF8String, * creationDate GeneralizedTime, * lastModifiedDate GeneralizedTime, * data OCTET STRING, * comment UTF8String OPTIONAL * } * </pre> */
public class ObjectData extends ASN1Object { private final BigInteger type; private final String identifier; private final ASN1GeneralizedTime creationDate; private final ASN1GeneralizedTime lastModifiedDate; private final ASN1OctetString data; private final String comment; private ObjectData(ASN1Sequence seq) { this.type = ASN1Integer.getInstance(seq.getObjectAt(0)).getValue(); this.identifier = DERUTF8String.getInstance(seq.getObjectAt(1)).getString(); this.creationDate = ASN1GeneralizedTime.getInstance(seq.getObjectAt(2)); this.lastModifiedDate = ASN1GeneralizedTime.getInstance(seq.getObjectAt(3)); this.data = ASN1OctetString.getInstance(seq.getObjectAt(4)); this.comment = (seq.size() == 6) ? DERUTF8String.getInstance(seq.getObjectAt(5)).getString() : null; } public ObjectData(BigInteger type, String identifier, Date creationDate, Date lastModifiedDate, byte[] data, String comment) { this.type = type; this.identifier = identifier; this.creationDate = new DERGeneralizedTime(creationDate); this.lastModifiedDate = new DERGeneralizedTime(lastModifiedDate); this.data = new DEROctetString(Arrays.clone(data)); this.comment = comment; } public static ObjectData getInstance( Object obj) { if (obj instanceof ObjectData) { return (ObjectData)obj; } else if (obj != null) { return new ObjectData(ASN1Sequence.getInstance(obj)); } return null; } public String getComment() { return comment; } public ASN1GeneralizedTime getCreationDate() { return creationDate; } public byte[] getData() { return Arrays.clone(data.getOctets()); } public String getIdentifier() { return identifier; } public ASN1GeneralizedTime getLastModifiedDate() { return lastModifiedDate; } public BigInteger getType() { return type; } public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(); v.add(new ASN1Integer(type)); v.add(new DERUTF8String(identifier)); v.add(creationDate); v.add(lastModifiedDate); v.add(data); if (comment != null) { v.add(new DERUTF8String(comment)); } return new DERSequence(v); } }