001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Set; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 011 012public class Attribute 013 extends ASN1Object 014{ 015 private ASN1ObjectIdentifier attrType; 016 private ASN1Set attrValues; 017 018 /** 019 * return an Attribute object from the given object. 020 * 021 * @param o the object we want converted. 022 * @exception IllegalArgumentException if the object cannot be converted. 023 */ 024 public static Attribute getInstance( 025 Object o) 026 { 027 if (o instanceof Attribute) 028 { 029 return (Attribute)o; 030 } 031 032 if (o != null) 033 { 034 return new Attribute(ASN1Sequence.getInstance(o)); 035 } 036 037 return null; 038 } 039 040 private Attribute( 041 ASN1Sequence seq) 042 { 043 if (seq.size() != 2) 044 { 045 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 046 } 047 048 attrType = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0)); 049 attrValues = ASN1Set.getInstance(seq.getObjectAt(1)); 050 } 051 052 public Attribute( 053 ASN1ObjectIdentifier attrType, 054 ASN1Set attrValues) 055 { 056 this.attrType = attrType; 057 this.attrValues = attrValues; 058 } 059 060 public ASN1ObjectIdentifier getAttrType() 061 { 062 return new ASN1ObjectIdentifier(attrType.getId()); 063 } 064 065 public ASN1Encodable[] getAttributeValues() 066 { 067 return attrValues.toArray(); 068 } 069 070 public ASN1Set getAttrValues() 071 { 072 return attrValues; 073 } 074 075 /** 076 * Produce an object suitable for an ASN1OutputStream. 077 * <pre> 078 * Attribute ::= SEQUENCE { 079 * attrType OBJECT IDENTIFIER, 080 * attrValues SET OF AttributeValue 081 * } 082 * </pre> 083 */ 084 public ASN1Primitive toASN1Primitive() 085 { 086 ASN1EncodableVector v = new ASN1EncodableVector(); 087 088 v.add(attrType); 089 v.add(attrValues); 090 091 return new DERSequence(v); 092 } 093}