in src/native/aws_signing.c [669:733]
bool JNICALL Java_software_amazon_awssdk_crt_auth_signing_AwsSigningUtils_awsSigningUtilsVerifyRawSha256EcdsaSignature(
JNIEnv *env,
jclass jni_class,
jbyteArray java_string_to_sign,
jbyteArray java_signature,
jstring java_verifier_pub_x,
jstring java_verifier_pub_y) {
(void)jni_class;
bool success = false;
struct aws_allocator *allocator = aws_jni_get_allocator();
struct aws_byte_cursor string_to_sign_cursor;
AWS_ZERO_STRUCT(string_to_sign_cursor);
struct aws_byte_cursor signature_cursor;
AWS_ZERO_STRUCT(signature_cursor);
struct aws_ecc_key_pair *ecc_key = NULL;
struct aws_string *pub_x = NULL;
struct aws_string *pub_y = NULL;
if (java_string_to_sign == NULL || java_signature == NULL || java_verifier_pub_x == NULL ||
java_verifier_pub_y == NULL) {
goto done;
}
pub_x = aws_jni_new_string_from_jstring(env, java_verifier_pub_x);
pub_y = aws_jni_new_string_from_jstring(env, java_verifier_pub_y);
if (pub_x == NULL || pub_y == NULL) {
goto done;
}
ecc_key = aws_ecc_key_new_from_hex_coordinates(
allocator, AWS_CAL_ECDSA_P256, aws_byte_cursor_from_string(pub_x), aws_byte_cursor_from_string(pub_y));
if (ecc_key == NULL) {
goto done;
}
string_to_sign_cursor = aws_jni_byte_cursor_from_jbyteArray_acquire(env, java_string_to_sign);
signature_cursor = aws_jni_byte_cursor_from_jbyteArray_acquire(env, java_signature);
if (aws_validate_v4a_authorization_value(allocator, ecc_key, string_to_sign_cursor, signature_cursor)) {
goto done;
}
success = true;
done:
if (string_to_sign_cursor.len > 0) {
aws_jni_byte_cursor_from_jbyteArray_release(env, java_string_to_sign, string_to_sign_cursor);
}
if (signature_cursor.len > 0) {
aws_jni_byte_cursor_from_jbyteArray_release(env, java_signature, signature_cursor);
}
aws_string_destroy(pub_x);
aws_string_destroy(pub_y);
aws_ecc_key_pair_release(ecc_key);
return success;
}