Revert as its unstable anyway.

This commit is contained in:
md_5
2014-02-12 18:02:02 +11:00
parent 3f7850dc5a
commit 0b7789035f
5 changed files with 54 additions and 71 deletions

View File

@@ -3,59 +3,54 @@
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BYTE unsigned char
jlong Java_net_md_15_bungee_NativeCipherImpl_initKey
jlong Java_net_md_15_bungee_NativeCipherImpl_init
(JNIEnv* env, jobject obj, jbyteArray key)
{
AES_KEY *aes_key = malloc(sizeof(AES_KEY));
jboolean isFieldCopy;
BYTE *key_bytes = (BYTE*)(*env)->GetByteArrayElements(env, key, &isFieldCopy);
jboolean isKeyCopy;
BYTE *key_bytes = (BYTE*)(*env)->GetByteArrayElements(env, key, &isKeyCopy);
int key_length = (*env)->GetArrayLength(env, key) * 8; // in bits
AES_set_encrypt_key(key_bytes, key_length, aes_key);
if (isFieldCopy) {
if (isKeyCopy) {
(*env)->ReleaseByteArrayElements(env, key, (jbyte*)key_bytes, JNI_ABORT);
}
return (long) aes_key;
}
jlong Java_net_md_15_bungee_NativeCipherImpl_initIV
(JNIEnv* env, jobject obj, jbyteArray iv)
{
jboolean isFieldCopy;
BYTE *iv_bytes = (BYTE*)(*env)->GetByteArrayElements(env, iv, &isFieldCopy);
int iv_length = (*env)->GetArrayLength(env, iv);
BYTE* jni_iv = malloc(iv_length);
memcpy(jni_iv, iv_bytes, iv_length);
if (isFieldCopy) {
(*env)->ReleaseByteArrayElements(env, iv, (jbyte*)iv_bytes, JNI_ABORT);
}
return (long) jni_iv;
}
void Java_net_md_15_bungee_NativeCipherImpl_free
(JNIEnv* env, jobject obj, jlong key, jlong iv)
(JNIEnv* env, jobject obj, jlong key)
{
free((AES_KEY*)key);
free((BYTE*)iv);
}
void Java_net_md_15_bungee_NativeCipherImpl_cipher
(JNIEnv* env, jobject obj, jboolean forEncryption, jlong key, jlong iv, jlong in, jlong out, jint length)
(JNIEnv* env, jobject obj, jboolean forEncryption, jlong key, jbyteArray iv, jlong in, jlong out, jint length)
{
AES_KEY *aes_key = (AES_KEY*)key;
size_t buffer_length = (size_t) length;
BYTE *input = (BYTE*) in;
BYTE *output = (BYTE*) out;
jboolean isCopy;
BYTE *iv_bytes = (BYTE*)(*env)->GetByteArrayElements(env, iv, &isCopy);
AES_cfb8_encrypt(
(BYTE*) in, // input buffer
(BYTE*) out, // output buffer
(size_t) length, // readable bytes
(AES_KEY*) key, // encryption key
(BYTE*) iv, // IV
input, // input buffer
output, // output buffer
buffer_length, // readable bytes
aes_key, // encryption key
iv_bytes, // IV
NULL, // not needed
forEncryption ? AES_ENCRYPT : AES_DECRYPT // encryption mode
);
// IV has changed, let's copy it back
if (isCopy) {
(*env)->ReleaseByteArrayElements(env, iv, (jbyte*)iv_bytes, 0);
}
}

View File

@@ -9,17 +9,10 @@ extern "C" {
#endif
/*
* Class: net_md_5_bungee_NativeCipherImpl
* Method: init_key
* Method: init
* Signature: ([B)J
*/
JNIEXPORT jlong JNICALL Java_net_md_15_bungee_NativeCipherImpl_initKey
(JNIEnv *, jobject, jbyteArray);
/*
* Class: net_md_5_bungee_NativeCipherImpl
* Method: init_iv
* Signature: ([B)J
*/
JNIEXPORT jlong JNICALL Java_net_md_15_bungee_NativeCipherImpl_initIV
JNIEXPORT jlong JNICALL Java_net_md_15_bungee_NativeCipherImpl_init
(JNIEnv *, jobject, jbyteArray);
/*
@@ -28,7 +21,7 @@ JNIEXPORT jlong JNICALL Java_net_md_15_bungee_NativeCipherImpl_initIV
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_net_md_15_bungee_NativeCipherImpl_free
(JNIEnv *, jobject, jlong, jlong);
(JNIEnv *, jobject, jlong);
/*
* Class: net_md_5_bungee_NativeCipherImpl
@@ -36,10 +29,9 @@ JNIEXPORT void JNICALL Java_net_md_15_bungee_NativeCipherImpl_free
* Signature: (ZJ[BJJI)V
*/
JNIEXPORT void JNICALL Java_net_md_15_bungee_NativeCipherImpl_cipher
(JNIEnv *, jobject, jboolean, jlong, jlong, jlong, jlong, jint);
(JNIEnv *, jobject, jboolean, jlong, jbyteArray, jlong, jlong, jint);
#ifdef __cplusplus
}
#endif
#endif