JNI: utilize outputOffset when writing data to output buffer
parent
bbc9478f34
commit
a034cf797b
|
|
@ -193,7 +193,7 @@ Java_com_wolfssl_wolfcrypt_Aes_native_1update_1internal__ILjava_nio_ByteBuffer_2
|
|||
if (!aes || !input || !output) {
|
||||
ret = BAD_FUNC_ARG; /* NULL sanitizers */
|
||||
}
|
||||
else if (offset < 0 || length < 0) {
|
||||
else if (offset < 0 || length < 0 || outputOffset < 0) {
|
||||
ret = BAD_FUNC_ARG; /* signed sanizizers */
|
||||
}
|
||||
else if (((jlong)offset + (jlong)length) >
|
||||
|
|
@ -205,11 +205,13 @@ Java_com_wolfssl_wolfcrypt_Aes_native_1update_1internal__ILjava_nio_ByteBuffer_2
|
|||
ret = BUFFER_E; /* buffer overflow check */
|
||||
}
|
||||
else if (opmode == AES_ENCRYPTION) {
|
||||
ret = wc_AesCbcEncrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesCbcEncrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesCbcEncrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
}
|
||||
else {
|
||||
ret = wc_AesCbcDecrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesCbcDecrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesCbcDecrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
}
|
||||
|
||||
|
|
@ -223,8 +225,8 @@ Java_com_wolfssl_wolfcrypt_Aes_native_1update_1internal__ILjava_nio_ByteBuffer_2
|
|||
|
||||
LogStr("input[%u]: [%p]\n", (word32)length, input + offset);
|
||||
LogHex((byte*) input, offset, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output);
|
||||
LogHex((byte*) output, 0, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output + outputOffset);
|
||||
LogHex((byte*) output, outputOffset, length);
|
||||
#else
|
||||
throwNotCompiledInException(env);
|
||||
ret = NOT_COMPILED_IN;
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ Java_com_wolfssl_wolfcrypt_AesCtr_native_1update_1internal__Ljava_nio_ByteBuffer
|
|||
if (aes == NULL || input == NULL || output == NULL) {
|
||||
ret = BAD_FUNC_ARG;
|
||||
}
|
||||
else if (offset < 0 || length < 0) {
|
||||
else if (offset < 0 || length < 0 || outputOffset < 0) {
|
||||
ret = BAD_FUNC_ARG;
|
||||
}
|
||||
else if (((jlong)offset + (jlong)length) >
|
||||
|
|
@ -205,7 +205,8 @@ Java_com_wolfssl_wolfcrypt_AesCtr_native_1update_1internal__Ljava_nio_ByteBuffer
|
|||
ret = BUFFER_E; /* buffer overflow check */
|
||||
}
|
||||
else {
|
||||
ret = wc_AesCtrEncrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesCtrEncrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesCtrEncrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ Java_com_wolfssl_wolfcrypt_AesEcb_native_1update_1internal__ILjava_nio_ByteBuffe
|
|||
if (aes == NULL || input == NULL || output == NULL) {
|
||||
ret = BAD_FUNC_ARG;
|
||||
}
|
||||
else if (offset < 0 || length < 0) {
|
||||
else if (offset < 0 || length < 0 || outputOffset < 0) {
|
||||
ret = BAD_FUNC_ARG;
|
||||
}
|
||||
else if ((length % AES_BLOCK_SIZE) != 0) {
|
||||
|
|
@ -214,11 +214,13 @@ Java_com_wolfssl_wolfcrypt_AesEcb_native_1update_1internal__ILjava_nio_ByteBuffe
|
|||
ret = BUFFER_E; /* buffer overflow check */
|
||||
}
|
||||
else if (opmode == AES_ENCRYPTION) {
|
||||
ret = wc_AesEcbEncrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesEcbEncrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesEcbEncrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
}
|
||||
else {
|
||||
ret = wc_AesEcbDecrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesEcbDecrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesEcbDecrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
}
|
||||
|
||||
|
|
@ -232,8 +234,8 @@ Java_com_wolfssl_wolfcrypt_AesEcb_native_1update_1internal__ILjava_nio_ByteBuffe
|
|||
|
||||
LogStr("input[%u]: [%p]\n", (word32)length, input + offset);
|
||||
LogHex((byte*) input, offset, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output);
|
||||
LogHex((byte*) output, 0, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output + outputOffset);
|
||||
LogHex((byte*) output, outputOffset, length);
|
||||
#else
|
||||
throwNotCompiledInException(env);
|
||||
ret = NOT_COMPILED_IN;
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ Java_com_wolfssl_wolfcrypt_AesOfb_native_1update_1internal__ILjava_nio_ByteBuffe
|
|||
if (aes == NULL || input == NULL || output == NULL) {
|
||||
ret = BAD_FUNC_ARG;
|
||||
}
|
||||
else if (offset < 0 || length < 0) {
|
||||
else if (offset < 0 || length < 0 || outputOffset < 0) {
|
||||
ret = BAD_FUNC_ARG;
|
||||
}
|
||||
else if (((jlong)offset + (jlong)length) >
|
||||
|
|
@ -219,17 +219,20 @@ Java_com_wolfssl_wolfcrypt_AesOfb_native_1update_1internal__ILjava_nio_ByteBuffe
|
|||
ret = BUFFER_E; /* buffer overflow check */
|
||||
}
|
||||
else if (opmode == AES_ENCRYPTION) {
|
||||
ret = wc_AesOfbEncrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesOfbEncrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesOfbEncrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
}
|
||||
else {
|
||||
#ifdef HAVE_AES_DECRYPT
|
||||
ret = wc_AesOfbDecrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesOfbDecrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesOfbDecrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
#else
|
||||
/* If HAVE_AES_DECRYPT not defined, fall back to encrypt
|
||||
* (OFB mode uses same operation for both) */
|
||||
ret = wc_AesOfbEncrypt(aes, output, input + offset, length);
|
||||
ret = wc_AesOfbEncrypt(aes, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_AesOfbEncrypt(aes=%p, out, in, inSz) = %d\n", aes, ret);
|
||||
#endif
|
||||
}
|
||||
|
|
@ -244,8 +247,8 @@ Java_com_wolfssl_wolfcrypt_AesOfb_native_1update_1internal__ILjava_nio_ByteBuffe
|
|||
|
||||
LogStr("input[%u]: [%p]\n", (word32)length, input + offset);
|
||||
LogHex((byte*) input, offset, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output);
|
||||
LogHex((byte*) output, 0, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output + outputOffset);
|
||||
LogHex((byte*) output, outputOffset, length);
|
||||
#else
|
||||
throwNotCompiledInException(env);
|
||||
ret = NOT_COMPILED_IN;
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ Java_com_wolfssl_wolfcrypt_Des3_native_1update_1internal__ILjava_nio_ByteBuffer_
|
|||
if (!des || !input || !output) {
|
||||
ret = BAD_FUNC_ARG; /* NULL sanitizers */
|
||||
}
|
||||
else if (offset < 0 || length < 0) {
|
||||
else if (offset < 0 || length < 0 || outputOffset < 0) {
|
||||
ret = BAD_FUNC_ARG; /* signed sanizizers */
|
||||
}
|
||||
else if (((jlong)offset + (jlong)length) >
|
||||
|
|
@ -199,11 +199,13 @@ Java_com_wolfssl_wolfcrypt_Des3_native_1update_1internal__ILjava_nio_ByteBuffer_
|
|||
ret = BUFFER_E; /* buffer overflow check */
|
||||
}
|
||||
else if (opmode == DES_ENCRYPTION) {
|
||||
ret = wc_Des3_CbcEncrypt(des, output, input + offset, length);
|
||||
ret = wc_Des3_CbcEncrypt(des, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_Des3CbcEncrypt(des=%p, out, in, inSz) = %d\n", des, ret);
|
||||
}
|
||||
else {
|
||||
ret = wc_Des3_CbcDecrypt(des, output, input + offset, length);
|
||||
ret = wc_Des3_CbcDecrypt(des, output + outputOffset,
|
||||
input + offset, length);
|
||||
LogStr("wc_Des3CbcDecrypt(des=%p, out, in, inSz) = %d\n", des, ret);
|
||||
}
|
||||
|
||||
|
|
@ -217,8 +219,8 @@ Java_com_wolfssl_wolfcrypt_Des3_native_1update_1internal__ILjava_nio_ByteBuffer_
|
|||
|
||||
LogStr("input[%u]: [%p]\n", (word32)length, input + offset);
|
||||
LogHex((byte*) input, offset, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output);
|
||||
LogHex((byte*) output, 0, length);
|
||||
LogStr("output[%u]: [%p]\n", (word32)length, output + outputOffset);
|
||||
LogHex((byte*) output, outputOffset, length);
|
||||
#else
|
||||
throwNotCompiledInException(env);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue