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