Skip to content

Commit 876b063

Browse files
committed
fixup! Support derandomized key generation for ML-KEM
Signed-off-by: Spencer Wilson <[email protected]>
1 parent 0d3aa65 commit 876b063

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/main/c/KeyEncapsulation.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ JNIEXPORT jobject JNICALL Java_org_openquantumsafe_KeyEncapsulation_get_1KEM_1de
8585
jfieldID _length_shared_secret = (*env)->GetFieldID(env, cls, "length_shared_secret", "J");
8686
(*env)->SetLongField(env, _nativeKED, _length_shared_secret, (jlong) kem->length_shared_secret);
8787

88+
// long length_shared_secret;
89+
jfieldID _length_keypair_seed = (*env)->GetFieldID(env, cls, "length_keypair_seed", "J");
90+
(*env)->SetLongField(env, _nativeKED, _length_keypair_seed, (jlong) kem->length_keypair_seed);
91+
8892
return _nativeKED;
8993
}
9094

@@ -110,6 +114,30 @@ JNIEXPORT jint JNICALL Java_org_openquantumsafe_KeyEncapsulation_generate_1keypa
110114
return (rv_ == OQS_SUCCESS) ? 0 : -1;
111115
}
112116

117+
/*
118+
* Class: org_openquantumsafe_KeyEncapsulation
119+
* Method: generate_keypair
120+
* Signature: ([B[B)I
121+
*/
122+
JNIEXPORT jint JNICALL Java_org_openquantumsafe_KeyEncapsulation_generate_1keypair_1derand
123+
(JNIEnv *env, jobject obj, jbyteArray jpublic_key, jbyteArray jsecret_key, jbyteArray jseed)
124+
{
125+
jbyte *public_key_native = (*env)->GetByteArrayElements(env, jpublic_key, 0);
126+
jbyte *secret_key_native = (*env)->GetByteArrayElements(env, jsecret_key, 0);
127+
jbyte *seed_native = (*env)->GetByteArrayElements(env, jseed, 0);
128+
129+
// Get pointer to KEM
130+
OQS_KEM *kem = (OQS_KEM *) getHandle(env, obj, "native_kem_handle_");
131+
132+
// Invoke liboqs KEM keypair generation function
133+
OQS_STATUS rv_ = OQS_KEM_keypair_derand(kem, (uint8_t*) public_key_native, (uint8_t*) secret_key_native, (uint8_t*) seed_native);
134+
135+
(*env)->ReleaseByteArrayElements(env, jpublic_key, public_key_native, 0);
136+
(*env)->ReleaseByteArrayElements(env, jsecret_key, secret_key_native, 0);
137+
(*env)->ReleaseByteArrayElements(env, jseed, seed_native, JNI_ABORT);
138+
return (rv_ == OQS_SUCCESS) ? 0 : -1;
139+
}
140+
113141
/*
114142
* Class: org_openquantumsafe_KeyEncapsulation
115143
* Method: encap_secret

0 commit comments

Comments
 (0)