1 package org.bouncycastle.asn1.crmf;
2 
3 import org.bouncycastle.asn1.ASN1Encodable;
4 import org.bouncycastle.asn1.ASN1EncodableVector;
5 import org.bouncycastle.asn1.ASN1Object;
6 import org.bouncycastle.asn1.ASN1Primitive;
7 import org.bouncycastle.asn1.ASN1Sequence;
8 import org.bouncycastle.asn1.DERSequence;
9 import org.bouncycastle.asn1.DERUTF8String;
10 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
11 import org.bouncycastle.asn1.x509.GeneralName;
12 
13 public class EncKeyWithID
14     extends ASN1Object
15 {
16     private final PrivateKeyInfo privKeyInfo;
17     private final ASN1Encodable identifier;
18 
getInstance(Object o)19     public static EncKeyWithID getInstance(Object o)
20     {
21         if (o instanceof EncKeyWithID)
22         {
23             return (EncKeyWithID)o;
24         }
25         else if (o != null)
26         {
27             return new EncKeyWithID(ASN1Sequence.getInstance(o));
28         }
29 
30         return null;
31     }
32 
EncKeyWithID(ASN1Sequence seq)33     private EncKeyWithID(ASN1Sequence seq)
34     {
35         this.privKeyInfo = PrivateKeyInfo.getInstance(seq.getObjectAt(0));
36 
37         if (seq.size() > 1)
38         {
39             if (!(seq.getObjectAt(1) instanceof DERUTF8String))
40             {
41                 this.identifier = GeneralName.getInstance(seq.getObjectAt(1));
42             }
43             else
44             {
45                 this.identifier = (ASN1Encodable)seq.getObjectAt(1);
46             }
47         }
48         else
49         {
50             this.identifier = null;
51         }
52     }
53 
EncKeyWithID(PrivateKeyInfo privKeyInfo)54     public EncKeyWithID(PrivateKeyInfo privKeyInfo)
55     {
56         this.privKeyInfo = privKeyInfo;
57         this.identifier = null;
58     }
59 
EncKeyWithID(PrivateKeyInfo privKeyInfo, DERUTF8String str)60     public EncKeyWithID(PrivateKeyInfo privKeyInfo, DERUTF8String str)
61     {
62         this.privKeyInfo = privKeyInfo;
63         this.identifier = str;
64     }
65 
EncKeyWithID(PrivateKeyInfo privKeyInfo, GeneralName generalName)66     public EncKeyWithID(PrivateKeyInfo privKeyInfo, GeneralName generalName)
67     {
68         this.privKeyInfo = privKeyInfo;
69         this.identifier = generalName;
70     }
71 
getPrivateKey()72     public PrivateKeyInfo getPrivateKey()
73     {
74         return privKeyInfo;
75     }
76 
hasIdentifier()77     public boolean hasIdentifier()
78     {
79         return identifier != null;
80     }
81 
isIdentifierUTF8String()82     public boolean isIdentifierUTF8String()
83     {
84         return identifier instanceof DERUTF8String;
85     }
86 
getIdentifier()87     public ASN1Encodable getIdentifier()
88     {
89         return identifier;
90     }
91 
92     /**
93      * <pre>
94      * EncKeyWithID ::= SEQUENCE {
95      *      privateKey           PrivateKeyInfo,
96      *      identifier CHOICE {
97      *         string               UTF8String,
98      *         generalName          GeneralName
99      *     } OPTIONAL
100      * }
101      * </pre>
102      * @return an ASN.1 primitive composition of this EncKeyWithID.
103      */
toASN1Primitive()104     public ASN1Primitive toASN1Primitive()
105     {
106         ASN1EncodableVector v = new ASN1EncodableVector(2);
107 
108         v.add(privKeyInfo);
109 
110         if (identifier != null)
111         {
112             v.add(identifier);
113         }
114 
115         return new DERSequence(v);
116     }
117 }
118