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"> + +