Basically I have 2 implementations of a C function "encrypt" which I call from python using ctypes and java using JNI. I've been told to take the two dynamic libraries that were used for java and python, and combine them into a static library that can be called from both. To clarify, here's the C function implementation for java using JNI:
#include "jniTest.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_jniTest_passBytes
(JNIEnv *env, jclass cls, jbyteArray array) {
unsigned char *buffer = (*env)->GetByteArrayElements(env, array, NULL);
jsize size = (*env)->GetArrayLength(env,array);
for(int i=0; i<size; i++){
buffer[i] += 1;
printf("%c",buffer[i]);
}
(*env)->ReleaseByteArrayElements(env, array, buffer, 0);
}
So the function takes in a byte array and increments each byte by 1 then returns each element of the new byte array. Here's the java side:
class jniTest{
public static native void passBytes(byte[] bytes);
static{
System.loadLibrary("encrypter");
{
public static void main(String[] args){
Tester tester = new Tester();
byte[] b = "hello";
tester.passBytes(b);
}
}
The python implementation of the C function is the exact same, just not using all that JNI syntax:
#include <stdio.h>
void encrypt(int size, unsigned char *buffer);
void encrypt(int size, unsigned char *buffer){
for(int i=0; i < size; i++){
buffer[i]+=1;
printf("%c", buffer[i]);
}
}
And the python side:
import ctypes
encryptPy = ctypes.CDLL('/home/aradhak/Documents/libencrypt.so')
hello = "hello"
byteArr = bytearray(hello)
rawBytes = (ctyes_c.ubyte*len(byteArr)(*(byteArr))
encryptPy.encrypt(len(byteArr), rawBytes)
As you can see, the C function for python and java do the exact same thing (few minor differences). They take in a byte array, increment each byte by 1, and print each incremented byte. I just need to combine these two C libraries and combine them into a single static library which can be accessed from both python AND java. Is this possible? Thanks.