package org.bouncycastle.crypto.test; import org.bouncycastle.crypto.Mac; import org.bouncycastle.crypto.engines.GOST28147Engine; import org.bouncycastle.crypto.macs.GOST28147Mac; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithSBox; import org.bouncycastle.util.Arrays; import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.test.SimpleTestResult; import org.bouncycastle.util.test.Test; import org.bouncycastle.util.test.TestResult; /** * GOST 28147 MAC tester */ public class GOST28147MacTest implements Test { // // these GOSTMac for testing. // static byte[] gkeyBytes1 = Hex.decode("6d145dc993f4019e104280df6fcd8cd8e01e101e4c113d7ec4f469ce6dcd9e49"); static byte[] gkeyBytes2 = Hex.decode("6d145dc993f4019e104280df6fcd8cd8e01e101e4c113d7ec4f469ce6dcd9e49"); static byte[] input3 = Hex.decode("7768617420646f2079612077616e7420666f72206e6f7468696e673f"); static byte[] input4 = Hex.decode("7768617420646f2079612077616e7420666f72206e6f7468696e673f"); static byte[] output7 = Hex.decode("93468a46"); static byte[] output8 = Hex.decode("93468a46"); public GOST28147MacTest() { } public TestResult perform() { // test1 Mac mac = new GOST28147Mac(); KeyParameter key = new KeyParameter(gkeyBytes1); mac.init(key); mac.update(input3, 0, input3.length); byte[] out = new byte[4]; mac.doFinal(out, 0); if (!Arrays.areEqual(out, output7)) { return new SimpleTestResult(false, getName() + ": Failed test 1 - expected " + new String(Hex.encode(output7)) + " got " + new String(Hex.encode(out))); } // test2 key = new KeyParameter(gkeyBytes2); ParametersWithSBox gparam = new ParametersWithSBox(key, GOST28147Engine.getSBox("E-A")); mac.init(gparam); mac.update(input4, 0, input4.length); out = new byte[4]; mac.doFinal(out, 0); if (!Arrays.areEqual(out, output8)) { return new SimpleTestResult(false, getName() + ": Failed test 2 - expected " + new String(Hex.encode(output8)) + " got " + new String(Hex.encode(out))); } return new SimpleTestResult(true, getName() + ": Okay"); } public String getName() { return "GOST28147Mac"; } public static void main( String[] args) { GOST28147MacTest test = new GOST28147MacTest(); TestResult result = test.perform(); System.out.println(result); } }