2010-07-23 3 views
1

C/C++ 코드에서 JNI 래퍼를 생성하려고합니다.SWIG에서 생성 된 JNI 코드가 Android에서 발생했습니다.

여기 내 인터페이스 파일입니다. 여기

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

여기

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 코드의 어딘가에서 충돌이 발생합니다. 어떤 도움을 주시면 감사하겠습니다.

감사합니다.

답변

0

나는 자바 나 JNI를 사용하지 않는다. 그러나 C 코드에 문제가있을 수 있습니다. C 인터페이스에서 pbkdf2_sha1()을 호출 해보십시오. C 코드에서 문제가 발생하면 문제가 발생합니다. 그렇지 않으면 충돌 지점을 찾으십시오. 인수가 필요할 때 캐스팅에 문제가있을 수 있습니다.