bool JNICALL Java_software_amazon_awssdk_crt_auth_signing_AwsSigningUtils_awsSigningUtilsVerifyRawSha256EcdsaSignature()

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;
}