blob: a914ac7cf232f5d917f882a5a78a09c3e08beed1 [file] [log] [blame]
package org.bouncycastle.dvcs;
import java.io.IOException;
import java.math.BigInteger;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.cms.ContentInfo;
import org.bouncycastle.asn1.dvcs.DVCSObjectIdentifiers;
import org.bouncycastle.asn1.dvcs.DVCSRequestInformationBuilder;
import org.bouncycastle.asn1.dvcs.Data;
import org.bouncycastle.asn1.x509.ExtensionsGenerator;
import org.bouncycastle.asn1.x509.GeneralName;
import org.bouncycastle.asn1.x509.GeneralNames;
import org.bouncycastle.cms.CMSSignedDataGenerator;
/**
* Common base class for client DVCRequest builders.
* This class aims at DVCSRequestInformation and TransactionIdentifier construction,
* and its subclasses - for Data field construction (as it is specific for the requested service).
*/
public abstract class DVCSRequestBuilder
{
private final ExtensionsGenerator extGenerator = new ExtensionsGenerator();
private final CMSSignedDataGenerator signedDataGen = new CMSSignedDataGenerator();
protected final DVCSRequestInformationBuilder requestInformationBuilder;
protected DVCSRequestBuilder(DVCSRequestInformationBuilder requestInformationBuilder)
{
this.requestInformationBuilder = requestInformationBuilder;
}
/**
* Set a nonce for this request,
*
* @param nonce
*/
public void setNonce(BigInteger nonce)
{
requestInformationBuilder.setNonce(nonce);
}
/**
* Set requester name.
*
* @param requester
*/
public void setRequester(GeneralName requester)
{
requestInformationBuilder.setRequester(requester);
}
/**
* Set DVCS name to generated requests.
*
* @param dvcs
*/
public void setDVCS(GeneralName dvcs)
{
requestInformationBuilder.setDVCS(dvcs);
}
/**
* Set DVCS name to generated requests.
*
* @param dvcs
*/
public void setDVCS(GeneralNames dvcs)
{
requestInformationBuilder.setDVCS(dvcs);
}
/**
* Set data location to generated requests.
*
* @param dataLocation
*/
public void setDataLocations(GeneralName dataLocation)
{
requestInformationBuilder.setDataLocations(dataLocation);
}
/**
* Set data location to generated requests.
*
* @param dataLocations
*/
public void setDataLocations(GeneralNames dataLocations)
{
requestInformationBuilder.setDataLocations(dataLocations);
}
/**
* Add a given extension field.
*
* @param oid the OID defining the extension type.
* @param isCritical true if the extension is critical, false otherwise.
* @param value the ASN.1 structure that forms the extension's value.
* @throws DVCSException if there is an issue encoding the extension for adding.
*/
public void addExtension(
ASN1ObjectIdentifier oid,
boolean isCritical,
ASN1Encodable value)
throws DVCSException
{
try
{
extGenerator.addExtension(oid, isCritical, value);
}
catch (IOException e)
{
throw new DVCSException("cannot encode extension: " + e.getMessage(), e);
}
}
protected DVCSRequest createDVCRequest(Data data)
throws DVCSException
{
if (!extGenerator.isEmpty())
{
requestInformationBuilder.setExtensions(extGenerator.generate());
}
org.bouncycastle.asn1.dvcs.DVCSRequest request = new org.bouncycastle.asn1.dvcs.DVCSRequest(requestInformationBuilder.build(), data);
return new DVCSRequest(new ContentInfo(DVCSObjectIdentifiers.id_ct_DVCSRequestData, request));
}
}