ML-KEM's Kotlin Implementation
APACHE-2.0 License
Bot releases are visible (Hide)
Published by ronhombre 9 months ago
UNOPTIMIZED VERSION
Kotlin
val aliceKeys = KyberKeyGenerator.generate(KyberParameter.ML_KEM_512)
val bobKeys = KyberKeyGenerator.generate(KyberParameter.ML_KEM_512)
val aliceAgreement = KyberAgreement(aliceKeys)
val bobAgreement = KyberAgreement(bobKeys)
val encapsResult = aliceAgreement.encapsulate(bobAgreement.keypair.encapsulationKey)
val decapsSecretKey = bobAgreement.decapsulate(encapsResult.cipherText)
println(encapsResult.secretKey.contentToString())
println(decapsSecretKey.contentToString())
Java
KyberKEMKeyPair aliceKeys = KyberKeyGenerator.generate(KyberParameter.ML_KEM_512);
KyberKEMKeyPair bobKeys = KyberKeyGenerator.generate(KyberParameter.ML_KEM_512);
KyberAgreement aliceAgreement = new KyberAgreement(aliceKeys);
KyberAgreement bobAgreement = new KyberAgreement(bobKeys);
KyberEncapsulationResult encapsResult = aliceAgreement.encapsulate(bobAgreement.getKeypair().getEncapsulationKey());
byte[] decapsSecretKey = bobAgreement.decapsulate(encapsResult.getCipherText());
System.out.println(Arrays.toString(encapsResult.getSecretKey()));
System.out.println(Arrays.toString(decapsSecretKey));
Output:
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
}
Add to libs/
folder
dependencies {
implementation("asia.hombre:kyber:0.2.6")
}
Published by ronhombre 9 months ago
UNOPTIMIZED VERSION
val aliceKeys = KyberKeyGenerator.generate(KyberParameter.ML_KEM_512)
val bobKeys = KyberKeyGenerator.generate(KyberParameter.ML_KEM_512)
val aliceAgreement = KyberAgreement(aliceKeys)
val bobAgreement = KyberAgreement(bobKeys)
val encapsResult = aliceAgreement.encapsulate(bobAgreement.keypair.encapsulationKey)
val decapsSecretKey = bobAgreement.decapsulate(encapsResult.cipherText)
println(encapsResult.secretKey.contentToString())
println(decapsSecretKey.contentToString())
Output:
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
}
Add to libs/
folder
dependencies {
implementation("asia.hombre:kyber:0.2.5")
}
Published by ronhombre 9 months ago
DEVELOPER+UNOPTIMIZED VERSION
Virtually identical with v0.2.3.
val aliceKeys = KyberKeyPairGenerator().generate(KyberParameter.ML_KEM_512)
val bobKeys = KyberKeyPairGenerator().generate(KyberParameter.ML_KEM_512)
val aliceAgreement = KeyAgreement(aliceKeys)
val bobAgreement = KeyAgreement(bobKeys)
val encapsResult = aliceAgreement.encapsulate(bobAgreement.keypair.encapsulationKey)
val decapsSecretKey = bobAgreement.decapsulate(encapsResult.cipherText)
println(encapsResult.secretKey.contentToString())
println(decapsSecretKey.contentToString())
Output:
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
}
Add to libs/
folder
Published by ronhombre 9 months ago
DEVELOPER+UNOPTIMIZED VERSION
val aliceKeys = KyberKeyPairGenerator().generate(KyberParameter.ML_KEM_512)
val bobKeys = KyberKeyPairGenerator().generate(KyberParameter.ML_KEM_512)
val aliceAgreement = KeyAgreement(aliceKeys)
val bobAgreement = KeyAgreement(bobKeys)
val encapsResult = aliceAgreement.encapsulate(bobAgreement.keypair.encapsulationKey)
val decapsSecretKey = bobAgreement.decapsulate(encapsResult.cipherText)
println(encapsResult.secretKey.contentToString())
println(decapsSecretKey.contentToString())
Output:
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
[1, -123, 89, 94, -70, -97, -54, -58, -82, -10, -92, 10, -85, 115, -61, 85, 33, -109, 66, 71, -76, 86, -19, -37, 28, 66, 56, 72, -101, -56, -58, 22]
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
}
Add to libs/
folder