Lines Matching refs:shdr

20 struct shdr *shdr_alloc_and_copy(size_t offs, const void *img, size_t img_size)  in shdr_alloc_and_copy()
23 struct shdr *shdr; in shdr_alloc_and_copy() local
28 if (ADD_OVERFLOW(offs, sizeof(struct shdr), &end) || end > img_size) in shdr_alloc_and_copy()
31 shdr_size = SHDR_GET_SIZE((const struct shdr *)(img_va + offs)); in shdr_alloc_and_copy()
38 shdr = malloc(shdr_size); in shdr_alloc_and_copy()
39 if (!shdr) in shdr_alloc_and_copy()
41 memcpy(shdr, (const uint8_t *)img + offs, shdr_size); in shdr_alloc_and_copy()
44 if (shdr_size != SHDR_GET_SIZE(shdr)) { in shdr_alloc_and_copy()
45 free(shdr); in shdr_alloc_and_copy()
49 return shdr; in shdr_alloc_and_copy()
70 TEE_Result shdr_verify_signature(const struct shdr *shdr) in shdr_verify_signature() argument
80 if (shdr->magic != SHDR_MAGIC) in shdr_verify_signature()
83 if (TEE_ALG_GET_MAIN_ALG(shdr->algo) != TEE_MAIN_ALGO_RSA) in shdr_verify_signature()
86 hash_algo = TEE_DIGEST_HASH_TO_ALGO(shdr->algo); in shdr_verify_signature()
90 if (is_weak_key_size(shdr->algo, ta_pub_key_modulus_size * 8)) in shdr_verify_signature()
96 if (hash_size != shdr->hash_size) in shdr_verify_signature()
113 crypto_acipher_rsassa_verify, shdr->algo, &key, in shdr_verify_signature()
114 shdr->hash_size, SHDR_GET_HASH(shdr), shdr->hash_size, in shdr_verify_signature()
115 SHDR_GET_SIG(shdr), shdr->sig_size); in shdr_verify_signature()
261 TEE_Result shdr_load_pub_key(const struct shdr *shdr, size_t offs, in shdr_load_pub_key() argument
273 if (shdr->img_type != SHDR_SUBKEY) in shdr_load_pub_key()
276 if (shdr->img_size < sizeof(*subkey)) in shdr_load_pub_key()
279 if (ADD_OVERFLOW(shdr->img_size, offs, &end) || end > ns_img_size) in shdr_load_pub_key()
282 img = mempool_alloc(mempool_default, shdr->img_size + shdr->hash_size); in shdr_load_pub_key()
285 memcpy(img + shdr->hash_size, ns_img + offs, shdr->img_size); in shdr_load_pub_key()
286 subkey = (void *)(img + shdr->hash_size); in shdr_load_pub_key()
289 if (crypto_hash_alloc_ctx(&ctx, TEE_DIGEST_HASH_TO_ALGO(shdr->algo))) { in shdr_load_pub_key()
295 crypto_hash_update(ctx, (const void *)shdr, sizeof(*shdr)) || in shdr_load_pub_key()
296 crypto_hash_update(ctx, (const void *)subkey, shdr->img_size) || in shdr_load_pub_key()
297 crypto_hash_final(ctx, digest, shdr->hash_size) || in shdr_load_pub_key()
298 memcmp(digest, SHDR_GET_HASH(shdr), shdr->hash_size)) { in shdr_load_pub_key()
303 res = check_attrs(subkey, shdr->img_size); in shdr_load_pub_key()
319 if (ADD_OVERFLOW(key->name_size, offs + shdr->img_size, &end) || in shdr_load_pub_key()
325 ns_img + offs + shdr->img_size, key->name_size); in shdr_load_pub_key()
361 const struct shdr *shdr) in shdr_verify_signature2() argument
369 if (shdr->magic != SHDR_MAGIC) in shdr_verify_signature2()
372 if (TEE_ALG_GET_MAIN_ALG(shdr->algo) != key->main_algo) in shdr_verify_signature2()
375 hash_algo = TEE_DIGEST_HASH_TO_ALGO(shdr->algo); in shdr_verify_signature2()
379 if (is_weak_key_size(shdr->algo, ta_pub_key_modulus_size * 8)) in shdr_verify_signature2()
383 hash_size != shdr->hash_size) in shdr_verify_signature2()
389 crypto_acipher_rsassa_verify, shdr->algo, in shdr_verify_signature2()
390 key->pub_key.rsa, shdr->hash_size, in shdr_verify_signature2()
391 SHDR_GET_HASH(shdr), shdr->hash_size, in shdr_verify_signature2()
392 SHDR_GET_SIG(shdr), shdr->sig_size); in shdr_verify_signature2()