001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp; 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.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 010import org.apache.commons.ssl.org.bouncycastle.asn1.crmf.EncryptedValue; 011import org.apache.commons.ssl.org.bouncycastle.asn1.crmf.PKIPublicationInfo; 012 013public class CertifiedKeyPair 014 extends ASN1Object 015{ 016 private CertOrEncCert certOrEncCert; 017 private EncryptedValue privateKey; 018 private PKIPublicationInfo publicationInfo; 019 020 private CertifiedKeyPair(ASN1Sequence seq) 021 { 022 certOrEncCert = CertOrEncCert.getInstance(seq.getObjectAt(0)); 023 024 if (seq.size() >= 2) 025 { 026 if (seq.size() == 2) 027 { 028 ASN1TaggedObject tagged = ASN1TaggedObject.getInstance(seq.getObjectAt(1)); 029 if (tagged.getTagNo() == 0) 030 { 031 privateKey = EncryptedValue.getInstance(tagged.getObject()); 032 } 033 else 034 { 035 publicationInfo = PKIPublicationInfo.getInstance(tagged.getObject()); 036 } 037 } 038 else 039 { 040 privateKey = EncryptedValue.getInstance(ASN1TaggedObject.getInstance(seq.getObjectAt(1))); 041 publicationInfo = PKIPublicationInfo.getInstance(ASN1TaggedObject.getInstance(seq.getObjectAt(2))); 042 } 043 } 044 } 045 046 public static CertifiedKeyPair getInstance(Object o) 047 { 048 if (o instanceof CertifiedKeyPair) 049 { 050 return (CertifiedKeyPair)o; 051 } 052 053 if (o != null) 054 { 055 return new CertifiedKeyPair(ASN1Sequence.getInstance(o)); 056 } 057 058 return null; 059 } 060 061 public CertifiedKeyPair( 062 CertOrEncCert certOrEncCert) 063 { 064 this(certOrEncCert, null, null); 065 } 066 067 public CertifiedKeyPair( 068 CertOrEncCert certOrEncCert, 069 EncryptedValue privateKey, 070 PKIPublicationInfo publicationInfo 071 ) 072 { 073 if (certOrEncCert == null) 074 { 075 throw new IllegalArgumentException("'certOrEncCert' cannot be null"); 076 } 077 078 this.certOrEncCert = certOrEncCert; 079 this.privateKey = privateKey; 080 this.publicationInfo = publicationInfo; 081 } 082 083 public CertOrEncCert getCertOrEncCert() 084 { 085 return certOrEncCert; 086 } 087 088 public EncryptedValue getPrivateKey() 089 { 090 return privateKey; 091 } 092 093 public PKIPublicationInfo getPublicationInfo() 094 { 095 return publicationInfo; 096 } 097 098 /** 099 * <pre> 100 * CertifiedKeyPair ::= SEQUENCE { 101 * certOrEncCert CertOrEncCert, 102 * privateKey [0] EncryptedValue OPTIONAL, 103 * -- see [CRMF] for comment on encoding 104 * publicationInfo [1] PKIPublicationInfo OPTIONAL 105 * } 106 * </pre> 107 * @return a basic ASN.1 object representation. 108 */ 109 public ASN1Primitive toASN1Primitive() 110 { 111 ASN1EncodableVector v = new ASN1EncodableVector(); 112 113 v.add(certOrEncCert); 114 115 if (privateKey != null) 116 { 117 v.add(new DERTaggedObject(true, 0, privateKey)); 118 } 119 120 if (publicationInfo != null) 121 { 122 v.add(new DERTaggedObject(true, 1, publicationInfo)); 123 } 124 125 return new DERSequence(v); 126 } 127}