aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/frontends/android/jni/libandroidbridge/backend/android_private_key.c53
1 files changed, 34 insertions, 19 deletions
diff --git a/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c b/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c
index 1985f0e98..769ea3f31 100644
--- a/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c
+++ b/src/frontends/android/jni/libandroidbridge/backend/android_private_key.c
@@ -68,6 +68,9 @@ METHOD(private_key_t, sign, bool,
case KEY_RSA:
switch (scheme)
{
+ case SIGN_RSA_EMSA_PKCS1_NULL:
+ method = "NONEwithRSA";
+ break;
case SIGN_RSA_EMSA_PKCS1_MD5:
method = "MD5withRSA";
break;
@@ -93,12 +96,18 @@ METHOD(private_key_t, sign, bool,
case KEY_ECDSA:
switch (scheme)
{
+ case SIGN_ECDSA_WITH_SHA1_DER:
+ method = "SHA1withECDSA";
+ break;
+ case SIGN_ECDSA_WITH_SHA256_DER:
case SIGN_ECDSA_256:
method = "SHA256withECDSA";
break;
+ case SIGN_ECDSA_WITH_SHA384_DER:
case SIGN_ECDSA_384:
method = "SHA384withECDSA";
break;
+ case SIGN_ECDSA_WITH_SHA512_DER:
case SIGN_ECDSA_521:
method = "SHA512withECDSA";
break;
@@ -189,30 +198,36 @@ METHOD(private_key_t, sign, bool,
default:
break;
}
-
- /* we get an ASN.1 encoded sequence of integers r and s */
- parse = encoded = chunk_from_byte_array(env, jsigarray);
- if (asn1_unwrap(&parse, &parse) != ASN1_SEQUENCE ||
- asn1_unwrap(&parse, &r) != ASN1_INTEGER ||
- asn1_unwrap(&parse, &s) != ASN1_INTEGER)
+ if (len)
{
+ /* we get an ASN.1 encoded sequence of integers r and s */
+ parse = encoded = chunk_from_byte_array(env, jsigarray);
+ if (asn1_unwrap(&parse, &parse) != ASN1_SEQUENCE ||
+ asn1_unwrap(&parse, &r) != ASN1_INTEGER ||
+ asn1_unwrap(&parse, &s) != ASN1_INTEGER)
+ {
+ chunk_free(&encoded);
+ goto failed;
+ }
+ r = chunk_skip_zero(r);
+ s = chunk_skip_zero(s);
+ if (r.len > len || s.len > len)
+ {
+ chunk_free(&encoded);
+ goto failed;
+ }
+
+ /* concatenate r and s (forced to the defined length) */
+ *signature = chunk_alloc(2*len);
+ memset(signature->ptr, 0, signature->len);
+ memcpy(signature->ptr + (len - r.len), r.ptr, r.len);
+ memcpy(signature->ptr + len + (len - s.len), s.ptr, s.len);
chunk_free(&encoded);
- goto failed;
}
- r = chunk_skip_zero(r);
- s = chunk_skip_zero(s);
- if (r.len > len || s.len > len)
+ else
{
- chunk_free(&encoded);
- goto failed;
+ *signature = chunk_from_byte_array(env, jsigarray);
}
-
- /* concatenate r and s (forced to the defined length) */
- *signature = chunk_alloc(2*len);
- memset(signature->ptr, 0, signature->len);
- memcpy(signature->ptr + (len - r.len), r.ptr, r.len);
- memcpy(signature->ptr + len + (len - s.len), s.ptr, s.len);
- chunk_free(&encoded);
}
else
{