Проблема с генерируемым SWIG кодом JNI на Android - PullRequest
1 голос
/ 23 июля 2010

Я хочу генерировать оболочки JNI из кода C / C ++.

Вот мой файл интерфейса.

/* aes_security.i */
%module jni_security_example
%{
  #include "pbkdf2.h"
%}

extern int pbkdf2_sha1 (const char *passphrase, size_t passphraseLength,
       const char *SSID, size_t SSIDlen,
       unsigned int iterationCount,
       char *aeskey, size_t keyLength);

extern int GenrateIV_16_Bytes(unsigned char *IV);

Вот фрагмент сгенерированного SWIG Java-кода

 public static int pbkdf2_sha1(String passphrase, long passphraseLength,
 String SSID, long SSIDlen, long encryptGrade, String key,
 long keyLength) {
   return cot_jni_security_exampleJNI.pbkdf2_sha1(passphrase,
  passphraseLength, SSID, SSIDlen, encryptGrade, key,    keyLength);
 }

public static int GenrateIV_16_Bytes(SWIGTYPE_p_unsigned_char IV) {
  return cot_jni_security_exampleJNI
     .GenrateIV_16_Bytes(SWIGTYPE_p_unsigned_char.getCPtr(IV));
 }

Вот как я вызываю код JNI.

private String PASSPHRASE = "password";
private String SSID = "dummyssid";
private long iterationCount = 4096;

public String pbkdf2SHA1() {

  int keyLength = 32;
  char[] aesKey = new char[keyLength];
  int result = pbkdf2_sha1(PASSPHRASE, (long) PASSPHRASE.length(), SSID,
  SSID.length(), iterationCount, aesKey.toString(),
  (long) keyLength);
  Log.e(TAG, "Result " + result);

  return  new String(aesKey);

 }

Код компилируетсяно когда я запускаю, он падает где-то в коде C.Любая помощь будет оценена.

Спасибо.

1 Ответ

0 голосов
/ 29 июля 2010

Я не знаю Java или JNI.Однако в вашем коде C может быть какая-то проблема.попробуйте вызвать pbkdf2_sha1 () из интерфейса C.Если это терпит крах, это проблема в C Code.В противном случае выясните точку сбоя.Может быть, есть проблема в приведении, когда он принимает аргументы

...