diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/crypto/test/PKCS12Test.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/crypto/test/PKCS12Test.java | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/test/PKCS12Test.java b/bcprov/src/main/java/org/bouncycastle/crypto/test/PKCS12Test.java new file mode 100644 index 0000000..c5c7aa3 --- /dev/null +++ b/bcprov/src/main/java/org/bouncycastle/crypto/test/PKCS12Test.java @@ -0,0 +1,206 @@ +package org.bouncycastle.crypto.test; + +import org.bouncycastle.crypto.CipherParameters; +import org.bouncycastle.crypto.PBEParametersGenerator; +import org.bouncycastle.crypto.digests.SHA1Digest; +import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.util.encoders.Hex; +import org.bouncycastle.util.test.SimpleTestResult; +import org.bouncycastle.util.test.Test; +import org.bouncycastle.util.test.TestResult; + +/** + * test for PKCS12 key generation - vectors from + * <a href=http://www.drh-consultancy.demon.co.uk/test.txt> + * http://www.drh-consultancy.demon.co.uk/test.txt</a> + */ +public class PKCS12Test + implements Test +{ + char[] password1 = { 's', 'm', 'e', 'g' }; + char[] password2 = { 'q', 'u', 'e', 'e', 'g' }; + + private boolean isEqual( + byte[] a, + byte[] b) + { + if (a.length != b.length) + { + return false; + } + + for (int i = 0; i != a.length; i++) + { + if (a[i] != b[i]) + { + return false; + } + } + + return true; + } + + private TestResult run1( + int id, + char[] password, + byte[] salt, + int iCount, + byte[] result) + { + PBEParametersGenerator generator = new PKCS12ParametersGenerator( + new SHA1Digest()); + + generator.init( + PBEParametersGenerator.PKCS12PasswordToBytes(password), + salt, + iCount); + + CipherParameters key = generator.generateDerivedParameters(24 * 8); + + if (isEqual(result, ((KeyParameter)key).getKey())) + { + return new SimpleTestResult(true, "PKCS12Test: Okay"); + } + else + { + return new SimpleTestResult(false, "PKCS12Test: id " + + id + " Failed"); + } + } + + private TestResult run2( + int id, + char[] password, + byte[] salt, + int iCount, + byte[] result) + { + PBEParametersGenerator generator = new PKCS12ParametersGenerator( + new SHA1Digest()); + + generator.init( + PBEParametersGenerator.PKCS12PasswordToBytes(password), + salt, + iCount); + + ParametersWithIV params = (ParametersWithIV)generator.generateDerivedParameters(64, 64); + + if (isEqual(result, params.getIV())) + { + return new SimpleTestResult(true, "PKCS12Test: Okay"); + } + else + { + return new SimpleTestResult(false, "PKCS12Test: id " + + id + " Failed"); + } + } + + private TestResult run3( + int id, + char[] password, + byte[] salt, + int iCount, + byte[] result) + { + PBEParametersGenerator generator = new PKCS12ParametersGenerator( + new SHA1Digest()); + + generator.init( + PBEParametersGenerator.PKCS12PasswordToBytes(password), + salt, + iCount); + + CipherParameters key = generator.generateDerivedMacParameters(160); + + if (isEqual(result, ((KeyParameter)key).getKey())) + { + return new SimpleTestResult(true, "PKCS12Test: Okay"); + } + else + { + return new SimpleTestResult(false, "PKCS12Test: id " + + id + " Failed"); + } + } + + public String getName() + { + return "PKCS12Test"; + } + + public TestResult perform() + { + TestResult result; + + result = run1(1, password1, Hex.decode("0A58CF64530D823F"), 1, + Hex.decode("8AAAE6297B6CB04642AB5B077851284EB7128F1A2A7FBCA3")); + + if (result.isSuccessful()) + { + result = run2(2, password1, Hex.decode("0A58CF64530D823F"), 1, + Hex.decode("79993DFE048D3B76")); + } + + if (result.isSuccessful()) + { + result = run1(3, password1, Hex.decode("642B99AB44FB4B1F"), 1, + Hex.decode("F3A95FEC48D7711E985CFE67908C5AB79FA3D7C5CAA5D966")); + } + + if (result.isSuccessful()) + { + result = run2(4, password1, Hex.decode("642B99AB44FB4B1F"), 1, + Hex.decode("C0A38D64A79BEA1D")); + } + + if (result.isSuccessful()) + { + result = run3(5, password1, Hex.decode("3D83C0E4546AC140"), 1, + Hex.decode("8D967D88F6CAA9D714800AB3D48051D63F73A312")); + } + + if (result.isSuccessful()) + { + result = run1(6, password2, Hex.decode("05DEC959ACFF72F7"), 1000, + Hex.decode("ED2034E36328830FF09DF1E1A07DD357185DAC0D4F9EB3D4")); + } + + if (result.isSuccessful()) + { + result = run2(7, password2, Hex.decode("05DEC959ACFF72F7"), 1000, + Hex.decode("11DEDAD7758D4860")); + } + + if (result.isSuccessful()) + { + result = run1(8, password2, Hex.decode("1682C0FC5B3F7EC5"), 1000, + Hex.decode("483DD6E919D7DE2E8E648BA8F862F3FBFBDC2BCB2C02957F")); + } + + if (result.isSuccessful()) + { + result = run2(9, password2, Hex.decode("1682C0FC5B3F7EC5"), 1000, + Hex.decode("9D461D1B00355C50")); + } + + if (result.isSuccessful()) + { + result = run3(10, password2, Hex.decode("263216FCC2FAB31C"), 1000, + Hex.decode("5EC4C7A80DF652294C3925B6489A7AB857C83476")); + } + + return result; + } + + public static void main( + String[] args) + { + PKCS12Test test = new PKCS12Test(); + TestResult result = test.perform(); + + System.out.println(result); + } +} |