Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'prov/src/test/java/org/spongycastle/jce/provider/test/EncryptedPrivateKeyInfoTest.java')
-rw-r--r--prov/src/test/java/org/spongycastle/jce/provider/test/EncryptedPrivateKeyInfoTest.java145
1 files changed, 145 insertions, 0 deletions
diff --git a/prov/src/test/java/org/spongycastle/jce/provider/test/EncryptedPrivateKeyInfoTest.java b/prov/src/test/java/org/spongycastle/jce/provider/test/EncryptedPrivateKeyInfoTest.java
new file mode 100644
index 00000000..82dac3cf
--- /dev/null
+++ b/prov/src/test/java/org/spongycastle/jce/provider/test/EncryptedPrivateKeyInfoTest.java
@@ -0,0 +1,145 @@
+package org.spongycastle.jce.provider.test;
+
+import java.security.AlgorithmParameters;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.MessageDigest;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.spec.PKCS8EncodedKeySpec;
+
+import javax.crypto.Cipher;
+import javax.crypto.EncryptedPrivateKeyInfo;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.PBEParameterSpec;
+
+import org.spongycastle.jce.provider.BouncyCastleProvider;
+import org.spongycastle.util.test.SimpleTestResult;
+import org.spongycastle.util.test.Test;
+import org.spongycastle.util.test.TestResult;
+
+public class EncryptedPrivateKeyInfoTest
+ implements Test
+{
+ String alg = "1.2.840.113549.1.12.1.3"; // 3 key triple DES with SHA-1
+
+ public TestResult perform()
+ {
+ try
+ {
+ KeyPairGenerator fact = KeyPairGenerator.getInstance("RSA", "SC");
+ fact.initialize(512, new SecureRandom());
+
+ KeyPair keyPair = fact.generateKeyPair();
+
+ PrivateKey priKey = keyPair.getPrivate();
+ PublicKey pubKey = keyPair.getPublic();
+
+ //
+ // set up the parameters
+ //
+ byte[] salt = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
+ int iterationCount = 100;
+ PBEParameterSpec defParams = new PBEParameterSpec(salt, iterationCount);
+
+ AlgorithmParameters params = AlgorithmParameters.getInstance(alg, "SC");
+
+ params.init(defParams);
+
+ //
+ // set up the key
+ //
+ char[] password1 = { 'h', 'e', 'l', 'l', 'o' };
+
+ PBEKeySpec pbeSpec = new PBEKeySpec(password1);
+ SecretKeyFactory keyFact = SecretKeyFactory.getInstance(alg, "SC");
+ Cipher cipher = Cipher.getInstance(alg, "SC");
+
+ cipher.init(Cipher.WRAP_MODE, keyFact.generateSecret(pbeSpec), params);
+
+ byte[] wrappedKey = cipher.wrap(priKey);
+
+ //
+ // create encrypted object
+ //
+
+ EncryptedPrivateKeyInfo pInfo = new EncryptedPrivateKeyInfo(params, wrappedKey);
+
+ //
+ // decryption step
+ //
+ char[] password2 = { 'h', 'e', 'l', 'l', 'o' };
+
+ pbeSpec = new PBEKeySpec(password2);
+
+ cipher = Cipher.getInstance(pInfo.getAlgName(), "SC");
+
+ cipher.init(Cipher.DECRYPT_MODE, keyFact.generateSecret(pbeSpec), pInfo.getAlgParameters());
+
+ PKCS8EncodedKeySpec keySpec = pInfo.getKeySpec(cipher);
+
+ if (!MessageDigest.isEqual(priKey.getEncoded(), keySpec.getEncoded()))
+ {
+ return new SimpleTestResult(false, "Private key does not match");
+ }
+
+ //
+ // using Cipher parameters test
+ //
+ pbeSpec = new PBEKeySpec(password1);
+ keyFact = SecretKeyFactory.getInstance(alg, "SC");
+ cipher = Cipher.getInstance(alg, "SC");
+
+ cipher.init(Cipher.WRAP_MODE, keyFact.generateSecret(pbeSpec), params);
+
+ wrappedKey = cipher.wrap(priKey);
+
+ //
+ // create encrypted object
+ //
+
+ pInfo = new EncryptedPrivateKeyInfo(cipher.getParameters(), wrappedKey);
+
+ //
+ // decryption step
+ //
+ pbeSpec = new PBEKeySpec(password2);
+
+ cipher = Cipher.getInstance(pInfo.getAlgName(), "SC");
+
+ cipher.init(Cipher.DECRYPT_MODE, keyFact.generateSecret(pbeSpec), pInfo.getAlgParameters());
+
+ keySpec = pInfo.getKeySpec(cipher);
+
+ if (!MessageDigest.isEqual(priKey.getEncoded(), keySpec.getEncoded()))
+ {
+ return new SimpleTestResult(false, "Private key does not match");
+ }
+
+ return new SimpleTestResult(true, getName() + ": Okay");
+ }
+ catch (Exception e)
+ {
+ return new SimpleTestResult(false, getName() + ": exception - " + e.toString(), e);
+ }
+ }
+
+ public String getName()
+ {
+ return "EncryptedPrivateKeyInfoTest";
+ }
+
+ public static void main(
+ String[] args)
+ {
+ Security.addProvider(new BouncyCastleProvider());
+
+ Test test = new EncryptedPrivateKeyInfoTest();
+ TestResult result = test.perform();
+
+ System.out.println(result.toString());
+ }
+}