Ok czyli nie rozwiało mi to mojego problemu bo nie chciałem się rozwodzić w szczegółach.
Zadeklarowaną mam identyczną klasę razem z wewnętrzną tylko różni się nazwą oraz jest parę dodatkowych metod i zmiennych i pomimo że nagłówek wygeneruje się też z dwoma argumentami typu jobject to drugi który ma wskazywać na klasę wewnętrzną zawsze jest 0 (NULL) i nie mogę się w C dostać do klasy wewnętrznej.
public class Md2 extends Hash {
static {
DIGEST_LENGTH = 16;
BLOCK_LENGTH = 16;
NAME = "md2";
DIGEST0 = "8350E5A3E24C153DF2275C9F80692773";
try {
System.loadLibrary("testjni");
} catch (UnsatisfiedLinkError e) {
e.printStackTrace();
}
}
public Md2Ctx ctx = new Md2Ctx();
public Md2() {
super();
}
public native Md2Ctx initContextNat(Md2Ctx ctx);
public void initContext() {
ctx = initContextNat(ctx);
}
public void doFinal() {
digest = doFinalNat(ctx);
}
public void update(byte[] b, int offset, int len) {
ctx = updateNat(ctx, b, offset, len);
}
private native Md2Ctx updateNat(Md2Ctx ctx, byte[] b, int offset, int len);
private native byte[] doFinalNat(Md2Ctx ctx);
public static class Md2Ctx {
public byte[] x = new byte[48];
public byte[] digest = new byte[16];
public byte[] m = new byte[16];
public byte[] c = new byte[16];
public long size;
public Md2Ctx() {
}
}
}
/*
* Class: Md2
* Method: initContextNat
* Signature: (LMd2/Md2Ctx;LMd2/Md2Ctx;)LMd2/Md2Ctx;
*/
JNIEXPORT jobject JNICALL Java_Md2_initContextNat
(JNIEnv *, jobject, jobject, jobject);
/*
* Class: Md2
* Method: updateNat
* Signature: (LMd2/Md2Ctx;[BII)LMd2/Md2Ctx;
*/
JNIEXPORT jobject JNICALL Java_Md2_updateNat
(JNIEnv *, jobject, jobject, jbyteArray, jint, jint);
/*
* Class: Md2
* Method: doFinalNat
* Signature: (LMd2/Md2Ctx;)[B
*/
JNIEXPORT jbyteArray JNICALL Java_Md2_doFinalNat
(JNIEnv *, jobject, jobject);