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.ASN1Integer; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.cms.EnvelopedData; 012 013public class POPOPrivKey 014 extends ASN1Object 015 implements ASN1Choice 016{ 017 public static final int thisMessage = 0; 018 public static final int subsequentMessage = 1; 019 public static final int dhMAC = 2; 020 public static final int agreeMAC = 3; 021 public static final int encryptedKey = 4; 022 023 private int tagNo; 024 private ASN1Encodable obj; 025 026 private POPOPrivKey(ASN1TaggedObject obj) 027 { 028 this.tagNo = obj.getTagNo(); 029 030 switch (tagNo) 031 { 032 case thisMessage: 033 this.obj = DERBitString.getInstance(obj, false); 034 break; 035 case subsequentMessage: 036 this.obj = SubsequentMessage.valueOf(ASN1Integer.getInstance(obj, false).getValue().intValue()); 037 break; 038 case dhMAC: 039 this.obj = DERBitString.getInstance(obj, false); 040 break; 041 case agreeMAC: 042 this.obj = PKMACValue.getInstance(obj, false); 043 break; 044 case encryptedKey: 045 this.obj = EnvelopedData.getInstance(obj, false); 046 break; 047 default: 048 throw new IllegalArgumentException("unknown tag in POPOPrivKey"); 049 } 050 } 051 052 public static POPOPrivKey getInstance(Object obj) 053 { 054 if (obj instanceof POPOPrivKey) 055 { 056 return (POPOPrivKey)obj; 057 } 058 if (obj != null) 059 { 060 return new POPOPrivKey(ASN1TaggedObject.getInstance(obj)); 061 } 062 063 return null; 064 } 065 066 public static POPOPrivKey getInstance(ASN1TaggedObject obj, boolean explicit) 067 { 068 return getInstance(ASN1TaggedObject.getInstance(obj, explicit)); 069 } 070 071 public POPOPrivKey(SubsequentMessage msg) 072 { 073 this.tagNo = subsequentMessage; 074 this.obj = msg; 075 } 076 077 public int getType() 078 { 079 return tagNo; 080 } 081 082 public ASN1Encodable getValue() 083 { 084 return obj; 085 } 086 087 /** 088 * <pre> 089 * POPOPrivKey ::= CHOICE { 090 * thisMessage [0] BIT STRING, -- Deprecated 091 * -- possession is proven in this message (which contains the private 092 * -- key itself (encrypted for the CA)) 093 * subsequentMessage [1] SubsequentMessage, 094 * -- possession will be proven in a subsequent message 095 * dhMAC [2] BIT STRING, -- Deprecated 096 * agreeMAC [3] PKMACValue, 097 * encryptedKey [4] EnvelopedData } 098 * </pre> 099 */ 100 public ASN1Primitive toASN1Primitive() 101 { 102 return new DERTaggedObject(false, tagNo, obj); 103 } 104}