forked from RNCryptor/RNCryptor-C
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJRNCryptor.cpp
More file actions
70 lines (46 loc) · 1.86 KB
/
JRNCryptor.cpp
File metadata and controls
70 lines (46 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "com_nigelgrange_jrncryptor_JRNCryptor.h"
#include <ctype.h>
#include <string.h>
extern "C" {
#include "rncryptor_c.h"
}
JNIEXPORT jbyteArray JNICALL Java_com_nigelgrange_jrncryptor_JRNCryptor_encryptWithPassword
(JNIEnv *env, jobject obj, jbyteArray dataIn, jstring password) {
const char* passwordStr = env->GetStringUTFChars(password, 0);
int outDataLen = 0;
char errbuf[BUFSIZ];
int dataLen = env->GetArrayLength(dataIn);
unsigned char* dataBuf = (unsigned char*)malloc(dataLen);
env->GetByteArrayRegion(dataIn, 0, dataLen, reinterpret_cast<jbyte*>(dataBuf));
unsigned char* encrypted = rncryptorc_encrypt_data_with_password(dataBuf, dataLen,
RNCRYPTOR3_KDF_ITER,
passwordStr,
strlen(passwordStr),
&outDataLen,
errbuf,sizeof(errbuf)-1);
free(dataBuf);
jbyteArray ret = env->NewByteArray(outDataLen);
env->SetByteArrayRegion(ret, 0, outDataLen, reinterpret_cast<jbyte*>(encrypted));
free(encrypted);
return ret;
}
JNIEXPORT jbyteArray JNICALL Java_com_nigelgrange_jrncryptor_JRNCryptor_decryptWithPassword
(JNIEnv *env, jobject obj, jbyteArray dataIn, jstring password) {
const char* passwordStr = env->GetStringUTFChars(password, 0);
int outDataLen = 0;
char errbuf[BUFSIZ];
int dataLen = env->GetArrayLength(dataIn);
unsigned char* dataBuf = (unsigned char*)malloc(dataLen);
env->GetByteArrayRegion(dataIn, 0, dataLen, reinterpret_cast<jbyte*>(dataBuf));
unsigned char* decrypted = rncryptorc_decrypt_data_with_password(dataBuf, dataLen,
RNCRYPTOR3_KDF_ITER,
passwordStr,
strlen(passwordStr),
&outDataLen,
errbuf,sizeof(errbuf)-1);
free(dataBuf);
jbyteArray ret = env->NewByteArray(outDataLen);
env->SetByteArrayRegion(ret, 0, outDataLen, reinterpret_cast<jbyte*>(decrypted));
free(decrypted);
return ret;
}