aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePointchevalCipherTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePointchevalCipherTest.java')
-rw-r--r--libraries/spongycastle/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePointchevalCipherTest.java102
1 files changed, 102 insertions, 0 deletions
diff --git a/libraries/spongycastle/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePointchevalCipherTest.java b/libraries/spongycastle/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePointchevalCipherTest.java
new file mode 100644
index 000000000..ba41fcfdb
--- /dev/null
+++ b/libraries/spongycastle/core/src/test/java/org/spongycastle/pqc/crypto/test/McEliecePointchevalCipherTest.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.McElieceCCA2KeyGenerationParameters;
+import org.spongycastle.pqc.crypto.mceliece.McElieceCCA2KeyPairGenerator;
+import org.spongycastle.pqc.crypto.mceliece.McElieceCCA2Parameters;
+import org.spongycastle.pqc.crypto.mceliece.McEliecePointchevalCipher;
+import org.spongycastle.pqc.crypto.mceliece.McEliecePointchevalDigestCipher;
+import org.spongycastle.util.test.SimpleTest;
+
+public class McEliecePointchevalCipherTest
+ extends SimpleTest
+{
+
+ SecureRandom keyRandom = new SecureRandom();
+
+ public String getName()
+ {
+ return "McElieceFujisaki";
+
+ }
+
+
+ public void performTest()
+ {
+ int numPassesKPG = 1;
+ int numPassesEncDec = 10;
+ Random rand = new Random();
+ byte[] mBytes;
+ for (int j = 0; j < numPassesKPG; j++)
+ {
+
+ McElieceCCA2Parameters params = new McElieceCCA2Parameters();
+ McElieceCCA2KeyPairGenerator mcElieceCCA2KeyGen = new McElieceCCA2KeyPairGenerator();
+ McElieceCCA2KeyGenerationParameters genParam = new McElieceCCA2KeyGenerationParameters(keyRandom, params);
+
+ mcElieceCCA2KeyGen.init(genParam);
+ AsymmetricCipherKeyPair pair = mcElieceCCA2KeyGen.generateKeyPair();
+
+ ParametersWithRandom param = new ParametersWithRandom(pair.getPublic(), keyRandom);
+ Digest msgDigest = new SHA256Digest();
+ McEliecePointchevalDigestCipher mcEliecePointchevalDigestCipher = new McEliecePointchevalDigestCipher(new McEliecePointchevalCipher(), msgDigest);
+
+
+ for (int k = 1; k <= numPassesEncDec; k++)
+ {
+ System.out.println("############### test: " + k);
+ // initialize for encryption
+ mcEliecePointchevalDigestCipher.init(true, param);
+
+ // generate random message
+ int mLength = (rand.nextInt() & 0x1f) + 1;
+ mBytes = new byte[mLength];
+ rand.nextBytes(mBytes);
+
+ // encrypt
+ mcEliecePointchevalDigestCipher.update(mBytes, 0, mBytes.length);
+ byte[] enc = mcEliecePointchevalDigestCipher.messageEncrypt();
+
+ // initialize for decryption
+ mcEliecePointchevalDigestCipher.init(false, pair.getPrivate());
+ byte[] constructedmessage = mcEliecePointchevalDigestCipher.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 McEliecePointchevalCipherTest());
+ }
+
+}