001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 013 014public class KeyRecRepContent 015 extends ASN1Object 016{ 017 private PKIStatusInfo status; 018 private CMPCertificate newSigCert; 019 private ASN1Sequence caCerts; 020 private ASN1Sequence keyPairHist; 021 022 private KeyRecRepContent(ASN1Sequence seq) 023 { 024 Enumeration en = seq.getObjects(); 025 026 status = PKIStatusInfo.getInstance(en.nextElement()); 027 028 while (en.hasMoreElements()) 029 { 030 ASN1TaggedObject tObj = ASN1TaggedObject.getInstance(en.nextElement()); 031 032 switch (tObj.getTagNo()) 033 { 034 case 0: 035 newSigCert = CMPCertificate.getInstance(tObj.getObject()); 036 break; 037 case 1: 038 caCerts = ASN1Sequence.getInstance(tObj.getObject()); 039 break; 040 case 2: 041 keyPairHist = ASN1Sequence.getInstance(tObj.getObject()); 042 break; 043 default: 044 throw new IllegalArgumentException("unknown tag number: " + tObj.getTagNo()); 045 } 046 } 047 } 048 049 public static KeyRecRepContent getInstance(Object o) 050 { 051 if (o instanceof KeyRecRepContent) 052 { 053 return (KeyRecRepContent)o; 054 } 055 056 if (o != null) 057 { 058 return new KeyRecRepContent(ASN1Sequence.getInstance(o)); 059 } 060 061 return null; 062 } 063 064 065 public PKIStatusInfo getStatus() 066 { 067 return status; 068 } 069 070 public CMPCertificate getNewSigCert() 071 { 072 return newSigCert; 073 } 074 075 public CMPCertificate[] getCaCerts() 076 { 077 if (caCerts == null) 078 { 079 return null; 080 } 081 082 CMPCertificate[] results = new CMPCertificate[caCerts.size()]; 083 084 for (int i = 0; i != results.length; i++) 085 { 086 results[i] = CMPCertificate.getInstance(caCerts.getObjectAt(i)); 087 } 088 089 return results; 090 } 091 092 public CertifiedKeyPair[] getKeyPairHist() 093 { 094 if (keyPairHist == null) 095 { 096 return null; 097 } 098 099 CertifiedKeyPair[] results = new CertifiedKeyPair[keyPairHist.size()]; 100 101 for (int i = 0; i != results.length; i++) 102 { 103 results[i] = CertifiedKeyPair.getInstance(keyPairHist.getObjectAt(i)); 104 } 105 106 return results; 107 } 108 109 /** 110 * <pre> 111 * KeyRecRepContent ::= SEQUENCE { 112 * status PKIStatusInfo, 113 * newSigCert [0] CMPCertificate OPTIONAL, 114 * caCerts [1] SEQUENCE SIZE (1..MAX) OF 115 * CMPCertificate OPTIONAL, 116 * keyPairHist [2] SEQUENCE SIZE (1..MAX) OF 117 * CertifiedKeyPair OPTIONAL 118 * } 119 * </pre> 120 * @return a basic ASN.1 object representation. 121 */ 122 public ASN1Primitive toASN1Primitive() 123 { 124 ASN1EncodableVector v = new ASN1EncodableVector(); 125 126 v.add(status); 127 128 addOptional(v, 0, newSigCert); 129 addOptional(v, 1, caCerts); 130 addOptional(v, 2, keyPairHist); 131 132 return new DERSequence(v); 133 } 134 135 private void addOptional(ASN1EncodableVector v, int tagNo, ASN1Encodable obj) 136 { 137 if (obj != null) 138 { 139 v.add(new DERTaggedObject(true, tagNo, obj)); 140 } 141 } 142}