Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update Java bindings for peer certificate handling changes
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Nov 6, 2014
1 parent 66929b3 commit e211e0b
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
9 changes: 6 additions & 3 deletions java/src/com/example/LibTest.java
Expand Up @@ -41,10 +41,13 @@ private static class TestLib extends LibOpenConnect {
@Override
public int onValidatePeerCert(String msg) {
System.out.println("cert warning: " + msg);
System.out.println("cert SHA1: " + getCertSHA1());
System.out.println("cert details: " + getCertDetails());
System.out.println("cert hash: " + getPeerCertHash());
System.out.println("cert details: " + getPeerCertDetails());

byte der[] = getCertDER();
System.out.println("Internal consistency check: " +
(checkPeerCertHash(getPeerCertHash()) == 0 ? "OK" : "FAIL"));

byte der[] = getPeerCertDER();
System.out.println("DER is " + der.length + " bytes long");

System.out.print("\nAccept this certificate? [n] ");
Expand Down
7 changes: 4 additions & 3 deletions java/src/org/infradead/libopenconnect/LibOpenConnect.java
Expand Up @@ -147,9 +147,10 @@ public synchronized native void setMobileInfo(String mobilePlatformVersion,

/* certificate info */

public synchronized native String getCertSHA1();
public synchronized native String getCertDetails();
public synchronized native byte[] getCertDER();
public synchronized native int checkPeerCertHash(String hash);
public synchronized native String getPeerCertHash();
public synchronized native String getPeerCertDetails();
public synchronized native byte[] getPeerCertDER();

/* library info */

Expand Down
17 changes: 14 additions & 3 deletions jni.c
Expand Up @@ -690,7 +690,7 @@ JNIEXPORT jint JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_obtainCo
}

/* special handling: caller-allocated buffer */
JNIEXPORT jstring JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getCertSHA1(
JNIEXPORT jstring JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getPeerCertHash(
JNIEnv *jenv, jobject jobj)
{
struct libctx *ctx = getctx(jenv, jobj);
Expand All @@ -709,7 +709,7 @@ JNIEXPORT jstring JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getCe
}

/* special handling: callee-allocated, caller-freed string */
JNIEXPORT jstring JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getCertDetails(
JNIEXPORT jstring JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getPeerCertDetails(
JNIEnv *jenv, jobject jobj)
{
struct libctx *ctx = getctx(jenv, jobj);
Expand All @@ -731,7 +731,7 @@ JNIEXPORT jstring JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getCe
}

/* special handling: callee-allocated, caller-freed binary buffer */
JNIEXPORT jbyteArray JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getCertDER(
JNIEXPORT jbyteArray JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getPeerCertDER(
JNIEnv *jenv, jobject jobj)
{
struct libctx *ctx = getctx(jenv, jobj);
Expand Down Expand Up @@ -1085,6 +1085,17 @@ JNIEXPORT jstring JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_getCS
#define SET_STRING_END() \
release_cstring(ctx->jenv, jarg, arg)

JNIEXPORT jint JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_checkPeerCertHash(
JNIEnv *jenv, jobject jobj, jstring jarg)
{
int ret;
SET_STRING_START(-ENOMEM)
ret = openconnect_check_peer_cert_hash(ctx->vpninfo, arg);
SET_STRING_END();

return ret;
}

JNIEXPORT jint JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_parseURL(
JNIEnv *jenv, jobject jobj, jstring jarg)
{
Expand Down

0 comments on commit e211e0b

Please sign in to comment.