1 package org.bouncycastle.asn1.cmc;
2 
3 import org.bouncycastle.asn1.ASN1EncodableVector;
4 import org.bouncycastle.asn1.ASN1Object;
5 import org.bouncycastle.asn1.ASN1OctetString;
6 import org.bouncycastle.asn1.ASN1Primitive;
7 import org.bouncycastle.asn1.ASN1Sequence;
8 import org.bouncycastle.asn1.DEROctetString;
9 import org.bouncycastle.asn1.DERSequence;
10 import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
11 import org.bouncycastle.util.Arrays;
12 
13 /**
14  * <pre>
15  *      id-cmc-popLinkWitnessV2 OBJECT IDENTIFIER ::= { id-cmc 33 }
16  *      PopLinkWitnessV2 ::= SEQUENCE {
17  *           keyGenAlgorithm   AlgorithmIdentifier,
18  *           macAlgorithm      AlgorithmIdentifier,
19  *           witness           OCTET STRING
20  *      }
21  * </pre>
22  */
23 public class PopLinkWitnessV2
24     extends ASN1Object
25 {
26     private final AlgorithmIdentifier keyGenAlgorithm;
27     private final AlgorithmIdentifier macAlgorithm;
28     private final byte[] witness;
29 
PopLinkWitnessV2(AlgorithmIdentifier keyGenAlgorithm, AlgorithmIdentifier macAlgorithm, byte[] witness)30     public PopLinkWitnessV2(AlgorithmIdentifier keyGenAlgorithm, AlgorithmIdentifier macAlgorithm, byte[] witness)
31     {
32         this.keyGenAlgorithm = keyGenAlgorithm;
33         this.macAlgorithm = macAlgorithm;
34         this.witness = Arrays.clone(witness);
35     }
36 
PopLinkWitnessV2(ASN1Sequence seq)37     private PopLinkWitnessV2(ASN1Sequence seq)
38     {
39         if (seq.size() != 3)
40         {
41             throw new IllegalArgumentException("incorrect sequence size");
42         }
43         this.keyGenAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(0));
44         this.macAlgorithm = AlgorithmIdentifier.getInstance(seq.getObjectAt(1));
45         this.witness = Arrays.clone(ASN1OctetString.getInstance(seq.getObjectAt(2)).getOctets());
46     }
47 
getInstance(Object o)48     public static PopLinkWitnessV2 getInstance(Object o)
49     {
50         if (o instanceof PopLinkWitnessV2)
51         {
52             return (PopLinkWitnessV2)o;
53         }
54 
55         if (o != null)
56         {
57             return new PopLinkWitnessV2(ASN1Sequence.getInstance(o));
58         }
59 
60         return null;
61     }
62 
getKeyGenAlgorithm()63     public AlgorithmIdentifier getKeyGenAlgorithm()
64     {
65         return keyGenAlgorithm;
66     }
67 
getMacAlgorithm()68     public AlgorithmIdentifier getMacAlgorithm()
69     {
70         return macAlgorithm;
71     }
72 
getWitness()73     public byte[] getWitness()
74     {
75         return Arrays.clone(witness);
76     }
77 
toASN1Primitive()78     public ASN1Primitive toASN1Primitive()
79     {
80         ASN1EncodableVector v = new ASN1EncodableVector(3);
81 
82         v.add(keyGenAlgorithm);
83         v.add(macAlgorithm);
84         v.add(new DEROctetString(getWitness()));
85 
86         return new DERSequence(v);
87     }
88 }
89