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 'core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePKCSCipherTest.java')
-rw-r--r--core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePKCSCipherTest.java102
1 files changed, 102 insertions, 0 deletions
diff --git a/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePKCSCipherTest.java b/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePKCSCipherTest.java
new file mode 100644
index 00000000..8578d808
--- /dev/null
+++ b/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePKCSCipherTest.java
@@ -0,0 +1,102 @@
+package org.spongycastle.pqc.crypto.test;
+
+import java.security.SecureRandom;
+import java.util.Random;
+
+import org.spongycastle.crypto.AsymmetricCipherKeyPair;
+import org.spongycastle.crypto.Digest;
+import org.spongycastle.crypto.digests.SHA256Digest;
+import org.spongycastle.crypto.params.ParametersWithRandom;
+import org.spongycastle.pqc.crypto.mceliece.McElieceKeyGenerationParameters;
+import org.spongycastle.pqc.crypto.mceliece.McElieceKeyPairGenerator;
+import org.spongycastle.pqc.crypto.mceliece.McEliecePKCSCipher;
+import org.spongycastle.pqc.crypto.mceliece.McEliecePKCSDigestCipher;
+import org.spongycastle.pqc.crypto.mceliece.McElieceParameters;
+import org.spongycastle.util.test.SimpleTest;
+
+public class McEliecePKCSCipherTest
+ extends SimpleTest
+{
+
+ SecureRandom keyRandom = new SecureRandom();
+
+ public String getName()
+ {
+ return "McEliecePKCS";
+
+ }
+
+
+ public void performTest()
+ {
+ int numPassesKPG = 1;
+ int numPassesEncDec = 10;
+ Random rand = new Random();
+ byte[] mBytes;
+ for (int j = 0; j < numPassesKPG; j++)
+ {
+
+ McElieceParameters params = new McElieceParameters();
+ McElieceKeyPairGenerator mcElieceKeyGen = new McElieceKeyPairGenerator();
+ McElieceKeyGenerationParameters genParam = new McElieceKeyGenerationParameters(keyRandom, params);
+
+ mcElieceKeyGen.init(genParam);
+ AsymmetricCipherKeyPair pair = mcElieceKeyGen.generateKeyPair();
+
+ ParametersWithRandom param = new ParametersWithRandom(pair.getPublic(), keyRandom);
+ Digest msgDigest = new SHA256Digest();
+ McEliecePKCSDigestCipher mcEliecePKCSDigestCipher = new McEliecePKCSDigestCipher(new McEliecePKCSCipher(), msgDigest);
+
+
+ for (int k = 1; k <= numPassesEncDec; k++)
+ {
+ System.out.println("############### test: " + k);
+ // initialize for encryption
+ mcEliecePKCSDigestCipher.init(true, param);
+
+ // generate random message
+ int mLength = (rand.nextInt() & 0x1f) + 1;
+ mBytes = new byte[mLength];
+ rand.nextBytes(mBytes);
+
+ // encrypt
+ mcEliecePKCSDigestCipher.update(mBytes, 0, mBytes.length);
+ byte[] enc = mcEliecePKCSDigestCipher.messageEncrypt();
+
+ // initialize for decryption
+ mcEliecePKCSDigestCipher.init(false, pair.getPrivate());
+ byte[] constructedmessage = mcEliecePKCSDigestCipher.messageDecrypt(enc);
+
+ // XXX write in McElieceFujisakiDigestCipher?
+ msgDigest.update(mBytes, 0, mBytes.length);
+ byte[] hash = new byte[msgDigest.getDigestSize()];
+ msgDigest.doFinal(hash, 0);
+
+ boolean verified = true;
+ for (int i = 0; i < hash.length; i++)
+ {
+ verified = verified && hash[i] == constructedmessage[i];
+ }
+
+ if (!verified)
+ {
+ fail("en/decryption fails");
+ }
+ else
+ {
+ System.out.println("test okay");
+ System.out.println();
+ }
+
+ }
+ }
+
+ }
+
+ public static void main(
+ String[] args)
+ {
+ runTest(new McEliecePKCSCipherTest());
+ }
+
+}