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 010 011public class SigningCertificate 012 extends ASN1Object 013{ 014 ASN1Sequence certs; 015 ASN1Sequence policies; 016 017 public static SigningCertificate getInstance(Object o) 018 { 019 if (o instanceof SigningCertificate) 020 { 021 return (SigningCertificate) o; 022 } 023 else if (o != null) 024 { 025 return new SigningCertificate(ASN1Sequence.getInstance(o)); 026 } 027 028 return null; 029 } 030 031 /** 032 * constructeurs 033 */ 034 private SigningCertificate(ASN1Sequence seq) 035 { 036 if (seq.size() < 1 || seq.size() > 2) 037 { 038 throw new IllegalArgumentException("Bad sequence size: " 039 + seq.size()); 040 } 041 this.certs = ASN1Sequence.getInstance(seq.getObjectAt(0)); 042 043 if (seq.size() > 1) 044 { 045 this.policies = ASN1Sequence.getInstance(seq.getObjectAt(1)); 046 } 047 } 048 049 public SigningCertificate( 050 ESSCertID essCertID) 051 { 052 certs = new DERSequence(essCertID); 053 } 054 055 public ESSCertID[] getCerts() 056 { 057 ESSCertID[] cs = new ESSCertID[certs.size()]; 058 059 for (int i = 0; i != certs.size(); i++) 060 { 061 cs[i] = ESSCertID.getInstance(certs.getObjectAt(i)); 062 } 063 064 return cs; 065 } 066 067 public PolicyInformation[] getPolicies() 068 { 069 if (policies == null) 070 { 071 return null; 072 } 073 074 PolicyInformation[] ps = new PolicyInformation[policies.size()]; 075 076 for (int i = 0; i != policies.size(); i++) 077 { 078 ps[i] = PolicyInformation.getInstance(policies.getObjectAt(i)); 079 } 080 081 return ps; 082 } 083 084 /** 085 * The definition of SigningCertificate is 086 * <pre> 087 * SigningCertificate ::= SEQUENCE { 088 * certs SEQUENCE OF ESSCertID, 089 * policies SEQUENCE OF PolicyInformation OPTIONAL 090 * } 091 * </pre> 092 * id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) 093 * member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 094 * smime(16) id-aa(2) 12 } 095 */ 096 public ASN1Primitive toASN1Primitive() 097 { 098 ASN1EncodableVector v = new ASN1EncodableVector(); 099 100 v.add(certs); 101 102 if (policies != null) 103 { 104 v.add(policies); 105 } 106 107 return new DERSequence(v); 108 } 109}