All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.asn1.cms.ecc.ECCCMSSharedInfo Maven / Gradle / Ivy

Go to download

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); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy