1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.asn1.x509; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.ASN1Encodable; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.ASN1EncodableVector; 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERInteger; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERObjectIdentifier; 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERSequence; 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERGeneralizedTime; 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERBitString; 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERSet; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Generator for Version 2 AttributeCertificateInfo 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <pre> 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AttributeCertificateInfo ::= SEQUENCE { 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * version AttCertVersion -- version is v2, 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * holder Holder, 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * issuer AttCertIssuer, 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * signature AlgorithmIdentifier, 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * serialNumber CertificateSerialNumber, 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * attrCertValidityPeriod AttCertValidityPeriod, 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * attributes SEQUENCE OF Attribute, 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * issuerUniqueID UniqueIdentifier OPTIONAL, 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * extensions Extensions OPTIONAL 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * } 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </pre> 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class V2AttributeCertificateInfoGenerator 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private DERInteger version; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Holder holder; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private AttCertIssuer issuer; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private AlgorithmIdentifier signature; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private DERInteger serialNumber; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private AttCertValidityPeriod attrCertValidityPeriod; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ASN1EncodableVector attributes; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private DERBitString issuerUniqueID; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private X509Extensions extensions; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private DERGeneralizedTime startDate, endDate; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V2AttributeCertificateInfoGenerator() 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.version = new DERInteger(1); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attributes = new ASN1EncodableVector(); 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setHolder(Holder holder) 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.holder = holder; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void addAttribute(String oid, ASN1Encodable value) 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attributes.add(new Attribute(new DERObjectIdentifier(oid), new DERSet(value))); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param attribute 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void addAttribute(Attribute attribute) 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attributes.add(attribute); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setSerialNumber( 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DERInteger serialNumber) 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.serialNumber = serialNumber; 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setSignature( 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmIdentifier signature) 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.signature = signature; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setIssuer( 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AttCertIssuer issuer) 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.issuer = issuer; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setStartDate( 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DERGeneralizedTime startDate) 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.startDate = startDate; 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setEndDate( 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DERGeneralizedTime endDate) 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.endDate = endDate; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setIssuerUniqueID( 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DERBitString issuerUniqueID) 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.issuerUniqueID = issuerUniqueID; 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setExtensions( 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project X509Extensions extensions) 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.extensions = extensions; 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public AttributeCertificateInfo generateAttributeCertificateInfo() 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((serialNumber == null) || (signature == null) 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || (issuer == null) || (startDate == null) || (endDate == null) 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || (holder == null) || (attributes == null)) 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalStateException("not all mandatory fields set in V2 AttributeCertificateInfo generator"); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ASN1EncodableVector v = new ASN1EncodableVector(); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(version); 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(holder); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(issuer); 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(signature); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(serialNumber); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // before and after dates => AttCertValidityPeriod 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AttCertValidityPeriod validity = new AttCertValidityPeriod(startDate, endDate); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(validity); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Attributes 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(new DERSequence(attributes)); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (issuerUniqueID != null) 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(issuerUniqueID); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (extensions != null) 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(extensions); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new AttributeCertificateInfo(new DERSequence(v)); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 147