Jak zdefiniować swig typemap do zwracania unsigned char * z powrotem do java

Mam aplikację Java, która wywołuje bibliotekę c do wykonywania funkcji kryptograficznych. Jest to niestandardowa biblioteka zaimplementowana w c, której musimy używać z niektórych programów Java. Potrzebuję sposobu, aby zdefiniować typografię SWIG, która pozwoli mi wywołać funkcję przechodzącą przez Java z języka bytearray i potraktować ją jako wskaźnik znaku bez znaku w funkcji C, gdzie funkcja c wypełnia dane i zwraca je do java

Fragment mojego obecnego nieszczęśliwego pliku interfejsu jest następujący

%module  CryptoFacade

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

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

A fragment mojego nieszczęśliwego kodu Java jest następujący. W poniższym kodzie oczekiwałem, że wywołanie funkcji enCrypt da mi bufor, ale daje mi „krótki” jak na wygenerowany kod. (Zobacz komentarze w kodzie)

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);

Myślę, że powinienem zmienić definicję interfejsu na taką, jak poniżej, gdzie tworzę trzeci parametr jbytearray, a potem zaimplementowałem typemap, który skopiuje zawartość wskazywaną przez niepodpisany wskaźnik w programie C do java bytearray.

Jestem całkowicie w porządku, jeśli muszę określić długość zawartości do 256 bajtów, ponieważ obsługa dowolnych długości może być trudna.

Czy ktoś może wskazać mi miejsce, w którym mogę znaleźć taką maszynopis (jestem nowy w SWIG i nie mam doświadczenia w pisaniu typemap)

%module  CryptoFacade

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

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

questionAnswers(1)

yourAnswerToTheQuestion