JNI: Rng changes from code review

pull/2/merge
Chris Conlon 2017-03-17 14:17:29 -06:00
parent 9e292725f7
commit f274fdce55
3 changed files with 52 additions and 36 deletions

View File

@ -36,18 +36,18 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_freeRng
/*
* Class: com_wolfssl_wolfcrypt_Rng
* Method: rngGenerateBlock
* Signature: (Ljava/nio/ByteBuffer;J)V
* Signature: (Ljava/nio/ByteBuffer;II)V
*/
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock__Ljava_nio_ByteBuffer_2J
(JNIEnv *, jobject, jobject, jlong);
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock__Ljava_nio_ByteBuffer_2II
(JNIEnv *, jobject, jobject, jint, jint);
/*
* Class: com_wolfssl_wolfcrypt_Rng
* Method: rngGenerateBlock
* Signature: ([BJ)V
* Signature: ([B)V
*/
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock___3BJ
(JNIEnv *, jobject, jbyteArray, jlong);
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock___3B
(JNIEnv *, jobject, jbyteArray);
#ifdef __cplusplus
}

View File

@ -54,9 +54,6 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_initRng
int ret = 0;
RNG* rng = (RNG*) getNativeStruct(env, class);
if (!rng)
throwWolfCryptExceptionFromError(env, BAD_FUNC_ARG);
ret = wc_InitRng(rng);
if (ret != 0)
throwWolfCryptExceptionFromError(env, ret);
@ -76,9 +73,6 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_freeRng
int ret = 0;
RNG* rng = (RNG*) getNativeStruct(env, class);
if (!rng)
throwWolfCryptExceptionFromError(env, BAD_FUNC_ARG);
ret = wc_FreeRng(rng);
if (ret != 0)
throwWolfCryptExceptionFromError(env, ret);
@ -90,8 +84,8 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_freeRng
#endif
}
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock__Ljava_nio_ByteBuffer_2J
(JNIEnv* env, jobject class, jobject buf_buffer, jlong bufSz)
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock__Ljava_nio_ByteBuffer_2II
(JNIEnv* env, jobject class, jobject buf_buffer, jint position, jint sz)
{
#ifndef WC_NO_RNG
@ -99,33 +93,33 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock__Ljava_ni
RNG* rng = (RNG*) getNativeStruct(env, class);
byte* buf = getDirectBufferAddress(env, buf_buffer);
if (!rng || !buf)
if (!buf) {
throwWolfCryptExceptionFromError(env, BAD_FUNC_ARG);
ret = wc_RNG_GenerateBlock(rng, buf, bufSz);
if (ret != 0)
throwWolfCryptExceptionFromError(env, ret);
} else {
ret = wc_RNG_GenerateBlock(rng, buf + position, sz);
if (ret != 0)
throwWolfCryptExceptionFromError(env, ret);
}
LogStr("wc_RNG_GenerateBlock(rng=%p, buf, bufSz) = %d\n", rng, ret);
LogStr("output[%u]: [%p]\n", (word32)bufSz, buf);
LogHex(buf, bufSz);
LogStr("wc_RNG_GenerateBlock(rng=%p, buf, sz) = %d\n", rng, ret);
LogStr("output[%u]: [%p]\n", (word32)sz, buf);
LogHex(buf, sz);
#else
throwNotCompiledInException(env);
#endif
}
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock___3BJ
(JNIEnv* env, jobject class, jbyteArray buf_buffer, jlong bufSz)
JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Rng_rngGenerateBlock___3B
(JNIEnv* env, jobject class, jbyteArray buf_buffer)
{
#ifndef WC_NO_RNG
int ret = 0;
RNG* rng = (RNG*) getNativeStruct(env, class);
byte* buf = getByteArray(env, buf_buffer);
if (!rng || !buf)
throwWolfCryptExceptionFromError(env, BAD_FUNC_ARG);
word32 bufSz = getByteArrayLength(env, buf_buffer);
ret = wc_RNG_GenerateBlock(rng, buf, bufSz);
if (ret != 0)

View File

@ -23,6 +23,8 @@ package com.wolfssl.wolfcrypt;
import java.nio.ByteBuffer;
import javax.crypto.ShortBufferException;
/**
* Wrapper for the native WolfCrypt Rng implementation.
*
@ -38,10 +40,10 @@ public class Rng extends NativeStruct {
/* native wrappers called by public functions below */
private native void initRng();
private native void freeRng();
private native void rngGenerateBlock(ByteBuffer buf, long bufSz);
private native void rngGenerateBlock(byte[] buf, long bufSz);
private native void rngGenerateBlock(ByteBuffer buf, int position, int sz);
private native void rngGenerateBlock(byte[] buf);
public void init() throws IllegalStateException {
public void init() {
if (state == WolfCryptState.UNINITIALIZED) {
initRng();
@ -52,7 +54,7 @@ public class Rng extends NativeStruct {
}
}
public void free() throws IllegalStateException {
public void free() {
if (state == WolfCryptState.INITIALIZED) {
freeRng();
@ -63,22 +65,42 @@ public class Rng extends NativeStruct {
}
}
public void generateBlock(ByteBuffer buf, long bufSz)
throws IllegalStateException {
public void generateBlock(ByteBuffer buf) {
if (state == WolfCryptState.INITIALIZED) {
rngGenerateBlock(buf, bufSz);
rngGenerateBlock(buf, buf.position(), buf.remaining());
buf.position(buf.position() + buf.remaining());
} else {
throw new IllegalStateException(
"Object must be initialized before use");
}
}
public void generateBlock(byte[] buf, long bufSz)
throws IllegalStateException {
public void generateBlock(byte[] buf) {
if (state == WolfCryptState.INITIALIZED) {
rngGenerateBlock(buf, bufSz);
rngGenerateBlock(buf);
} else {
throw new IllegalStateException(
"Object must be initialized before use");
}
}
public byte[] generateBlock(int size) {
if (state == WolfCryptState.INITIALIZED) {
byte[] buffer = new byte[size];
rngGenerateBlock(buffer);
return buffer;
} else {
throw new IllegalStateException(
"Object must be initialized before use");