@@ -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