diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index a2d7c21..0498460 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -10,6 +10,7 @@
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PQCLibrary/.gitignore b/PQCLibrary/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/PQCLibrary/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/PQCLibrary/build.gradle b/PQCLibrary/build.gradle
new file mode 100644
index 0000000..a9cd157
--- /dev/null
+++ b/PQCLibrary/build.gradle
@@ -0,0 +1,35 @@
+plugins {
+ id 'com.android.library'
+}
+
+android {
+ compileSdk 32
+
+ defaultConfig {
+ minSdk 21
+ targetSdk 32
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation 'com.github.aelstad:keccakj:1.1.0'
+ implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'com.google.android.material:material:1.7.0'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+}
\ No newline at end of file
diff --git a/PQCLibrary/consumer-rules.pro b/PQCLibrary/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/PQCLibrary/proguard-rules.pro b/PQCLibrary/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/PQCLibrary/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/PQCLibrary/src/androidTest/java/com/sak/pqclibrary/ExampleInstrumentedTest.java b/PQCLibrary/src/androidTest/java/com/sak/pqclibrary/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..f5b23ab
--- /dev/null
+++ b/PQCLibrary/src/androidTest/java/com/sak/pqclibrary/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.sak.pqclibrary;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.sak.pqclibrary.test", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/PQCLibrary/src/main/AndroidManifest.xml b/PQCLibrary/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..a699f87
--- /dev/null
+++ b/PQCLibrary/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/PQCLibrary/src/main/java/com/sak/pqclibrary/PQCLibary.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/PQCLibary.java
new file mode 100644
index 0000000..630762e
--- /dev/null
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/PQCLibary.java
@@ -0,0 +1,140 @@
+package com.sak.pqclibrary;
+
+import static com.sak.pqclibrary.ParameterSets.FIRE_SABER;
+import static com.sak.pqclibrary.ParameterSets.KYBER1024;
+import static com.sak.pqclibrary.ParameterSets.KYBER512;
+import static com.sak.pqclibrary.ParameterSets.KYBER768;
+import static com.sak.pqclibrary.ParameterSets.LIGHT_SABER;
+import static com.sak.pqclibrary.ParameterSets.NTRU509;
+import static com.sak.pqclibrary.ParameterSets.NTRU677;
+import static com.sak.pqclibrary.ParameterSets.NTRU821;
+import static com.sak.pqclibrary.ParameterSets.SABER;
+import android.os.Build;
+import androidx.annotation.RequiresApi;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.Kyber1024KeyPair;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.Kyber512KeyPair;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.Kyber768KeyPair;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.KyberKeyPair;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.KyberProcess;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.ntru.OWCPA;
+import com.sak.pqclibrary.saber.Kem;
+import com.sak.pqclibrary.saber.Params;
+import com.sak.pqclibrary.saber.models.EncapsulationModel;
+import com.sak.pqclibrary.saber.models.Keys;
+
+public class PQCLibary {
+ byte[] pk;
+ byte[] sk;
+ byte[] rnd1 = new byte[KyberParams.paramsSymBytes];
+ int algorithmType;
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ public PQCLibary(int PARAMETER_SETS) {
+
+ Keys keys = null;
+
+ switch (PARAMETER_SETS){
+ case LIGHT_SABER:
+ this.algorithmType= 1;
+ new Params(2,10,3);
+ keys = Kem.crypto_kem_keypair();
+ break;
+ case SABER:
+ this.algorithmType= 1;
+ new Params(3,8,4);
+ keys = Kem.crypto_kem_keypair();
+ break;
+ case FIRE_SABER:
+ this.algorithmType= 1;
+ new Params(4,6,6);
+ keys = Kem.crypto_kem_keypair();
+ break;
+ case KYBER512:
+ keys = Kyber512KeyPair.generateKeys512();
+ this.algorithmType = 3;
+ break;
+ case KYBER768:
+ keys = Kyber768KeyPair.generateKeys768();
+ this.algorithmType = 4;
+ break;
+ case KYBER1024:
+ keys = Kyber1024KeyPair.generateKeys1024();
+ this.algorithmType = 5;
+ break;
+ case NTRU509:
+ new com.sak.pqclibrary.ntru.Params(509);
+ this.algorithmType = 2;
+ keys = OWCPA.owcpa_keypair();
+ break;
+ case NTRU677:
+ new com.sak.pqclibrary.ntru.Params(677);
+ this.algorithmType = 2;
+ keys = OWCPA.owcpa_keypair();
+ break;
+ case NTRU821:
+ new com.sak.pqclibrary.ntru.Params(821);
+ this.algorithmType = 2;
+ keys = OWCPA.owcpa_keypair();
+ break;
+ }
+ this.pk = keys.getPk();
+ this.sk = keys.getSk();
+ }
+
+ public byte[] getPk() {
+ return pk;
+ }
+
+ public byte[] getSk() {
+ return sk;
+ }
+ public EncapsulationModel encapsulation(byte[] pk){
+ EncapsulationModel enc;
+ switch (algorithmType){
+ case 1:
+ enc = Kem.crypto_kem_enc(pk);
+ break;
+ case 2:
+ enc = OWCPA.crypto_kem_enc(pk);
+ break;
+ case 3:
+ enc = new EncapsulationModel(KyberProcess.encrypt512(rnd1,pk).getCipherText(),KyberProcess.encrypt512(rnd1,pk).getSecretKey());
+ break;
+ case 4:
+ enc = new EncapsulationModel(KyberProcess.encrypt768(rnd1,pk).getCipherText(),KyberProcess.encrypt768(rnd1,pk).getSecretKey());
+ break;
+ case 5:
+ enc = new EncapsulationModel(KyberProcess.encrypt1024(rnd1,pk).getCipherText(),KyberProcess.encrypt1024(rnd1,pk).getSecretKey());
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " + algorithmType);
+ }
+ return new EncapsulationModel(enc.getCipherText(),enc.getSs());
+ }
+
+
+
+ public byte[] decapsulation(byte[] ct , byte[] sk){
+ byte[] ssk2 ;
+ switch (algorithmType){
+ case 1:
+ ssk2 = Kem.crypto_kem_dec(sk,ct);
+ break;
+ case 2 :
+ ssk2 = OWCPA.crypto_kem_dec(ct,sk);
+ break;
+ case 3 :
+ ssk2 = KyberProcess.decrypt512(ct,sk);
+ break;
+ case 4 :
+ ssk2 = KyberProcess.decrypt768(ct,sk);
+ break;
+ case 5 :
+ ssk2 = KyberProcess.decrypt1024(ct,sk);
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " + algorithmType);
+ }
+ return ssk2;
+ }
+}
diff --git a/PQCLibrary/src/main/java/com/sak/pqclibrary/ParameterSets.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ParameterSets.java
new file mode 100644
index 0000000..09cafca
--- /dev/null
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ParameterSets.java
@@ -0,0 +1,18 @@
+package com.sak.pqclibrary;
+
+public class ParameterSets {
+ public static final int LIGHT_SABER = 1;
+ public static final int SABER = 2;
+ public static final int FIRE_SABER = 3;
+
+ public static final int KYBER512 = 4;
+ public static final int KYBER768 = 5;
+ public static final int KYBER1024 = 6;
+
+ public static final int NTRU509 = 7;
+ public static final int NTRU677 = 8;
+ public static final int NTRU821 = 9;
+
+
+
+}
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber1024KeyPairGenerator.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber1024KeyPair.java
similarity index 80%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber1024KeyPairGenerator.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber1024KeyPair.java
index 39e7160..c12391b 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber1024KeyPairGenerator.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber1024KeyPair.java
@@ -1,20 +1,22 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
import android.os.Build;
import android.util.Log;
import androidx.annotation.RequiresApi;
import com.github.aelstad.keccakj.fips202.SHA3_256;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.Indcpa;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.Indcpa;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.saber.models.Keys;
+
import java.security.*;
import java.util.ArrayList;
-public final class Kyber1024KeyPairGenerator {
+public final class Kyber1024KeyPair {
@RequiresApi(api = Build.VERSION_CODES.O)
- public static KyberKeyPair generateKeys1024( ) {
- KyberKeyPair keyPair = null;
+ public static Keys generateKeys1024( ) {
+ Keys keyPair = null;
KyberKeySize kyberKeySize = KyberKeySize.KEY_512;
SecureRandom random = new SecureRandom();
try{
@@ -46,7 +48,7 @@ public static KyberKeyPair generateKeys1024( ) {
System.arraycopy(pkh, 0, privateKeyFixedLength, offsetEnd, pkh.length);
offsetEnd += pkh.length;
System.arraycopy(rnd, 0, privateKeyFixedLength, offsetEnd, rnd.length);
- keyPair = new KyberKeyPair(packedPublicKey, privateKeyFixedLength);
+ keyPair = new Keys(packedPublicKey, privateKeyFixedLength);
} catch (Exception ex) {
ex.printStackTrace();
}
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber512KeyPairGenerator.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber512KeyPair.java
similarity index 79%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber512KeyPairGenerator.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber512KeyPair.java
index a8e224e..9141ddc 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber512KeyPairGenerator.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber512KeyPair.java
@@ -1,19 +1,21 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
import android.os.Build;
import androidx.annotation.RequiresApi;
import com.github.aelstad.keccakj.fips202.SHA3_256;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.Indcpa;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.Indcpa;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.saber.models.Keys;
+
import java.security.*;
import java.util.ArrayList;
-public final class Kyber512KeyPairGenerator {
+public final class Kyber512KeyPair {
@RequiresApi(api = Build.VERSION_CODES.O)
- public static KyberKeyPair generateKeys512() {
+ public static Keys generateKeys512() {
+ Keys keys = null;
int paramsK = 2;
- KyberKeyPair keyPair = null;
KyberKeySize kyberKeySize = KyberKeySize.KEY_512;
SecureRandom random = new SecureRandom();
try{
@@ -40,11 +42,11 @@ public static KyberKeyPair generateKeys512() {
System.arraycopy(pkh, 0, privateKeyFixedLength, offsetEnd, pkh.length);
offsetEnd += pkh.length;
System.arraycopy(rnd, 0, privateKeyFixedLength, offsetEnd, rnd.length);
- keyPair = new KyberKeyPair(packedPublicKey, privateKeyFixedLength);
+ keys = new Keys(packedPublicKey, privateKeyFixedLength);
} catch (Exception ex) {
ex.printStackTrace();
}
- return keyPair;
+ return keys;
}
}
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber768KeyPairGenerator.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber768KeyPair.java
similarity index 79%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber768KeyPairGenerator.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber768KeyPair.java
index 6a4fe25..435b312 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/Kyber768KeyPairGenerator.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/Kyber768KeyPair.java
@@ -1,19 +1,21 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
import android.os.Build;
import android.util.Log;
import androidx.annotation.RequiresApi;
import com.github.aelstad.keccakj.fips202.SHA3_256;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.Indcpa;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.Indcpa;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.saber.models.Keys;
+
import java.security.*;
import java.util.ArrayList;
-public final class Kyber768KeyPairGenerator {
+public final class Kyber768KeyPair {
@RequiresApi(api = Build.VERSION_CODES.O)
- public static KyberKeyPair generateKeys768( ) {
- KyberKeyPair keyPair = null;
+ public static Keys generateKeys768( ) {
+ Keys keys = null;
KyberKeySize kyberKeySize = KyberKeySize.KEY_512;
SecureRandom random = new SecureRandom();
try{
@@ -45,10 +47,10 @@ public static KyberKeyPair generateKeys768( ) {
System.arraycopy(pkh, 0, privateKeyFixedLength, offsetEnd, pkh.length);
offsetEnd += pkh.length;
System.arraycopy(rnd, 0, privateKeyFixedLength, offsetEnd, rnd.length);
- keyPair = new KyberKeyPair(packedPublicKey, privateKeyFixedLength);
+ keys = new Keys(packedPublicKey, privateKeyFixedLength);
} catch (Exception ex) {
ex.printStackTrace();
}
- return keyPair;
+ return keys;
}
}
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeyPair.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeyPair.java
similarity index 87%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeyPair.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeyPair.java
index 0ae583c..7081527 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeyPair.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeyPair.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
public class KyberKeyPair {
private byte[] kyberPublicKey,kyberPrivateKey;
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeySize.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeySize.java
similarity index 82%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeySize.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeySize.java
index 94c5527..ab38808 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeySize.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeySize.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
public enum KyberKeySize {
KEY_512("2"),
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeyUtil.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeyUtil.java
similarity index 86%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeyUtil.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeyUtil.java
index fdb7e8a..f6a35f1 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberKeyUtil.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberKeyUtil.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
public final class KyberKeyUtil {
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberProcess.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberProcess.java
similarity index 98%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberProcess.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberProcess.java
index c75776e..7d4111e 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberProcess.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberProcess.java
@@ -1,11 +1,11 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
import com.github.aelstad.keccakj.core.KeccakSponge;
import com.github.aelstad.keccakj.fips202.SHA3_256;
import com.github.aelstad.keccakj.fips202.SHA3_512;
import com.github.aelstad.keccakj.fips202.Shake256;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.Indcpa;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.KyberParams;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.Indcpa;
+import com.sak.pqclibrary.kyber.kyberencryption.provider.kyber.KyberParams;
import java.security.MessageDigest;
public class KyberProcess {
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberPublicKeySpec.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberPublicKeySpec.java
similarity index 93%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberPublicKeySpec.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberPublicKeySpec.java
index fbf2dbe..0ded179 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberPublicKeySpec.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberPublicKeySpec.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
import java.math.BigInteger;
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberSecretKey.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberSecretKey.java
similarity index 86%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberSecretKey.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberSecretKey.java
index 2d9521c..b7d70df 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/KyberSecretKey.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/KyberSecretKey.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider;
+package com.sak.pqclibrary.kyber.kyberencryption.provider;
public class KyberSecretKey {
private byte[] secretKey;
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/ByteOps.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/ByteOps.java
similarity index 97%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/ByteOps.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/ByteOps.java
index 1f3179a..7932ad9 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/ByteOps.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/ByteOps.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
import java.util.Arrays;
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Indcpa.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Indcpa.java
similarity index 99%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Indcpa.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Indcpa.java
index 51f2aee..8b9e7e0 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Indcpa.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Indcpa.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
import android.os.Build;
import androidx.annotation.RequiresApi;
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/KyberParams.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/KyberParams.java
similarity index 96%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/KyberParams.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/KyberParams.java
index d0fc22a..bbd46a6 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/KyberParams.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/KyberParams.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
public final class KyberParams {
public final static int paramsN = 256;
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/KyberUniformRandom.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/KyberUniformRandom.java
similarity index 87%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/KyberUniformRandom.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/KyberUniformRandom.java
index ac1f398..661edb5 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/KyberUniformRandom.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/KyberUniformRandom.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
public final class KyberUniformRandom {
private short[] uniformR;
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Ntt.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Ntt.java
similarity index 98%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Ntt.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Ntt.java
index 3e913a3..1c81032 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Ntt.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Ntt.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
public final class Ntt {
public static short[] nttZetas = new short[]{
2285, 2571, 2970, 1812, 1493, 1422, 287, 202, 3158, 622, 1577, 182, 962,
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Poly.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Poly.java
similarity index 99%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Poly.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Poly.java
index ce311cb..0098140 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/Poly.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/Poly.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
import java.util.Arrays;
public final class Poly {
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/UnpackedCipherText.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/UnpackedCipherText.java
similarity index 84%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/UnpackedCipherText.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/UnpackedCipherText.java
index 802c37e..bdba90c 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/UnpackedCipherText.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/UnpackedCipherText.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
final class UnpackedCipherText {
diff --git a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/UnpackedPublicKey.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/UnpackedPublicKey.java
similarity index 88%
rename from app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/UnpackedPublicKey.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/UnpackedPublicKey.java
index b41230d..397af86 100644
--- a/app/src/main/java/com/sak/pqclibary/kyber/kyberencryption/provider/kyber/UnpackedPublicKey.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/kyber/kyberencryption/provider/kyber/UnpackedPublicKey.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.kyber.kyberencryption.provider.kyber;
+package com.sak.pqclibrary.kyber.kyberencryption.provider.kyber;
final class UnpackedPublicKey {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/NTRUKem.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/NTRUKem.java
similarity index 71%
rename from app/src/main/java/com/sak/pqclibary/ntru/NTRUKem.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/NTRUKem.java
index e70f3d6..1ddfb0c 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/NTRUKem.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/NTRUKem.java
@@ -1,7 +1,7 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import com.sak.pqclibary.saber.models.EncapsulationModel;
-import com.sak.pqclibary.saber.models.Keys;
+import com.sak.pqclibrary.saber.models.EncapsulationModel;
+import com.sak.pqclibrary.saber.models.Keys;
public class NTRUKem {
public static Keys crypto_kem_keypair(){
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/OWCPA.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/OWCPA.java
similarity index 89%
rename from app/src/main/java/com/sak/pqclibary/ntru/OWCPA.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/OWCPA.java
index 7a53b41..83030ae 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/OWCPA.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/OWCPA.java
@@ -1,25 +1,25 @@
-package com.sak.pqclibary.ntru;
-
-import static com.sak.pqclibary.ntru.Params.CRYPTO_BYTES;
-import static com.sak.pqclibary.ntru.Params.CRYPTO_CIPHERTEXTBYTES;
-import static com.sak.pqclibary.ntru.Params.CRYPTO_PUBLICKEYBYTES;
-import static com.sak.pqclibary.ntru.Params.CRYPTO_SECRETKEYBYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_CIPHERTEXTBYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_LOGQ;
-import static com.sak.pqclibary.ntru.Params.NTRU_N;
-import static com.sak.pqclibary.ntru.Params.NTRU_OWCPA_MSGBYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_OWCPA_SECRETKEYBYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_PACK_DEG;
-import static com.sak.pqclibary.ntru.Params.NTRU_PACK_TRINARY_BYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_PRFKEYBYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_Q;
-import static com.sak.pqclibary.ntru.Params.NTRU_SAMPLE_FG_BYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_SAMPLE_RM_BYTES;
-
-import com.sak.pqclibary.saber.models.Keys;
+package com.sak.pqclibrary.ntru;
+
+import static com.sak.pqclibrary.ntru.Params.CRYPTO_BYTES;
+import static com.sak.pqclibrary.ntru.Params.CRYPTO_CIPHERTEXTBYTES;
+import static com.sak.pqclibrary.ntru.Params.CRYPTO_PUBLICKEYBYTES;
+import static com.sak.pqclibrary.ntru.Params.CRYPTO_SECRETKEYBYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_CIPHERTEXTBYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_LOGQ;
+import static com.sak.pqclibrary.ntru.Params.NTRU_N;
+import static com.sak.pqclibrary.ntru.Params.NTRU_OWCPA_MSGBYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_OWCPA_SECRETKEYBYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PACK_DEG;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PACK_TRINARY_BYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PRFKEYBYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_Q;
+import static com.sak.pqclibrary.ntru.Params.NTRU_SAMPLE_FG_BYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_SAMPLE_RM_BYTES;
+
+import com.sak.pqclibrary.saber.models.Keys;
import com.github.aelstad.keccakj.fips202.SHA3_256;
-import com.sak.pqclibary.saber.models.EncapsulationModel;
-import com.sak.pqclibary.ntru.models.TwoLongStruct;
+import com.sak.pqclibrary.saber.models.EncapsulationModel;
+import com.sak.pqclibrary.ntru.models.TwoLongStruct;
import java.security.MessageDigest;
import java.util.Arrays;
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Pack3.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Pack3.java
similarity index 83%
rename from app/src/main/java/com/sak/pqclibary/ntru/Pack3.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Pack3.java
index 2883cd3..13872c0 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Pack3.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Pack3.java
@@ -1,7 +1,7 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import static com.sak.pqclibary.ntru.Params.NTRU_PACK_DEG;
-import static com.sak.pqclibary.ntru.Params.NTRU_PACK_TRINARY_BYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PACK_DEG;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PACK_TRINARY_BYTES;
public class Pack3 {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Packq.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Packq.java
similarity index 89%
rename from app/src/main/java/com/sak/pqclibary/ntru/Packq.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Packq.java
index 7323bdb..c568fbd 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Packq.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Packq.java
@@ -1,9 +1,9 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import static com.sak.pqclibary.ntru.Params.CRYPTO_PUBLICKEYBYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_N;
-import static com.sak.pqclibary.ntru.Params.NTRU_PACK_DEG;
-import static com.sak.pqclibary.ntru.Params.NTRU_PUBLICKEYBYTES;
+import static com.sak.pqclibrary.ntru.Params.CRYPTO_PUBLICKEYBYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_N;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PACK_DEG;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PUBLICKEYBYTES;
public class Packq {
public static short[] poly_Rq_sum_zero_frombytes(byte[] a) {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Params.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Params.java
similarity index 99%
rename from app/src/main/java/com/sak/pqclibary/ntru/Params.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Params.java
index fb1a544..6e22eab 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Params.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Params.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
public class Params {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Poly.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly.java
similarity index 96%
rename from app/src/main/java/com/sak/pqclibary/ntru/Poly.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly.java
index 733946b..945de51 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Poly.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly.java
@@ -1,8 +1,8 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import static com.sak.pqclibary.ntru.Params.NTRU_N;
-import static com.sak.pqclibary.ntru.Params.NTRU_PACK_DEG;
-import static com.sak.pqclibary.ntru.Params.NTRU_Q;
+import static com.sak.pqclibrary.ntru.Params.NTRU_N;
+import static com.sak.pqclibrary.ntru.Params.NTRU_PACK_DEG;
+import static com.sak.pqclibrary.ntru.Params.NTRU_Q;
public class Poly {
public static short[] poly_Z3_to_Zq(short[] f) {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Poly_req_mul.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly_req_mul.java
similarity index 82%
rename from app/src/main/java/com/sak/pqclibary/ntru/Poly_req_mul.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly_req_mul.java
index 6034da5..5d73102 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Poly_req_mul.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly_req_mul.java
@@ -1,6 +1,6 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import static com.sak.pqclibary.ntru.Params.NTRU_N;
+import static com.sak.pqclibrary.ntru.Params.NTRU_N;
public class Poly_req_mul {
public static short[] poly_Rq_mul(short[] a, short[] b) {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Poly_s3_inv.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly_s3_inv.java
similarity index 95%
rename from app/src/main/java/com/sak/pqclibary/ntru/Poly_s3_inv.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly_s3_inv.java
index a14641c..9a2585a 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Poly_s3_inv.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Poly_s3_inv.java
@@ -1,6 +1,6 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import static com.sak.pqclibary.ntru.Params.NTRU_N;
+import static com.sak.pqclibrary.ntru.Params.NTRU_N;
public class Poly_s3_inv {
public static int both_negative_mask(int x, int y) {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Sample.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Sample.java
similarity index 88%
rename from app/src/main/java/com/sak/pqclibary/ntru/Sample.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Sample.java
index 2e59514..bab006b 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Sample.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Sample.java
@@ -1,10 +1,10 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import static com.sak.pqclibary.ntru.Params.NTRU_N;
-import static com.sak.pqclibary.ntru.Params.NTRU_SAMPLE_IID_BYTES;
-import static com.sak.pqclibary.ntru.Params.NTRU_WEIGHT;
+import static com.sak.pqclibrary.ntru.Params.NTRU_N;
+import static com.sak.pqclibrary.ntru.Params.NTRU_SAMPLE_IID_BYTES;
+import static com.sak.pqclibrary.ntru.Params.NTRU_WEIGHT;
-import com.sak.pqclibary.ntru.models.TwoLongStruct;
+import com.sak.pqclibrary.ntru.models.TwoLongStruct;
import java.util.Arrays;
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/Sample_iid.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Sample_iid.java
similarity index 91%
rename from app/src/main/java/com/sak/pqclibary/ntru/Sample_iid.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Sample_iid.java
index 0d11ea7..399b754 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/Sample_iid.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/Sample_iid.java
@@ -1,6 +1,6 @@
-package com.sak.pqclibary.ntru;
+package com.sak.pqclibrary.ntru;
-import static com.sak.pqclibary.ntru.Params.NTRU_N;
+import static com.sak.pqclibrary.ntru.Params.NTRU_N;
public class Sample_iid {
public static short[] sample_iid(byte[] uniformbytes) {
diff --git a/app/src/main/java/com/sak/pqclibary/ntru/models/TwoLongStruct.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/models/TwoLongStruct.java
similarity index 86%
rename from app/src/main/java/com/sak/pqclibary/ntru/models/TwoLongStruct.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/models/TwoLongStruct.java
index 7ea5ab3..03bcda6 100644
--- a/app/src/main/java/com/sak/pqclibary/ntru/models/TwoLongStruct.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/ntru/models/TwoLongStruct.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.ntru.models;
+package com.sak.pqclibrary.ntru.models;
public class TwoLongStruct {
private short[] a,b;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/CBD.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/CBD.java
similarity index 91%
rename from app/src/main/java/com/sak/pqclibary/saber/CBD.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/CBD.java
index 33894ca..6983ff8 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/CBD.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/CBD.java
@@ -1,7 +1,7 @@
-package com.sak.pqclibary.saber;
+package com.sak.pqclibrary.saber;
-import static com.sak.pqclibary.saber.Params.SABER_N;
-import com.sak.pqclibary.saber.utils.Utils;
+import static com.sak.pqclibrary.saber.Params.SABER_N;
+import com.sak.pqclibrary.saber.utils.Utils;
public class CBD {
public static short[] cbd(short[] shorts, byte[] buf1) {
diff --git a/app/src/main/java/com/sak/pqclibary/saber/Indcpa.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Indcpa.java
similarity index 75%
rename from app/src/main/java/com/sak/pqclibary/saber/Indcpa.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Indcpa.java
index bb7a3f1..c90826a 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/Indcpa.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Indcpa.java
@@ -1,23 +1,24 @@
-package com.sak.pqclibary.saber;
-
-import static com.sak.pqclibary.saber.Params.CRYPTO_CIPHERTEXTBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_EP;
-import static com.sak.pqclibary.saber.Params.SABER_EQ;
-import static com.sak.pqclibary.saber.Params.SABER_ET;
-import static com.sak.pqclibary.saber.Params.SABER_L;
-import static com.sak.pqclibary.saber.Params.SABER_N;
-import static com.sak.pqclibary.saber.Params.SABER_NOISE_SEEDBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_POLYVECBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_POLYVECCOMPRESSEDBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_SEEDBYTES;
-import static com.sak.pqclibary.saber.Params.h1;
-import static com.sak.pqclibary.saber.Params.h2;
-import static com.sak.pqclibary.saber.Params.isRandom;
+package com.sak.pqclibrary.saber;
+
+import static com.sak.pqclibrary.saber.Params.CRYPTO_CIPHERTEXTBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_EP;
+import static com.sak.pqclibrary.saber.Params.SABER_EQ;
+import static com.sak.pqclibrary.saber.Params.SABER_ET;
+import static com.sak.pqclibrary.saber.Params.SABER_L;
+import static com.sak.pqclibrary.saber.Params.SABER_N;
+import static com.sak.pqclibrary.saber.Params.SABER_NOISE_SEEDBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_POLYVECBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_POLYVECCOMPRESSEDBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_SEEDBYTES;
+import static com.sak.pqclibrary.saber.Params.h1;
+import static com.sak.pqclibrary.saber.Params.h2;
+import static com.sak.pqclibrary.saber.Params.isRandom;
import com.github.aelstad.keccakj.core.KeccakSponge;
import com.github.aelstad.keccakj.fips202.Shake128;
-import com.sak.pqclibary.saber.models.Keys;
-import com.sak.pqclibary.saber.utils.Utils;
+import com.sak.pqclibrary.saber.models.Keys;
+import com.sak.pqclibrary.saber.utils.Utils;
import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
import java.util.Arrays;
public class Indcpa {
@@ -39,19 +40,8 @@ public static Keys indcpa_kem_keypair() throws NoSuchAlgorithmException {
int i, j;
- //RandomControl
- if(isRandom){
- seed_A = Utils.randomBytes(seed_A.length);
- seed_s = Utils.randomBytes(seed_s.length);
- }
- else{
- for (i = 0; i < SABER_SEEDBYTES; i++) {
- seed_A[i] = 1;
- }
- for (i = 0; i < SABER_NOISE_SEEDBYTES; i++) {
- seed_s[i] = 0;
- }
- }
+ seed_A = Utils.randomBytes(seed_A.length);
+ seed_s = Utils.randomBytes(seed_s.length);
KeccakSponge xof = new Shake128();
xof.getAbsorbStream().write(seed_A);
diff --git a/app/src/main/java/com/sak/pqclibary/saber/Kem.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Kem.java
similarity index 85%
rename from app/src/main/java/com/sak/pqclibary/saber/Kem.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Kem.java
index 2410d0f..b8800f1 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/Kem.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Kem.java
@@ -1,19 +1,19 @@
-package com.sak.pqclibary.saber;
+package com.sak.pqclibrary.saber;
-import static com.sak.pqclibary.saber.Params.CRYPTO_BYTES;
-import static com.sak.pqclibary.saber.Params.CRYPTO_CIPHERTEXTBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_BYTES_CCA_DEC;
-import static com.sak.pqclibary.saber.Params.SABER_HASHBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_INDCPA_PUBLICKEYBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_INDCPA_SECRETKEYBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_SECRETKEYBYTES;
-import static com.sak.pqclibary.saber.Params.isRandom;
+import static com.sak.pqclibrary.saber.Params.CRYPTO_BYTES;
+import static com.sak.pqclibrary.saber.Params.CRYPTO_CIPHERTEXTBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_BYTES_CCA_DEC;
+import static com.sak.pqclibrary.saber.Params.SABER_HASHBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_INDCPA_PUBLICKEYBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_INDCPA_SECRETKEYBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_SECRETKEYBYTES;
+import static com.sak.pqclibrary.saber.Params.isRandom;
import com.github.aelstad.keccakj.fips202.SHA3_256;
import com.github.aelstad.keccakj.fips202.SHA3_512;
-import com.sak.pqclibary.saber.models.EncapsulationModel;
-import com.sak.pqclibary.saber.models.Keys;
-import com.sak.pqclibary.saber.utils.Utils;
+import com.sak.pqclibrary.saber.models.EncapsulationModel;
+import com.sak.pqclibrary.saber.models.Keys;
+import com.sak.pqclibrary.saber.utils.Utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/PackUnpack.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/PackUnpack.java
similarity index 94%
rename from app/src/main/java/com/sak/pqclibary/saber/PackUnpack.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/PackUnpack.java
index 623d9e8..d0d49ff 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/PackUnpack.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/PackUnpack.java
@@ -1,14 +1,14 @@
-package com.sak.pqclibary.saber;
-
-import static com.sak.pqclibary.saber.Params.SABER_EP;
-import static com.sak.pqclibary.saber.Params.SABER_ET;
-import static com.sak.pqclibary.saber.Params.SABER_INDCPA_SECRETKEYBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_KEYBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_L;
-import static com.sak.pqclibary.saber.Params.SABER_N;
-import static com.sak.pqclibary.saber.Params.SABER_POLYBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_POLYVECCOMPRESSEDBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_SCALEBYTES_KEM;
+package com.sak.pqclibrary.saber;
+
+import static com.sak.pqclibrary.saber.Params.SABER_EP;
+import static com.sak.pqclibrary.saber.Params.SABER_ET;
+import static com.sak.pqclibrary.saber.Params.SABER_INDCPA_SECRETKEYBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_KEYBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_L;
+import static com.sak.pqclibrary.saber.Params.SABER_N;
+import static com.sak.pqclibrary.saber.Params.SABER_POLYBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_POLYVECCOMPRESSEDBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_SCALEBYTES_KEM;
import java.util.Arrays;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/Params.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Params.java
similarity index 97%
rename from app/src/main/java/com/sak/pqclibary/saber/Params.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Params.java
index 244c268..c1df31c 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/Params.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Params.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.saber;
+package com.sak.pqclibrary.saber;
public class Params {
// L = 2 ; MU = 10 ; ET = 3
@@ -33,7 +33,7 @@ public class Params {
public static int CRYPTO_BYTES = SABER_KEYBYTES;
public static int SABER_SECRETKEYBYTES = (SABER_INDCPA_SECRETKEYBYTES + SABER_INDCPA_PUBLICKEYBYTES + SABER_HASHBYTES + SABER_KEYBYTES);
public static int h2 = ((1 << (SABER_EP - 2)) - (1 << (SABER_EP - SABER_ET - 1)) + (1 << (SABER_EQ - SABER_EP - 1)));
- public static boolean isRandom = false;
+ public static boolean isRandom = true;
public Params(int L, int MU,int ET) {
SABER_L = L;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/Poly.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Poly.java
similarity index 88%
rename from app/src/main/java/com/sak/pqclibary/saber/Poly.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Poly.java
index 7f5c91d..9ddc209 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/Poly.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Poly.java
@@ -1,9 +1,9 @@
-package com.sak.pqclibary.saber;
+package com.sak.pqclibrary.saber;
-import static com.sak.pqclibary.saber.Params.SABER_L;
-import static com.sak.pqclibary.saber.Params.SABER_N;
-import static com.sak.pqclibary.saber.Params.SABER_POLYCOINBYTES;
-import static com.sak.pqclibary.saber.Params.SABER_POLYVECBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_L;
+import static com.sak.pqclibrary.saber.Params.SABER_N;
+import static com.sak.pqclibrary.saber.Params.SABER_POLYCOINBYTES;
+import static com.sak.pqclibrary.saber.Params.SABER_POLYVECBYTES;
import com.github.aelstad.keccakj.core.KeccakSponge;
import com.github.aelstad.keccakj.fips202.Shake128;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/PolyMul.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/PolyMul.java
similarity index 97%
rename from app/src/main/java/com/sak/pqclibary/saber/PolyMul.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/PolyMul.java
index ef0c392..5d7ef0f 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/PolyMul.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/PolyMul.java
@@ -1,9 +1,9 @@
-package com.sak.pqclibary.saber;
+package com.sak.pqclibrary.saber;
-import static com.sak.pqclibary.saber.Params.KARATSUBA_N;
-import static com.sak.pqclibary.saber.Params.N_SB;
-import static com.sak.pqclibary.saber.Params.N_SB_RES;
-import static com.sak.pqclibary.saber.Params.SABER_N;
+import static com.sak.pqclibrary.saber.Params.KARATSUBA_N;
+import static com.sak.pqclibrary.saber.Params.N_SB;
+import static com.sak.pqclibrary.saber.Params.N_SB_RES;
+import static com.sak.pqclibrary.saber.Params.SABER_N;
import java.util.Arrays;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/Verify.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Verify.java
similarity index 93%
rename from app/src/main/java/com/sak/pqclibary/saber/Verify.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Verify.java
index f38b70a..63c1416 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/Verify.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/Verify.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.saber;
+package com.sak.pqclibrary.saber;
public class Verify {
diff --git a/app/src/main/java/com/sak/pqclibary/saber/models/EncapsulationModel.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/models/EncapsulationModel.java
similarity index 88%
rename from app/src/main/java/com/sak/pqclibary/saber/models/EncapsulationModel.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/models/EncapsulationModel.java
index be46b68..0d10bd0 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/models/EncapsulationModel.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/models/EncapsulationModel.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.saber.models;
+package com.sak.pqclibrary.saber.models;
public class EncapsulationModel {
private byte[] cipherText, ss;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/models/Keys.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/models/Keys.java
similarity index 90%
rename from app/src/main/java/com/sak/pqclibary/saber/models/Keys.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/models/Keys.java
index b2a6295..ff7f0b2 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/models/Keys.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/models/Keys.java
@@ -1,4 +1,4 @@
-package com.sak.pqclibary.saber.models;
+package com.sak.pqclibrary.saber.models;
public class Keys {
private byte[] pk,sk;
diff --git a/app/src/main/java/com/sak/pqclibary/saber/utils/Utils.java b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/utils/Utils.java
similarity index 79%
rename from app/src/main/java/com/sak/pqclibary/saber/utils/Utils.java
rename to PQCLibrary/src/main/java/com/sak/pqclibrary/saber/utils/Utils.java
index 8679275..2cc71d2 100644
--- a/app/src/main/java/com/sak/pqclibary/saber/utils/Utils.java
+++ b/PQCLibrary/src/main/java/com/sak/pqclibrary/saber/utils/Utils.java
@@ -1,12 +1,13 @@
-package com.sak.pqclibary.saber.utils;
+package com.sak.pqclibrary.saber.utils;
+import java.security.SecureRandom;
import java.util.Random;
public class Utils {
public static byte[] randomBytes(int len){
byte[] randomArray = new byte[len];
- Random random = new Random();
- random.nextBytes(randomArray);
+ SecureRandom secureRandom = new SecureRandom();
+ secureRandom.nextBytes(randomArray);
return randomArray;
}
public static byte[] shiftLeft(byte[] array, int shift) {
diff --git a/PQCLibrary/src/test/java/com/sak/pqclibrary/ExampleUnitTest.java b/PQCLibrary/src/test/java/com/sak/pqclibrary/ExampleUnitTest.java
new file mode 100644
index 0000000..6d1b02c
--- /dev/null
+++ b/PQCLibrary/src/test/java/com/sak/pqclibrary/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.sak.pqclibrary;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 58c583b..de7d57d 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,8 @@ PQCLibary pqcLibary = new PQCLibary("Algoritma_Etiketi"); // Anahtar Üretimi
Örnek Kullanım:
```java
-PQCLibary pqcLibary = new PQCLibary("Kyber_512"); // Anahtar Üretimi
+PQCLibary pqcLibary = new PQCLibary("Kyber_512"); // Algoritma Belirleme
+pqcLibary.KeyGen() // Anahtar Üretimi
EncapsulationModel enc = pqcLibary.Encapsulation(pqcLibary.pk); //Paketleme
byte[] sharedSecretKey = pqcLibary.Decapsulation(enc.getCipherText(),pqcLibary.sk); // Paket Çözme
```
diff --git a/app/build.gradle b/app/build.gradle
index 2519a4e..4a58aa0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,6 +15,7 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
+
buildTypes {
release {
minifyEnabled false
@@ -25,6 +26,9 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
+ buildFeatures{
+ viewBinding true
+ }
}
dependencies {
@@ -32,6 +36,7 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ implementation project(path: ':PQCLibrary')
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
diff --git a/app/src/main/java/com/sak/pqclibary/MainActivity.java b/app/src/main/java/com/sak/pqclibary/MainActivity.java
index 6f8ffaf..f072ab7 100644
--- a/app/src/main/java/com/sak/pqclibary/MainActivity.java
+++ b/app/src/main/java/com/sak/pqclibary/MainActivity.java
@@ -5,20 +5,36 @@
import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Trace;
import android.util.Log;
import android.view.View;
-import com.sak.pqclibary.kyber.kyberencryption.provider.Kyber1024KeyPairGenerator;
-import com.sak.pqclibary.kyber.kyberencryption.provider.KyberKeyPair;
-import com.sak.pqclibary.kyber.kyberencryption.provider.KyberProcess;
-import com.sak.pqclibary.kyber.kyberencryption.provider.KyberSecretKey;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.KyberParams;
-import com.sak.pqclibary.saber.Kem;
-import com.sak.pqclibary.saber.models.EncapsulationModel;
-import com.sak.pqclibary.saber.models.Keys;
-import com.sak.pqclibary.saber.utils.Utils;
+import com.sak.pqclibrary.PQCLibary;
+import com.sak.pqclibrary.ParameterSets;
+import com.sak.pqclibrary.saber.models.EncapsulationModel;
+import com.sak.pqclibrary.saber.utils.Utils;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Parameter;
+import java.util.Arrays;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
public class MainActivity extends AppCompatActivity {
+ public static int NTESTS = 100;
+ public static int C = 10;
+
+ boolean isRunning = false;
+ int SCHEMES = ParameterSets.LIGHT_SABER;
+
+
+ PQCLibary pqc;
+ EncapsulationModel enc;
+ byte[] sharedSecretKey;
+ long start, end, e;
+ long[] array = new long[NTESTS];
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
@@ -26,15 +42,88 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- PQCLibary pqcLibary = new PQCLibary("Kyber_1024");
- EncapsulationModel enc = pqcLibary.Encapsulation(pqcLibary.pk);
- byte[] sharedSecretKey = pqcLibary.Decapsulation(enc.getCipherText(),pqcLibary.sk);
- Log.d("AFD-AFD", Utils.hex(sharedSecretKey));
+ findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(isRunning){
+ for (int i = 0; i < NTESTS + C; i++) {
+ if (i < C) {
+ pqc = new PQCLibary(SCHEMES);
+ } else {
+ start = System.nanoTime();
+ pqc = new PQCLibary(SCHEMES);
+ end = System.nanoTime();
+ e = end - start;
+ array[i - C] = e;
+ }
+ }
+ Log.d("AFD-AFD keyGen: ", avg(array) / 1000 + "");
+ }
+ else
+ {
+ pqc = new PQCLibary(SCHEMES);
+ }
- }
+ }
+ });
+ findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (isRunning){
+ for (int i = 0; i < NTESTS + C; i++) {
+ if (i < C) {
+ enc = pqc.encapsulation(pqc.getPk());
+ } else {
+ start = System.nanoTime();
+ enc = pqc.encapsulation(pqc.getPk());
+ end = System.nanoTime();
+ e = end - start;
+ array[i - C] = e;
+ }
+ }
+ Log.d("AFD-AFD Encapsulation: ", avg(array) / 1000 + "");
+ }
+ else{
+ enc = pqc.encapsulation(pqc.getPk());
+ }
+ }
+ });
+
+ findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (isRunning){
+ for (int i = 0; i < NTESTS + C; i++) {
+ if (i < C) {
+ sharedSecretKey = pqc.decapsulation(enc.getCipherText(), pqc.getSk());
+ } else {
+ start = System.nanoTime();
+ sharedSecretKey = pqc.decapsulation(enc.getCipherText(), pqc.getSk());
+ end = System.nanoTime();
+
+ e = end - start;
+ array[i - C] = e;
+ }
+
+ }
+ Log.d("AFD-AFD Decapsulation: ", avg(array) / 1000 + "");
+ }
+ else{
+ sharedSecretKey = pqc.decapsulation(enc.getCipherText(), pqc.getSk());
+ }
+ }
+ });
+ }
+ public static double avg(long[] array) {
+ int sum = 0;
+ for (long l : array) {
+ sum += l;
+ }
+ return (double) sum / array.length;
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/sak/pqclibary/PQCLibary.java b/app/src/main/java/com/sak/pqclibary/PQCLibary.java
deleted file mode 100644
index de07327..0000000
--- a/app/src/main/java/com/sak/pqclibary/PQCLibary.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.sak.pqclibary;
-
-import android.os.Build;
-
-import androidx.annotation.RequiresApi;
-
-import com.sak.pqclibary.kyber.kyberencryption.provider.Kyber1024KeyPairGenerator;
-import com.sak.pqclibary.kyber.kyberencryption.provider.Kyber512KeyPairGenerator;
-import com.sak.pqclibary.kyber.kyberencryption.provider.Kyber768KeyPairGenerator;
-import com.sak.pqclibary.kyber.kyberencryption.provider.KyberKeyPair;
-import com.sak.pqclibary.kyber.kyberencryption.provider.KyberProcess;
-import com.sak.pqclibary.kyber.kyberencryption.provider.kyber.KyberParams;
-import com.sak.pqclibary.ntru.OWCPA;
-import com.sak.pqclibary.saber.Kem;
-import com.sak.pqclibary.saber.Params;
-import com.sak.pqclibary.saber.models.EncapsulationModel;
-import com.sak.pqclibary.saber.models.Keys;
-
-public class PQCLibary {
- byte[] pk;
- byte[] sk;
- byte[] cipherText;
- byte[] ssk1;
- byte[] rnd1 = new byte[KyberParams.paramsSymBytes];
- int algorithmType;
- @RequiresApi(api = Build.VERSION_CODES.O)
- public PQCLibary(String algorithmName) {
- String[] a = algorithmName.split("_");
- Keys keys = null;
-
- if (a.length==1){
- this.algorithmType= 1;
- new Params(3,8,4);
- keys = Kem.crypto_kem_keypair();
- }
- else if(a.length == 2){
- if(a[0].equalsIgnoreCase("Saber")){
- if(a[1].equalsIgnoreCase("Light")){
-
- new Params(2,10,3);
- }
- else if(a[1].equalsIgnoreCase("Fire")){
- new Params(4,6,6);
- }
- this.algorithmType = 1;
- keys = Kem.crypto_kem_keypair();
- }
- else if(a[0].equalsIgnoreCase("NTRU")){
- if(a[1].equalsIgnoreCase("509")){
-
- new com.sak.pqclibary.ntru.Params(509);
-
- }
- else if(a[1].equalsIgnoreCase("677")){
- new com.sak.pqclibary.ntru.Params(677);
- }
- else if(a[1].equalsIgnoreCase("821")){
- new com.sak.pqclibary.ntru.Params(821);
- }
- this.algorithmType = 2;
- keys = OWCPA.owcpa_keypair();
- }
-
- else if(a[0].equalsIgnoreCase("Kyber")){
- KyberKeyPair kk =null;
-
- if(a[1].equalsIgnoreCase("512")){
- kk = Kyber512KeyPairGenerator.generateKeys512();
- this.algorithmType = 3;
- }
- else if(a[1].equalsIgnoreCase("768")){
- kk = Kyber768KeyPairGenerator.generateKeys768();
- this.algorithmType = 4;
- }
- else if(a[1].equalsIgnoreCase("1024")){
- kk = Kyber1024KeyPairGenerator.generateKeys1024();
- this.algorithmType = 5;
- }
- keys = new Keys(kk.getKyberPublicKey(),kk.getKyberPrivateKey());
- }
- }
- this.pk = keys.getPk();
- this.sk = keys.getSk();
- }
-
- public EncapsulationModel Encapsulation(byte[] pk){
- EncapsulationModel enc;
- switch (algorithmType){
- case 1:
- enc = Kem.crypto_kem_enc(pk);
- break;
- case 2:
- enc = OWCPA.crypto_kem_enc(pk);
- break;
- case 3:
- enc = new EncapsulationModel(KyberProcess.encrypt512(rnd1,pk).getCipherText(),KyberProcess.encrypt512(rnd1,pk).getSecretKey());
- break;
- case 4:
- enc = new EncapsulationModel(KyberProcess.encrypt768(rnd1,pk).getCipherText(),KyberProcess.encrypt768(rnd1,pk).getSecretKey());
- break;
- case 5:
- enc = new EncapsulationModel(KyberProcess.encrypt1024(rnd1,pk).getCipherText(),KyberProcess.encrypt1024(rnd1,pk).getSecretKey());
- break;
- default:
- throw new IllegalStateException("Unexpected value: " + algorithmType);
- }
- return new EncapsulationModel(enc.getCipherText(),enc.getSs());
- }
-
-
-
- public byte[] Decapsulation(byte[] ct , byte[] sk){
- byte[] ssk2 ;
- switch (algorithmType){
- case 1:
- ssk2 = Kem.crypto_kem_dec(sk,ct);
- break;
- case 2 :
- ssk2 = OWCPA.crypto_kem_dec(ct,sk);
- break;
- case 3 :
- ssk2 = KyberProcess.decrypt512(ct,sk);
- break;
- case 4 :
- ssk2 = KyberProcess.decrypt768(ct,sk);
- break;
- case 5 :
- ssk2 = KyberProcess.decrypt1024(ct,sk);
- break;
- default:
- throw new IllegalStateException("Unexpected value: " + algorithmType);
- }
- return ssk2;
- }
-}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 8f1f67e..788be2b 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,4 +7,26 @@
android:gravity="center"
tools:context=".MainActivity">
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 0234a3a..2501869 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -16,3 +16,4 @@ dependencyResolutionManagement {
}
rootProject.name = "PQCLibary"
include ':app'
+include ':PQCLibrary'