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.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERUTF8String;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;

ObjectStoreData ::= SEQUENCE {
    version INTEGER.
    dataSalt OCTET STRING,
    integrityAlgorithm AlgorithmIdentifier,
    creationDate GeneralizedTime,
    lastModifiedDate GeneralizedTime,
    objectDataSequence ObjectDataSequence,
    comment UTF8String OPTIONAL
}
/** * <pre> * ObjectStoreData ::= SEQUENCE { * version INTEGER. * dataSalt OCTET STRING, * integrityAlgorithm AlgorithmIdentifier, * creationDate GeneralizedTime, * lastModifiedDate GeneralizedTime, * objectDataSequence ObjectDataSequence, * comment UTF8String OPTIONAL * } * </pre> */
public class ObjectStoreData extends ASN1Object { private final BigInteger version; private final AlgorithmIdentifier integrityAlgorithm; private final ASN1GeneralizedTime creationDate; private final ASN1GeneralizedTime lastModifiedDate; private final ObjectDataSequence objectDataSequence; private final String comment; public ObjectStoreData(AlgorithmIdentifier integrityAlgorithm, Date creationDate, Date lastModifiedDate, ObjectDataSequence objectDataSequence, String comment) { this.version = BigInteger.valueOf(1); this.integrityAlgorithm = integrityAlgorithm; this.creationDate = new DERGeneralizedTime(creationDate); this.lastModifiedDate = new DERGeneralizedTime(lastModifiedDate); this.objectDataSequence = objectDataSequence; this.comment = comment; } private ObjectStoreData(ASN1Sequence seq) { this.version = ASN1Integer.getInstance(seq.getObjectAt(0)).getValue(); this.integrityAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1)); this.creationDate = ASN1GeneralizedTime.getInstance(seq.getObjectAt(2)); this.lastModifiedDate = ASN1GeneralizedTime.getInstance(seq.getObjectAt(3)); this.objectDataSequence = ObjectDataSequence.getInstance(seq.getObjectAt(4)); this.comment = (seq.size() == 6) ? DERUTF8String.getInstance(seq.getObjectAt(5)).getString() : null; } public static ObjectStoreData getInstance(Object o) { if (o instanceof ObjectStoreData) { return (ObjectStoreData)o; } else if (o != null) { return new ObjectStoreData(ASN1Sequence.getInstance(o)); } return null; } public String getComment() { return comment; } public ASN1GeneralizedTime getCreationDate() { return creationDate; } public AlgorithmIdentifier getIntegrityAlgorithm() { return integrityAlgorithm; } public ASN1GeneralizedTime getLastModifiedDate() { return lastModifiedDate; } public ObjectDataSequence getObjectDataSequence() { return objectDataSequence; } public BigInteger getVersion() { return version; } public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(); v.add(new ASN1Integer(version)); v.add(integrityAlgorithm); v.add(creationDate); v.add(lastModifiedDate); v.add(objectDataSequence); if (comment != null) { v.add(new DERUTF8String(comment)); } return new DERSequence(v); } }