001package org.apache.commons.ssl.org.bouncycastle.asn1.ess; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 008import org.apache.commons.ssl.org.bouncycastle.asn1.x509.PolicyInformation; 009 010public class SigningCertificateV2 011 extends ASN1Object 012{ 013 ASN1Sequence certs; 014 ASN1Sequence policies; 015 016 public static SigningCertificateV2 getInstance( 017 Object o) 018 { 019 if (o == null || o instanceof SigningCertificateV2) 020 { 021 return (SigningCertificateV2) o; 022 } 023 else if (o instanceof ASN1Sequence) 024 { 025 return new SigningCertificateV2((ASN1Sequence) o); 026 } 027 028 return null; 029 } 030 031 private SigningCertificateV2( 032 ASN1Sequence seq) 033 { 034 if (seq.size() < 1 || seq.size() > 2) 035 { 036 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 037 } 038 039 this.certs = ASN1Sequence.getInstance(seq.getObjectAt(0)); 040 041 if (seq.size() > 1) 042 { 043 this.policies = ASN1Sequence.getInstance(seq.getObjectAt(1)); 044 } 045 } 046 047 public SigningCertificateV2( 048 ESSCertIDv2 cert) 049 { 050 this.certs = new DERSequence(cert); 051 } 052 053 public SigningCertificateV2( 054 ESSCertIDv2[] certs) 055 { 056 ASN1EncodableVector v = new ASN1EncodableVector(); 057 for (int i=0; i < certs.length; i++) 058 { 059 v.add(certs[i]); 060 } 061 this.certs = new DERSequence(v); 062 } 063 064 public SigningCertificateV2( 065 ESSCertIDv2[] certs, 066 PolicyInformation[] policies) 067 { 068 ASN1EncodableVector v = new ASN1EncodableVector(); 069 for (int i=0; i < certs.length; i++) 070 { 071 v.add(certs[i]); 072 } 073 this.certs = new DERSequence(v); 074 075 if (policies != null) 076 { 077 v = new ASN1EncodableVector(); 078 for (int i=0; i < policies.length; i++) 079 { 080 v.add(policies[i]); 081 } 082 this.policies = new DERSequence(v); 083 } 084 } 085 086 public ESSCertIDv2[] getCerts() 087 { 088 ESSCertIDv2[] certIds = new ESSCertIDv2[certs.size()]; 089 for (int i = 0; i != certs.size(); i++) 090 { 091 certIds[i] = ESSCertIDv2.getInstance(certs.getObjectAt(i)); 092 } 093 return certIds; 094 } 095 096 public PolicyInformation[] getPolicies() 097 { 098 if (policies == null) 099 { 100 return null; 101 } 102 103 PolicyInformation[] policyInformations = new PolicyInformation[policies.size()]; 104 for (int i = 0; i != policies.size(); i++) 105 { 106 policyInformations[i] = PolicyInformation.getInstance(policies.getObjectAt(i)); 107 } 108 return policyInformations; 109 } 110 111 /** 112 * The definition of SigningCertificateV2 is 113 * <pre> 114 * SigningCertificateV2 ::= SEQUENCE { 115 * certs SEQUENCE OF ESSCertIDv2, 116 * policies SEQUENCE OF PolicyInformation OPTIONAL 117 * } 118 * </pre> 119 * id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) 120 * member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 121 * smime(16) id-aa(2) 47 } 122 */ 123 public ASN1Primitive toASN1Primitive() 124 { 125 ASN1EncodableVector v = new ASN1EncodableVector(); 126 127 v.add(certs); 128 129 if (policies != null) 130 { 131 v.add(policies); 132 } 133 134 return new DERSequence(v); 135 } 136}