From a0a5b63c5403f15412d20063c8d4181c8c52cc2f Mon Sep 17 00:00:00 2001 From: Christian Hagau Date: Tue, 29 Sep 2020 00:00:00 +0000 Subject: [PATCH] Add a test for S2K KDF for security tokens --- .../securitytoken/KdfCalculatorTest.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 OpenKeychain/src/test/java/org/sufficientlysecure/keychain/securitytoken/KdfCalculatorTest.java diff --git a/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/securitytoken/KdfCalculatorTest.java b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/securitytoken/KdfCalculatorTest.java new file mode 100644 index 000000000..bd2658ead --- /dev/null +++ b/OpenKeychain/src/test/java/org/sufficientlysecure/keychain/securitytoken/KdfCalculatorTest.java @@ -0,0 +1,38 @@ +package org.sufficientlysecure.keychain.securitytoken; + +import org.bouncycastle.crypto.digests.SHA256Digest; +import org.bouncycastle.util.encoders.Hex; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.shadows.ShadowLog; +import org.sufficientlysecure.keychain.KeychainTestRunner; + +@RunWith(KeychainTestRunner.class) +public class KdfCalculatorTest { + + @Before + public void setUp() throws Exception { + ShadowLog.stream = System.out; + } + + @Test + public void testCalculateKdf() { + KdfCalculator.KdfCalculatorArguments arguments = new KdfCalculator.KdfCalculatorArguments(); + arguments.digestAlgorithm = KdfParameters.HashType.SHA256; + arguments.salt = Hex.decode("3031323334353637"); + arguments.iterations = 100000; + + byte[] pin = Hex.decode("313233343536"); + byte[] expected = Hex.decode( + "773784A602B6C81E3F092F4D7D00E17CC822D88F7360FCF2D2EF2D9D901F44B6"); + + byte[] result = KdfCalculator.calculateKdf(arguments, pin); + + Assert.assertArrayEquals( + "Result of iterated & salted S2K KDF not equal to test vector" + , result + , expected); + } +}