@@ -133,35 +133,46 @@ JNIEXPORT jbyteArray JNICALL Java_org_hsbp_androsphinx_Sodium_cryptoSignDetached
133133 return result ;
134134}
135135
136- JNIEXPORT jbyteArray JNICALL Java_org_hsbp_androsphinx_Sodium_cryptoSecretboxEasy (JNIEnv * env , jobject ignore , jbyteArray key , jbyteArray msg ) {
136+ JNIEXPORT jbyteArray JNICALL Java_org_hsbp_androsphinx_Sodium_cryptoAeadXchachaPoly1305IetfEasy (JNIEnv * env , jobject ignore , jbyteArray msg , jbyteArray ad , jbyteArray key ) {
137137 jbyte * bufferPtrKey = (* env )-> GetByteArrayElements (env , key , NULL );
138138 jbyte * bufferPtrMsg = (* env )-> GetByteArrayElements (env , msg , NULL );
139+ jbyte * bufferPtrAd = (* env )-> GetByteArrayElements (env , ad , NULL );
139140 jsize msgLen = (* env )-> GetArrayLength (env , msg );
141+ jsize adLen = (* env )-> GetArrayLength (env , ad );
140142
141- jbyteArray result = (* env )-> NewByteArray (env , crypto_secretbox_NONCEBYTES + crypto_secretbox_MACBYTES + msgLen );
143+ jbyteArray result = (* env )-> NewByteArray (env , crypto_aead_xchacha20poly1305_ietf_NPUBBYTES + msgLen + crypto_aead_xchacha20poly1305_ietf_ABYTES );
142144 jbyte * bufferPtrResult = (* env )-> GetByteArrayElements (env , result , NULL );
143145
144- randombytes_buf (bufferPtrResult , crypto_secretbox_NONCEBYTES );
145- crypto_secretbox_easy (bufferPtrResult + crypto_secretbox_NONCEBYTES , bufferPtrMsg , msgLen , bufferPtrResult , bufferPtrKey );
146+ randombytes_buf (bufferPtrResult , crypto_aead_xchacha20poly1305_ietf_NPUBBYTES );
146147
147- (* env )-> ReleaseByteArrayElements (env , result , bufferPtrResult , 0 );
148+ int sodium_result = crypto_aead_xchacha20poly1305_ietf_encrypt (bufferPtrResult + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES ,
149+ NULL , bufferPtrMsg , msgLen , bufferPtrAd , adLen , NULL , bufferPtrResult , bufferPtrKey );
150+
151+ (* env )-> ReleaseByteArrayElements (env , result , bufferPtrResult , sodium_result ? JNI_ABORT : 0 );
152+ (* env )-> ReleaseByteArrayElements (env , ad , bufferPtrAd , JNI_ABORT );
148153 (* env )-> ReleaseByteArrayElements (env , msg , bufferPtrMsg , JNI_ABORT );
149154 (* env )-> ReleaseByteArrayElements (env , key , bufferPtrKey , JNI_ABORT );
150155
151- return result ;
156+ return sodium_result ? NULL : result ;
152157}
153158
154- JNIEXPORT jbyteArray JNICALL Java_org_hsbp_androsphinx_Sodium_cryptoSecretboxOpenEasy (JNIEnv * env , jobject ignore , jbyteArray key , jbyteArray msg ) {
159+ JNIEXPORT jbyteArray JNICALL Java_org_hsbp_androsphinx_Sodium_cryptoAeadXchachaPoly1305IetfOpenEasy (JNIEnv * env , jobject ignore , jbyteArray msg , jbyteArray ad , jbyteArray key ) {
155160 jbyte * bufferPtrKey = (* env )-> GetByteArrayElements (env , key , NULL );
156161 jbyte * bufferPtrMsg = (* env )-> GetByteArrayElements (env , msg , NULL );
162+ jbyte * bufferPtrAd = (* env )-> GetByteArrayElements (env , ad , NULL );
157163 jsize msgLen = (* env )-> GetArrayLength (env , msg );
164+ jsize adLen = (* env )-> GetArrayLength (env , ad );
158165
159- jbyteArray result = (* env )-> NewByteArray (env , msgLen - (crypto_secretbox_NONCEBYTES + crypto_secretbox_MACBYTES ));
166+ jbyteArray result = (* env )-> NewByteArray (env , msgLen - (crypto_aead_xchacha20poly1305_ietf_NPUBBYTES + crypto_aead_xchacha20poly1305_ietf_ABYTES ));
160167 jbyte * bufferPtrResult = (* env )-> GetByteArrayElements (env , result , NULL );
161168
162- int sodium_result = crypto_secretbox_open_easy (bufferPtrResult , bufferPtrMsg + crypto_secretbox_NONCEBYTES , msgLen - crypto_secretbox_NONCEBYTES , bufferPtrMsg , bufferPtrKey );
169+ int sodium_result = crypto_aead_xchacha20poly1305_ietf_decrypt (bufferPtrResult ,
170+ NULL , NULL , bufferPtrMsg + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES ,
171+ msgLen - crypto_aead_xchacha20poly1305_ietf_NPUBBYTES ,
172+ bufferPtrAd , adLen , bufferPtrMsg , bufferPtrKey );
163173
164174 (* env )-> ReleaseByteArrayElements (env , result , bufferPtrResult , sodium_result ? JNI_ABORT : 0 );
175+ (* env )-> ReleaseByteArrayElements (env , ad , bufferPtrAd , JNI_ABORT );
165176 (* env )-> ReleaseByteArrayElements (env , msg , bufferPtrMsg , JNI_ABORT );
166177 (* env )-> ReleaseByteArrayElements (env , key , bufferPtrKey , JNI_ABORT );
167178
0 commit comments