org.bouncycastle.asn1.cms.Attribute Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcutil-jdk18on Show documentation
Show all versions of bcutil-jdk18on Show documentation
The Bouncy Castle Java APIs for ASN.1 extension and utility APIs used to support bcpkix and bctls. This jar contains APIs for JDK 1.8 and up.
package org.bouncycastle.asn1.cms;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Set;
import org.bouncycastle.asn1.DERSequence;
/**
* RFC 5652:
* Attribute is a pair of OID (as type identifier) + set of values.
*
*
* Attribute ::= SEQUENCE {
* attrType OBJECT IDENTIFIER,
* attrValues SET OF AttributeValue
* }
*
* AttributeValue ::= ANY
*
*
* General rule on values is that same AttributeValue must not be included
* multiple times into the set. That is, if the value is a SET OF INTEGERs,
* then having same value repeated is wrong: (1, 1), but different values is OK: (1, 2).
* Normally the AttributeValue syntaxes are more complicated than that.
*
* General rule of Attribute usage is that the {@link Attributes} containers
* must not have multiple Attribute:s with same attrType (OID) there.
*/
public class Attribute
extends ASN1Object
{
private ASN1ObjectIdentifier attrType;
private ASN1Set attrValues;
/**
* Return an Attribute object from the given object.
*
* Accepted inputs:
*
* - null → null
*
- {@link Attribute} object
*
- {@link org.bouncycastle.asn1.ASN1Sequence#getInstance(java.lang.Object) ASN1Sequence} input formats with Attribute structure inside
*
*
* @param o the object we want converted.
* @exception IllegalArgumentException if the object cannot be converted.
*/
public static Attribute getInstance(
Object o)
{
if (o instanceof Attribute)
{
return (Attribute)o;
}
if (o != null)
{
return new Attribute(ASN1Sequence.getInstance(o));
}
return null;
}
private Attribute(
ASN1Sequence seq)
{
attrType = (ASN1ObjectIdentifier)seq.getObjectAt(0);
attrValues = (ASN1Set)seq.getObjectAt(1);
}
public Attribute(
ASN1ObjectIdentifier attrType,
ASN1Set attrValues)
{
this.attrType = attrType;
this.attrValues = attrValues;
}
public ASN1ObjectIdentifier getAttrType()
{
return attrType;
}
public ASN1Set getAttrValues()
{
return attrValues;
}
public ASN1Encodable[] getAttributeValues()
{
return attrValues.toArray();
}
/**
* Produce an object suitable for an ASN1OutputStream.
*/
public ASN1Primitive toASN1Primitive()
{
ASN1EncodableVector v = new ASN1EncodableVector(2);
v.add(attrType);
v.add(attrValues);
return new DERSequence(v);
}
}