001package org.apache.commons.ssl.org.bouncycastle.asn1.crmf; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 009import org.apache.commons.ssl.org.bouncycastle.asn1.cms.EnvelopedData; 010 011public class EncryptedKey 012 extends ASN1Object 013 implements ASN1Choice 014{ 015 private EnvelopedData envelopedData; 016 private EncryptedValue encryptedValue; 017 018 public static EncryptedKey getInstance(Object o) 019 { 020 if (o instanceof EncryptedKey) 021 { 022 return (EncryptedKey)o; 023 } 024 else if (o instanceof ASN1TaggedObject) 025 { 026 return new EncryptedKey(EnvelopedData.getInstance((ASN1TaggedObject)o, false)); 027 } 028 else if (o instanceof EncryptedValue) 029 { 030 return new EncryptedKey((EncryptedValue)o); 031 } 032 else 033 { 034 return new EncryptedKey(EncryptedValue.getInstance(o)); 035 } 036 } 037 038 public EncryptedKey(EnvelopedData envelopedData) 039 { 040 this.envelopedData = envelopedData; 041 } 042 043 public EncryptedKey(EncryptedValue encryptedValue) 044 { 045 this.encryptedValue = encryptedValue; 046 } 047 048 public boolean isEncryptedValue() 049 { 050 return encryptedValue != null; 051 } 052 053 public ASN1Encodable getValue() 054 { 055 if (encryptedValue != null) 056 { 057 return encryptedValue; 058 } 059 060 return envelopedData; 061 } 062 063 /** 064 * <pre> 065 * EncryptedKey ::= CHOICE { 066 * encryptedValue EncryptedValue, -- deprecated 067 * envelopedData [0] EnvelopedData } 068 * -- The encrypted private key MUST be placed in the envelopedData 069 * -- encryptedContentInfo encryptedContent OCTET STRING. 070 * </pre> 071 */ 072 public ASN1Primitive toASN1Primitive() 073 { 074 if (encryptedValue != null) 075 { 076 return encryptedValue.toASN1Primitive(); 077 } 078 079 return new DERTaggedObject(false, 0, envelopedData); 080 } 081}