CertificationRequestInfo.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
1package org.bouncycastle.asn1.pkcs; 2 3import org.bouncycastle.asn1.ASN1EncodableVector; 4import org.bouncycastle.asn1.ASN1Integer; 5import org.bouncycastle.asn1.ASN1Object; 6import org.bouncycastle.asn1.ASN1Primitive; 7import org.bouncycastle.asn1.ASN1Sequence; 8import org.bouncycastle.asn1.ASN1Set; 9import org.bouncycastle.asn1.DERSequence; 10import org.bouncycastle.asn1.DERTaggedObject; 11import org.bouncycastle.asn1.x500.X500Name; 12import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 13import org.bouncycastle.asn1.x509.X509Name; 14 15/** 16 * PKCS10 CertificationRequestInfo object. 17 * <pre> 18 * CertificationRequestInfo ::= SEQUENCE { 19 * version INTEGER { v1(0) } (v1,...), 20 * subject Name, 21 * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }}, 22 * attributes [0] Attributes{{ CRIAttributes }} 23 * } 24 * 25 * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }} 26 * 27 * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE { 28 * type ATTRIBUTE.&id({IOSet}), 29 * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) 30 * } 31 * </pre> 32 */ 33public class CertificationRequestInfo 34 extends ASN1Object 35{ 36 ASN1Integer version = new ASN1Integer(0); 37 X500Name subject; 38 SubjectPublicKeyInfo subjectPKInfo; 39 ASN1Set attributes = null; 40 41 public static CertificationRequestInfo getInstance( 42 Object obj) 43 { 44 if (obj instanceof CertificationRequestInfo) 45 { 46 return (CertificationRequestInfo)obj; 47 } 48 else if (obj != null) 49 { 50 return new CertificationRequestInfo(ASN1Sequence.getInstance(obj)); 51 } 52 53 return null; 54 } 55 56 public CertificationRequestInfo( 57 X500Name subject, 58 SubjectPublicKeyInfo pkInfo, 59 ASN1Set attributes) 60 { 61 this.subject = subject; 62 this.subjectPKInfo = pkInfo; 63 this.attributes = attributes; 64 65 if ((subject == null) || (version == null) || (subjectPKInfo == null)) 66 { 67 throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); 68 } 69 } 70 71 /** 72 * @deprecated use X500Name method. 73 */ 74 public CertificationRequestInfo( 75 X509Name subject, 76 SubjectPublicKeyInfo pkInfo, 77 ASN1Set attributes) 78 { 79 this.subject = X500Name.getInstance(subject.toASN1Primitive()); 80 this.subjectPKInfo = pkInfo; 81 this.attributes = attributes; 82 83 if ((subject == null) || (version == null) || (subjectPKInfo == null)) 84 { 85 throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); 86 } 87 } 88 89 public CertificationRequestInfo( 90 ASN1Sequence seq) 91 { 92 version = (ASN1Integer)seq.getObjectAt(0); 93 94 subject = X500Name.getInstance(seq.getObjectAt(1)); 95 subjectPKInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(2)); 96 97 // 98 // some CertificationRequestInfo objects seem to treat this field 99 // as optional. 100 // 101 if (seq.size() > 3) 102 { 103 DERTaggedObject tagobj = (DERTaggedObject)seq.getObjectAt(3); 104 attributes = ASN1Set.getInstance(tagobj, false); 105 } 106 107 if ((subject == null) || (version == null) || (subjectPKInfo == null)) 108 { 109 throw new IllegalArgumentException("Not all mandatory fields set in CertificationRequestInfo generator."); 110 } 111 } 112 113 public ASN1Integer getVersion() 114 { 115 return version; 116 } 117 118 public X500Name getSubject() 119 { 120 return subject; 121 } 122 123 public SubjectPublicKeyInfo getSubjectPublicKeyInfo() 124 { 125 return subjectPKInfo; 126 } 127 128 public ASN1Set getAttributes() 129 { 130 return attributes; 131 } 132 133 public ASN1Primitive toASN1Primitive() 134 { 135 ASN1EncodableVector v = new ASN1EncodableVector(); 136 137 v.add(version); 138 v.add(subject); 139 v.add(subjectPKInfo); 140 141 if (attributes != null) 142 { 143 v.add(new DERTaggedObject(false, 0, attributes)); 144 } 145 146 return new DERSequence(v); 147 } 148} 149