JNI: Only call ecdsa_verify if its inputs parsed correctly

Return 0 otherwise instead of calling it with bad parameters.
This commit is contained in:
Jon Griffiths 2016-05-02 23:21:33 +12:00
parent 7b549b1abc
commit a40c701c83

View File

@ -48,7 +48,6 @@ SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1ve
{ {
secp256k1_context *ctx = (secp256k1_context*)ctx_l; secp256k1_context *ctx = (secp256k1_context*)ctx_l;
int result;
unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject); unsigned char* data = (unsigned char*) (*env)->GetDirectBufferAddress(env, byteBufferObject);
const unsigned char* sigdata = { (unsigned char*) (data + 32) }; const unsigned char* sigdata = { (unsigned char*) (data + 32) };
const unsigned char* pubdata = { (unsigned char*) (data + siglen + 32) }; const unsigned char* pubdata = { (unsigned char*) (data + siglen + 32) };
@ -60,13 +59,15 @@ SECP256K1_API jint JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1ve
if( ret ) { if( ret ) {
ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen); ret = secp256k1_ec_pubkey_parse(ctx, &pubkey, pubdata, publen);
if( ret ) {
ret = secp256k1_ecdsa_verify(ctx, &sig, data, &pubkey);
}
} }
(void)classObject; (void)classObject;
result = secp256k1_ecdsa_verify(ctx, &sig, data, &pubkey); return ret;
return result;
} }
SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign SECP256K1_API jobjectArray JNICALL Java_org_bitcoin_NativeSecp256k1_secp256k1_1ecdsa_1sign