@@ -3096,16 +3096,6 @@ static jbyteArray NativeCrypto_SLHDSA_SHA2_128S_sign(JNIEnv* env, jclass, jbyteA
30963096 return nullptr;
30973097 }
30983098
3099- uint8_t result[SLHDSA_SHA2_128S_SIGNATURE_BYTES];
3100- if (!SLHDSA_SHA2_128S_sign(result,
3101- reinterpret_cast<const unsigned char*>(privateKeyArray.get()),
3102- reinterpret_cast<const unsigned char*>(dataArray.get()), dataLen,
3103- /* context */ NULL, /* context_len */ 0)) {
3104- JNI_TRACE("SLHDSA_SHA2_128S_sign failed");
3105- conscrypt::jniutil::throwExceptionFromBoringSSLError(env, "SLHDSA_SHA2_128S_sign");
3106- return nullptr;
3107- }
3108-
31093099 ScopedLocalRef<jbyteArray> resultRef(
31103100 env, env->NewByteArray(static_cast<jsize>(SLHDSA_SHA2_128S_SIGNATURE_BYTES)));
31113101 if (resultRef.get() == nullptr) {
@@ -3116,7 +3106,16 @@ static jbyteArray NativeCrypto_SLHDSA_SHA2_128S_sign(JNIEnv* env, jclass, jbyteA
31163106 if (resultArray.get() == nullptr) {
31173107 return nullptr;
31183108 }
3119- memcpy(resultArray.get(), result, SLHDSA_SHA2_128S_SIGNATURE_BYTES);
3109+
3110+ if (!SLHDSA_SHA2_128S_sign(reinterpret_cast<uint8_t*>(resultArray.get()),
3111+ reinterpret_cast<const unsigned char*>(privateKeyArray.get()),
3112+ reinterpret_cast<const unsigned char*>(dataArray.get()), dataLen,
3113+ /* context */ NULL, /* context_len */ 0)) {
3114+ JNI_TRACE("SLHDSA_SHA2_128S_sign failed");
3115+ conscrypt::jniutil::throwExceptionFromBoringSSLError(env, "SLHDSA_SHA2_128S_sign");
3116+ return nullptr;
3117+ }
3118+
31203119 return resultRef.release();
31213120}
31223121
@@ -3174,18 +3173,33 @@ static jboolean NativeCrypto_X25519(JNIEnv* env, jclass, jbyteArray outArray,
31743173 pubkeyArray);
31753174 return JNI_FALSE;
31763175 }
3176+ if (out.size() != 32) {
3177+ conscrypt::jniutil::throwException(env, "java/lang/IllegalArgumentException",
3178+ "Output array length != 32");
3179+ return JNI_FALSE;
3180+ }
31773181
31783182 ScopedByteArrayRO privkey(env, privkeyArray);
31793183 if (privkey.get() == nullptr) {
31803184 JNI_TRACE("X25519(%p) => privkey == null", outArray);
31813185 return JNI_FALSE;
31823186 }
3187+ if (privkey.size() != 32) {
3188+ conscrypt::jniutil::throwException(env, "java/lang/IllegalArgumentException",
3189+ "Private key array length != 32");
3190+ return JNI_FALSE;
3191+ }
31833192
31843193 ScopedByteArrayRO pubkey(env, pubkeyArray);
31853194 if (pubkey.get() == nullptr) {
31863195 JNI_TRACE("X25519(%p) => pubkey == null", outArray);
31873196 return JNI_FALSE;
31883197 }
3198+ if (pubkey.size() != 32) {
3199+ conscrypt::jniutil::throwException(env, "java/lang/IllegalArgumentException",
3200+ "Public key array length != 32");
3201+ return JNI_FALSE;
3202+ }
31893203
31903204 if (X25519(reinterpret_cast<uint8_t*>(out.get()),
31913205 reinterpret_cast<const uint8_t*>(privkey.get()),
0 commit comments