org.bouncycastle.asn1.cms.ecc.ECCCMSSharedInfo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcutil-fips Show documentation
Show all versions of bcutil-fips Show documentation
The Bouncy Castle Java APIs for ASN.1 extension and utility APIs used to support bcpkix and bctls with the BC FIPS provider. The APIs may also be used with other providers although if being used in a FIPS context it is the responsibility of the user to ensure that any other providers used are FIPS certified and used appropriately.
The newest version!
package org.bouncycastle.asn1.cms.ecc;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.util.Arrays;
/**
*
* ECC-CMS-SharedInfo ::= SEQUENCE {
* keyInfo AlgorithmIdentifier,
* entityUInfo [0] EXPLICIT OCTET STRING OPTIONAL,
* suppPubInfo [2] EXPLICIT OCTET STRING }
*
*/
public class ECCCMSSharedInfo
extends ASN1Object
{
private final AlgorithmIdentifier keyInfo;
private final byte[] entityUInfo;
private final byte[] suppPubInfo;
public ECCCMSSharedInfo(
AlgorithmIdentifier keyInfo,
byte[] entityUInfo,
byte[] suppPubInfo)
{
this.keyInfo = keyInfo;
this.entityUInfo = Arrays.clone(entityUInfo);
this.suppPubInfo = Arrays.clone(suppPubInfo);
}
public ECCCMSSharedInfo(
AlgorithmIdentifier keyInfo,
byte[] suppPubInfo)
{
this.keyInfo = keyInfo;
this.entityUInfo = null;
this.suppPubInfo = Arrays.clone(suppPubInfo);
}
private ECCCMSSharedInfo(
ASN1Sequence seq)
{
this.keyInfo = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
if (seq.size() == 2)
{
this.entityUInfo = null;
this.suppPubInfo = ASN1OctetString.getInstance((ASN1TaggedObject)seq.getObjectAt(1), true).getOctets();
}
else
{
this.entityUInfo = ASN1OctetString.getInstance((ASN1TaggedObject)seq.getObjectAt(1), true).getOctets();
this.suppPubInfo = ASN1OctetString.getInstance((ASN1TaggedObject)seq.getObjectAt(2), true).getOctets();
}
}
/**
* Return an ECC-CMS-SharedInfo object from a tagged object.
*
* @param obj the tagged object holding the object we want.
* @param explicit true if the object is meant to be explicitly
* tagged false otherwise.
* @throws IllegalArgumentException if the object held by the
* tagged object cannot be converted.
*/
public static ECCCMSSharedInfo getInstance(
ASN1TaggedObject obj,
boolean explicit)
{
return getInstance(ASN1Sequence.getInstance(obj, explicit));
}
public static ECCCMSSharedInfo getInstance(
Object obj)
{
if (obj instanceof ECCCMSSharedInfo)
{
return (ECCCMSSharedInfo)obj;
}
else if (obj != null)
{
return new ECCCMSSharedInfo(ASN1Sequence.getInstance(obj));
}
return null;
}
/**
* Produce an object suitable for an ASN1OutputStream.
*/
public ASN1Primitive toASN1Primitive()
{
ASN1EncodableVector v = new ASN1EncodableVector(3);
v.add(keyInfo);
if (entityUInfo != null)
{
v.add(new DERTaggedObject(true, 0, new DEROctetString(entityUInfo)));
}
v.add(new DERTaggedObject(true, 2, new DEROctetString(suppPubInfo)));
return new DERSequence(v);
}
}