Cómo definir un mapa de tipos de swig para devolver caracteres sin firmar * a java

Tengo una aplicación Java que llama a una biblioteca c para realizar funciones criptográficas. Esta es una biblioteca personalizada implementada en c que necesitamos usar desde algunos programas de Java. Necesito una forma de definir un mapa de tipo SWIG que me permita llamar a una función que pasa bytearray desde Java y tratarlo como un puntero de carácter sin signo en la función C, donde la función c llena los datos y los devuelve a java

Extracto de mi presente archivo de interfaz infeliz es el siguiente

%module  CryptoFacade

%pointer_functions(int, intp);
%pointer_functions(unsigned char, unsigned_charp);

int enCrypt(char* clearText, int clearLen,unsigned char* retCipherText, int *retCipherLen);

Y un extracto de mi infeliz código de Java es el siguiente. En el código a continuación, esperaba que la función de llamada a enCrypt me diera un búfer, pero me da un "corto" según el código generado. (Ver comentarios en el código)

class MainLoader {
static {
     System.loadLibrary("dccasecuJ"); //Load my crypto library
}

 public static void main(String[] args) {

 // Define the parameters to be passed by reference 
 SWIGTYPE_p_int retCipherLen=CryptoFacade.new_intp();
 SWIGTYPE_p_unsigned_char retCipherText =
            CryptoFacade.new_unsigned_charp();

CryptoFacade myFacade=new CryptoFacade();   

// Call crypto library function. First two are value parameters, next two are return
myFacade.enCrypt("STRING-TO-ENCRYPT", 17, retCipherText, retCipherLen);

// The length I get back in fourth parameter is just fine 
int gotLen= CryptoFacade.intp_value(retCipherLen); 

//The value I get for the Ciphertext though is a "short" ... no good 
// I need a byte[] in java that has the ciphertext
short gotText= CryptoFacade.unsigned_charp_value(retCipherText);

Supongo que debería cambiar la definición de mi interfaz a algo como a continuación, donde hago que mi tercer parámetro sea jbytearray y luego tengo que implementar un mapa de tipo que copiará el contenido apuntado por el puntero de carácter no firmado en el programa C a un bytearray Java.

Estoy perfectamente bien si tengo que especificar la longitud del contenido a 256 bytes, porque manejar longitudes arbitrarias puede ser complicado.

Alguien me puede indicar el lugar donde puedo encontrar un mapa de tipo de este tipo (soy nuevo en SWIG y no tengo experiencia en escribir mapas de tipos)

%module  CryptoFacade

%pointer_functions(int, intp);
%pointer_functions(unsigned char, unsigned_charp);

int enCrypt(char* clearText, int clearLen, jbyteArray retCipherText, int *retCipherLen);

Respuestas a la pregunta(1)

Su respuesta a la pregunta