int test_permutation(int signing_key_algorithm, int data_key_algorithm, const char *keys_dir) { char filename[1024]; int signing_rsa_len = siglen_map[signing_key_algorithm] * 8; int data_rsa_len = siglen_map[data_key_algorithm] * 8; VbPrivateKey *signing_private_key = NULL; VbPublicKey *signing_public_key = NULL; VbPublicKey *data_public_key = NULL; printf("***Testing signing algorithm: %s\n", algo_strings[signing_key_algorithm]); printf("***With data key algorithm: %s\n", algo_strings[data_key_algorithm]); sprintf(filename, "%s/key_rsa%d.pem", keys_dir, signing_rsa_len); signing_private_key = PrivateKeyReadPem(filename, signing_key_algorithm); if (!signing_private_key) { fprintf(stderr, "Error reading signing_private_key: %s\n", filename); return 1; } sprintf(filename, "%s/key_rsa%d.keyb", keys_dir, signing_rsa_len); signing_public_key = PublicKeyReadKeyb(filename, signing_key_algorithm, 1); if (!signing_public_key) { fprintf(stderr, "Error reading signing_public_key: %s\n", filename); return 1; } sprintf(filename, "%s/key_rsa%d.keyb", keys_dir, data_rsa_len); data_public_key = PublicKeyReadKeyb(filename, data_key_algorithm, 1); if (!data_public_key) { fprintf(stderr, "Error reading data_public_key: %s\n", filename); return 1; } test_verify_keyblock(signing_public_key, signing_private_key, data_public_key); test_verify_fw_preamble(signing_public_key, signing_private_key, data_public_key); if (signing_public_key) free(signing_public_key); if (signing_private_key) free(signing_private_key); if (data_public_key) free(data_public_key); return 0; }
int test_permutation(int signing_key_algorithm, int data_key_algorithm, const char *keys_dir) { char filename[1024]; int retval = 1; struct vb2_private_key *signing_private_key = NULL; struct vb2_packed_key *signing_public_key = NULL; struct vb2_packed_key *data_public_key = NULL; printf("***Testing signing algorithm: %s\n", vb2_get_crypto_algorithm_name(signing_key_algorithm)); printf("***With data key algorithm: %s\n", vb2_get_crypto_algorithm_name(data_key_algorithm)); snprintf(filename, sizeof(filename), "%s/key_%s.pem", keys_dir, vb2_get_crypto_algorithm_file(signing_key_algorithm)); signing_private_key = vb2_read_private_key_pem(filename, signing_key_algorithm); if (!signing_private_key) { fprintf(stderr, "Error reading signing_private_key: %s\n", filename); goto cleanup_permutation; } snprintf(filename, sizeof(filename), "%s/key_%s.keyb", keys_dir, vb2_get_crypto_algorithm_file(signing_key_algorithm)); signing_public_key = vb2_read_packed_keyb(filename, signing_key_algorithm, 1); if (!signing_public_key) { fprintf(stderr, "Error reading signing_public_key: %s\n", filename); goto cleanup_permutation; } snprintf(filename, sizeof(filename), "%s/key_%s.keyb", keys_dir, vb2_get_crypto_algorithm_file(data_key_algorithm)); data_public_key = vb2_read_packed_keyb(filename, data_key_algorithm, 1); if (!data_public_key) { fprintf(stderr, "Error reading data_public_key: %s\n", filename); goto cleanup_permutation; } /* Unpack public key */ struct vb2_public_key signing_public_key2; if (VB2_SUCCESS != vb2_unpack_key_buffer(&signing_public_key2, (uint8_t *)signing_public_key, signing_public_key->key_offset + signing_public_key->key_size)) { fprintf(stderr, "Error unpacking signing_public_key: %s\n", filename); goto cleanup_permutation; } test_check_keyblock(&signing_public_key2, signing_private_key, data_public_key); test_verify_keyblock(&signing_public_key2, signing_private_key, data_public_key); test_verify_fw_preamble(signing_public_key, signing_private_key, data_public_key); test_verify_kernel_preamble(signing_public_key, signing_private_key); retval = 0; cleanup_permutation: if (signing_public_key) free(signing_public_key); if (signing_private_key) free(signing_private_key); if (data_public_key) free(data_public_key); return retval; }