org.spongycastle.asn1.eac.CVCertificateRequest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scprov-jdk15on Show documentation
Show all versions of scprov-jdk15on Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms.
This jar contains JCE provider for the Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.7.
package org.spongycastle.asn1.eac;
import java.io.IOException;
import java.util.Enumeration;
import org.spongycastle.asn1.ASN1EncodableVector;
import org.spongycastle.asn1.ASN1Object;
import org.spongycastle.asn1.ASN1ObjectIdentifier;
import org.spongycastle.asn1.ASN1ParsingException;
import org.spongycastle.asn1.ASN1Primitive;
import org.spongycastle.asn1.ASN1Sequence;
import org.spongycastle.asn1.BERTags;
import org.spongycastle.asn1.DERApplicationSpecific;
import org.spongycastle.asn1.DEROctetString;
//import java.math.BigInteger;
public class CVCertificateRequest
extends ASN1Object
{
private CertificateBody certificateBody;
private byte[] innerSignature = null;
private byte[] outerSignature = null;
private int valid;
private static int bodyValid = 0x01;
private static int signValid = 0x02;
private CVCertificateRequest(DERApplicationSpecific request)
throws IOException
{
if (request.getApplicationTag() == EACTags.AUTHENTIFICATION_DATA)
{
ASN1Sequence seq = ASN1Sequence.getInstance(request.getObject(BERTags.SEQUENCE));
initCertBody(DERApplicationSpecific.getInstance(seq.getObjectAt(0)));
outerSignature = DERApplicationSpecific.getInstance(seq.getObjectAt(seq.size() - 1)).getContents();
}
else
{
initCertBody(request);
}
}
private void initCertBody(DERApplicationSpecific request)
throws IOException
{
if (request.getApplicationTag() == EACTags.CARDHOLDER_CERTIFICATE)
{
ASN1Sequence seq = ASN1Sequence.getInstance(request.getObject(BERTags.SEQUENCE));
for (Enumeration en = seq.getObjects(); en.hasMoreElements();)
{
DERApplicationSpecific obj = DERApplicationSpecific.getInstance(en.nextElement());
switch (obj.getApplicationTag())
{
case EACTags.CERTIFICATE_CONTENT_TEMPLATE:
certificateBody = CertificateBody.getInstance(obj);
valid |= bodyValid;
break;
case EACTags.STATIC_INTERNAL_AUTHENTIFICATION_ONE_STEP:
innerSignature = obj.getContents();
valid |= signValid;
break;
default:
throw new IOException("Invalid tag, not an CV Certificate Request element:" + obj.getApplicationTag());
}
}
}
else
{
throw new IOException("not a CARDHOLDER_CERTIFICATE in request:" + request.getApplicationTag());
}
}
public static CVCertificateRequest getInstance(Object obj)
{
if (obj instanceof CVCertificateRequest)
{
return (CVCertificateRequest)obj;
}
else if (obj != null)
{
try
{
return new CVCertificateRequest(DERApplicationSpecific.getInstance(obj));
}
catch (IOException e)
{
throw new ASN1ParsingException("unable to parse data: " + e.getMessage(), e);
}
}
return null;
}
ASN1ObjectIdentifier signOid = null;
ASN1ObjectIdentifier keyOid = null;
public static byte[] ZeroArray = new byte[]{0};
String strCertificateHolderReference;
byte[] encodedAuthorityReference;
int ProfileId;
/**
* Returns the body of the certificate template
*
* @return the body.
*/
public CertificateBody getCertificateBody()
{
return certificateBody;
}
/**
* Return the public key data object carried in the request
* @return the public key
*/
public PublicKeyDataObject getPublicKey()
{
return certificateBody.getPublicKey();
}
public byte[] getInnerSignature()
{
return innerSignature;
}
public byte[] getOuterSignature()
{
return outerSignature;
}
byte[] certificate = null;
protected String overSignerReference = null;
public boolean hasOuterSignature()
{
return outerSignature != null;
}
byte[] encoded;
PublicKeyDataObject iso7816PubKey = null;
public ASN1Primitive toASN1Primitive()
{
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(certificateBody);
try
{
v.add(new DERApplicationSpecific(false, EACTags.STATIC_INTERNAL_AUTHENTIFICATION_ONE_STEP, new DEROctetString(innerSignature)));
}
catch (IOException e)
{
throw new IllegalStateException("unable to convert signature!");
}
return new DERApplicationSpecific(EACTags.CARDHOLDER_CERTIFICATE, v);
}
}