1 package org.bouncycastle.asn1.test;
2 
3 import org.bouncycastle.asn1.ASN1Encodable;
4 import org.bouncycastle.asn1.ASN1Integer;
5 import org.bouncycastle.asn1.DEROctetString;
6 import org.bouncycastle.asn1.DERSequence;
7 import org.bouncycastle.asn1.nist.KMACwithSHAKE128_params;
8 import org.bouncycastle.asn1.nist.KMACwithSHAKE256_params;
9 import org.bouncycastle.util.Arrays;
10 import org.bouncycastle.util.Strings;
11 import org.bouncycastle.util.test.SimpleTest;
12 
13 public class KMACParamsTest
14     extends SimpleTest
15 {
performTest()16     public void performTest()
17         throws Exception
18     {
19         isTrue(Arrays.areEqual(new KMACwithSHAKE128_params(256).getEncoded(), new DERSequence().getEncoded()));
20         isTrue(Arrays.areEqual(new KMACwithSHAKE256_params(512).getEncoded(), new DERSequence().getEncoded()));
21 
22         isTrue(Arrays.areEqual(new KMACwithSHAKE128_params(512).getEncoded(), new DERSequence(new ASN1Integer(512)).getEncoded()));
23         isTrue(Arrays.areEqual(new KMACwithSHAKE256_params(256).getEncoded(), new DERSequence(new ASN1Integer(256)).getEncoded()));
24 
25         isTrue(Arrays.areEqual(new KMACwithSHAKE128_params(512).getEncoded(), KMACwithSHAKE128_params.getInstance(new DERSequence(new ASN1Integer(512))).getEncoded()));
26         isTrue(Arrays.areEqual(new KMACwithSHAKE256_params(256).getEncoded(), KMACwithSHAKE256_params.getInstance(new DERSequence(new ASN1Integer(256))).getEncoded()));
27 
28         byte[] customizationString = Strings.toByteArray("hello, world!");
29 
30         isTrue(Arrays.areEqual(new KMACwithSHAKE128_params(512, customizationString).getEncoded(), new DERSequence(
31             new ASN1Encodable[] { new ASN1Integer(512), new DEROctetString(customizationString) }).getEncoded()));
32         isTrue(Arrays.areEqual(new KMACwithSHAKE256_params(256, customizationString).getEncoded(), new DERSequence(
33             new ASN1Encodable[] { new ASN1Integer(256), new DEROctetString(customizationString) }).getEncoded()));
34 
35         isTrue(Arrays.areEqual(new KMACwithSHAKE128_params(512, customizationString).getEncoded(),
36             KMACwithSHAKE128_params.getInstance(
37                 new DERSequence(new ASN1Encodable[] { new ASN1Integer(512), new DEROctetString(customizationString) })).getEncoded()));
38         isTrue(Arrays.areEqual(new KMACwithSHAKE256_params(256, customizationString).getEncoded(),
39             KMACwithSHAKE256_params.getInstance(new DERSequence(
40             new ASN1Encodable[] { new ASN1Integer(256), new DEROctetString(customizationString) })).getEncoded()));
41 
42         isTrue(Arrays.areEqual(new KMACwithSHAKE128_params(256, customizationString).getEncoded(), new DERSequence(
43             new ASN1Encodable[] { new DEROctetString(customizationString) }).getEncoded()));
44         isTrue(Arrays.areEqual(new KMACwithSHAKE256_params(512, customizationString).getEncoded(), new DERSequence(
45             new ASN1Encodable[] { new DEROctetString(customizationString) }).getEncoded()));
46 
47         isTrue(Arrays.areEqual(new KMACwithSHAKE128_params(256, customizationString).getEncoded(),
48             KMACwithSHAKE128_params.getInstance(
49                 new DERSequence(new ASN1Encodable[] { new DEROctetString(customizationString) })).getEncoded()));
50         isTrue(Arrays.areEqual(new KMACwithSHAKE256_params(512, customizationString).getEncoded(),
51             KMACwithSHAKE256_params.getInstance(new DERSequence(
52             new ASN1Encodable[] { new DEROctetString(customizationString) })).getEncoded()));
53 
54         KMACwithSHAKE128_params p128 = new KMACwithSHAKE128_params(256, customizationString);
55         isEquals(256, p128.getOutputLength());
56         isTrue(Arrays.areEqual(customizationString, p128.getCustomizationString()));
57         isTrue(p128 == KMACwithSHAKE128_params.getInstance(p128));
58 
59         KMACwithSHAKE256_params p256 = new KMACwithSHAKE256_params(512, customizationString);
60         isEquals(512, p256.getOutputLength());
61         isTrue(Arrays.areEqual(customizationString, p256.getCustomizationString()));
62         isTrue(p256 == KMACwithSHAKE256_params.getInstance(p256));
63 
64         p128 = new KMACwithSHAKE128_params(512);
65         isEquals(512, p128.getOutputLength());
66         isTrue(Arrays.areEqual(new byte[0], p128.getCustomizationString()));
67 
68         p256 = new KMACwithSHAKE256_params(256);
69         isEquals(256, p256.getOutputLength());
70         isTrue(Arrays.areEqual(new byte[0], p256.getCustomizationString()));
71     }
72 
getName()73     public String getName()
74     {
75         return "KMACParams";
76     }
77 
main( String[] args)78     public static void main(
79         String[]    args)
80     {
81         runTest(new KMACParamsTest());
82     }
83 }
84