org.spongycastle.tsp.TimeStampRequestGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scprov-jdk15 Show documentation
Show all versions of scprov-jdk15 Show documentation
Spongy Castle is a package-rename (org.bouncycastle.* to org.spongycastle.*) of Bouncy Castle intended for Android.
Android ships with a stripped-down version of Bouncy Castle - this causes classloader collisions if you try to add
an alternative (updated/complete) Bouncy Castle jar.
This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5.
The newest version!
package org.spongycastle.tsp;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Hashtable;
import java.util.Vector;
import org.spongycastle.asn1.ASN1Encodable;
import org.spongycastle.asn1.ASN1ObjectIdentifier;
import org.spongycastle.asn1.DERBoolean;
import org.spongycastle.asn1.DERInteger;
import org.spongycastle.asn1.DERNull;
import org.spongycastle.asn1.DERObjectIdentifier;
import org.spongycastle.asn1.DEROctetString;
import org.spongycastle.asn1.tsp.MessageImprint;
import org.spongycastle.asn1.tsp.TimeStampReq;
import org.spongycastle.asn1.x509.AlgorithmIdentifier;
import org.spongycastle.asn1.x509.X509Extension;
import org.spongycastle.asn1.x509.X509Extensions;
/**
* Generator for RFC 3161 Time Stamp Request objects.
*/
public class TimeStampRequestGenerator
{
private DERObjectIdentifier reqPolicy;
private DERBoolean certReq;
private Hashtable extensions = new Hashtable();
private Vector extOrdering = new Vector();
public TimeStampRequestGenerator()
{
}
public void setReqPolicy(
String reqPolicy)
{
this.reqPolicy= new DERObjectIdentifier(reqPolicy);
}
public void setCertReq(
boolean certReq)
{
this.certReq = new DERBoolean(certReq);
}
/**
* add a given extension field for the standard extensions tag (tag 3)
* @throws IOException
* @deprecated use method taking ASN1ObjectIdentifier
*/
public void addExtension(
String OID,
boolean critical,
ASN1Encodable value)
throws IOException
{
this.addExtension(OID, critical, value.getEncoded());
}
/**
* add a given extension field for the standard extensions tag
* The value parameter becomes the contents of the octet string associated
* with the extension.
* @deprecated use method taking ASN1ObjectIdentifier
*/
public void addExtension(
String OID,
boolean critical,
byte[] value)
{
DERObjectIdentifier oid = new DERObjectIdentifier(OID);
extensions.put(oid, new X509Extension(critical, new DEROctetString(value)));
extOrdering.addElement(oid);
}
/**
* add a given extension field for the standard extensions tag (tag 3)
* @throws IOException
*/
public void addExtension(
ASN1ObjectIdentifier oid,
boolean critical,
ASN1Encodable value)
throws IOException
{
this.addExtension(oid, critical, value.getEncoded());
}
/**
* add a given extension field for the standard extensions tag
* The value parameter becomes the contents of the octet string associated
* with the extension.
*/
public void addExtension(
ASN1ObjectIdentifier oid,
boolean critical,
byte[] value)
{
extensions.put(oid, new X509Extension(critical, new DEROctetString(value)));
extOrdering.addElement(oid);
}
public TimeStampRequest generate(
String digestAlgorithm,
byte[] digest)
{
return this.generate(digestAlgorithm, digest, null);
}
public TimeStampRequest generate(
String digestAlgorithmOID,
byte[] digest,
BigInteger nonce)
{
if (digestAlgorithmOID == null)
{
throw new IllegalArgumentException("No digest algorithm specified");
}
DERObjectIdentifier digestAlgOID = new DERObjectIdentifier(digestAlgorithmOID);
AlgorithmIdentifier algID = new AlgorithmIdentifier(digestAlgOID, new DERNull());
MessageImprint messageImprint = new MessageImprint(algID, digest);
X509Extensions ext = null;
if (extOrdering.size() != 0)
{
ext = new X509Extensions(extOrdering, extensions);
}
if (nonce != null)
{
return new TimeStampRequest(new TimeStampReq(messageImprint,
reqPolicy, new DERInteger(nonce), certReq, ext));
}
else
{
return new TimeStampRequest(new TimeStampReq(messageImprint,
reqPolicy, null, certReq, ext));
}
}
public TimeStampRequest generate(ASN1ObjectIdentifier digestAlgorithm, byte[] digest)
{
return generate(digestAlgorithm.getId(), digest);
}
public TimeStampRequest generate(ASN1ObjectIdentifier digestAlgorithm, byte[] digest, BigInteger nonce)
{
return generate(digestAlgorithm.getId(), digest, nonce);
}
}