Sajmon

Android_JNI_AES

May 11th, 2014
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <jni.h>
  4. #include <string.h>
  5. #include "Rijndael.h"
  6.  
  7. #define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
  8.  
  9. extern "C" {
  10.     JNIEXPORT jstring JNICALL
  11.     Java_sk_sajmon_osmz_Main_init( JNIEnv *env, jobject  obj );
  12.  
  13.     JNIEXPORT jbyteArray JNICALL
  14.     Java_sk_sajmon_osmz_Main_encode( JNIEnv *env, jobject obj, jstring key, jstring msg, jint size, jint method );
  15.  
  16.     JNIEXPORT jbyteArray JNICALL
  17.     Java_sk_sajmon_osmz_Main_decode( JNIEnv *env, jobject obj, jstring key, jstring encoded, jint size, jint method );
  18. }
  19.  
  20. JNIEXPORT jstring JNICALL
  21. Java_sk_sajmon_osmz_Main_init(JNIEnv *env, jobject obj ) {
  22.     const char* nativeString = "Library initialised";
  23.     return env->NewStringUTF(nativeString);
  24. }
  25.  
  26. JNIEXPORT jbyteArray JNICALL
  27. Java_sk_sajmon_osmz_Main_decode( JNIEnv *env, jobject obj, jstring key, jstring msg, jint size, jint method ) {
  28.  
  29.     // zakodujem text
  30.         CRijndael aes;
  31.         const char* mKey = env->GetStringUTFChars(key, JNI_FALSE);
  32.  
  33.         // nastavim kluc
  34.         aes.MakeKey(mKey, CRijndael::sm_chain0, 16, 16);
  35.  
  36.         char szDataIn1[size];
  37.         char szDataIn[size];
  38.         char szDataOut[size];
  39.  
  40.         memset(szDataIn, 0, size);
  41.         memset(szDataOut, 0, size);
  42.  
  43.         const char* temp = env->GetStringUTFChars(msg, JNI_FALSE);
  44.         char* nativeString = strdup(temp);
  45.  
  46.         strcpy(szDataIn1, nativeString);
  47.  
  48.         /*for (int j = 0; j < sizeof(temp); j++) {
  49.             szDataIn1[j] = temp[j];
  50.         }*/
  51.  
  52.         strcpy(szDataIn, szDataIn1);
  53.  
  54.         // ECB kodovanie
  55.         if (method == 0) {
  56.             memset(szDataOut, 0, size);
  57.             aes.Encrypt(szDataIn, szDataOut, size - 1, CRijndael::ECB);
  58.  
  59.             memset(szDataIn, 0, size);
  60.             aes.Decrypt(szDataOut, szDataIn, size - 1, CRijndael::ECB);
  61.         }
  62.  
  63.         if (method == 1) {
  64.             memset(szDataOut, 0, size);
  65.             aes.Encrypt(szDataIn, szDataOut, size - 1, CRijndael::CBC);
  66.  
  67.             memset(szDataIn, 0, size);
  68.             aes.Decrypt(szDataOut, szDataIn, size - 1, CRijndael::CBC);
  69.         }
  70.  
  71.         if (method == 2) {
  72.             memset(szDataOut, 0, size);
  73.             aes.Encrypt(szDataIn, szDataOut, size - 1, CRijndael::CFB);
  74.  
  75.             memset(szDataIn, 0, size);
  76.             aes.Decrypt(szDataOut, szDataIn, size - 1, CRijndael::CFB);
  77.         }
  78.  
  79.         // ulozim do pomocneho pola dekodovany text
  80.         int len = strlen(szDataIn);
  81.         char decodedText[len];
  82.  
  83.         for (int i = 0; i < len; i++) {
  84.             decodedText[i] = szDataIn[i];
  85.         }
  86.  
  87.         jbyteArray trackIDArray = env->NewByteArray(strlen(decodedText));
  88.         env->SetByteArrayRegion(trackIDArray, 0, strlen(decodedText), (const jbyte*) decodedText);
  89.  
  90.         return trackIDArray;
  91. }
  92.  
  93. JNIEXPORT jbyteArray JNICALL
  94. Java_sk_sajmon_osmz_Main_encode( JNIEnv *env, jobject  obj, jstring key, jstring msg, jint size, jint method ) {
  95.  
  96.     // zakodujem text
  97.     CRijndael aes;
  98.     const char* mKey = env->GetStringUTFChars(key, JNI_FALSE);
  99.  
  100.     // nastavim kluc
  101.     aes.MakeKey(mKey, CRijndael::sm_chain0, 16, 16);
  102.  
  103.     char szDataIn1[size];
  104.     char szDataIn[size];
  105.     char szDataOut[size];
  106.  
  107.     memset(szDataIn, 0, size);
  108.     memset(szDataOut, 0, size);
  109.  
  110.     const char* temp = env->GetStringUTFChars(msg, JNI_FALSE);
  111.     char* nativeString = strdup(temp);
  112.  
  113.     strcpy(szDataIn1, nativeString);
  114.  
  115.     /*for (int j = 0; j < sizeof(temp); j++) {
  116.         szDataIn1[j] = temp[j];
  117.     }*/
  118.  
  119.     strcpy(szDataIn, szDataIn1);
  120.  
  121.     // ECB kodovanie
  122.     if (method == 0) {
  123.         memset(szDataOut, 0, size);
  124.         aes.Encrypt(szDataIn1, szDataOut, size - 1, CRijndael::ECB);
  125.     }
  126.  
  127.     if (method == 1) {
  128.         memset(szDataOut, 0, size);
  129.         aes.Encrypt(szDataIn1, szDataOut, size - 1, CRijndael::CBC);
  130.     }
  131.  
  132.     if (method == 2) {
  133.         memset(szDataOut, 0, size);
  134.         aes.Encrypt(szDataIn1, szDataOut, size - 1, CRijndael::CFB);
  135.     }
  136.  
  137.     // ulozim do pomocneho pola zakodovany text
  138.     int len = strlen(szDataOut);
  139.     char encodedText[len];
  140.  
  141.     for (int i = 0; i < len; i++) {
  142.         encodedText[i] = szDataOut[i];
  143.     }
  144.  
  145.     jbyteArray trackIDArray = env->NewByteArray(strlen(encodedText));
  146.     env->SetByteArrayRegion(trackIDArray, 0, strlen(encodedText), (const jbyte*) encodedText);
  147.  
  148.     return trackIDArray;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment