Uboot FIT验签
fit_image_load
fit_get_image_type_property--根据image_type获取对应名称。
fit_image_get_node--如果指定子镜像名称,则直接在FIT里面找到node offset。
fit_conf_get_node--如果没有指定子镜像名称,则通过configuration加载。如果没有指定configuration,则使用default。
fit_config_verify--校验configuration。
fit_config_verify_required_sigs
fit_config_verify_sig--如果定义了required并且为conf则进行configuration验签。
fit_config_check_sig
fit_image_setup_verfify--初始化struct image_sign_info结构体。由checksum_algos和crypto_algos可知,仅支持sha1/sha256+rsa2048/rsa4096组合。由padding_algos可知支持pkcs-1.5/pss两种padding算法。
fit_image_hash_get_value--获取当前子节点value值,即签名。
info.crypto->verify--对应verify函数,即rsa_verify()。
info->checksum->calculate--对应hash_calculate函数。对于验签的哈希,sha1和sha256都是对应此函数。对区域内内容进行哈希计算。
rsa_verify_with_keynode--获取key-dev类似的公钥节点,然后进行验签。
fdtdec_get_int--获取rsa,num-bits、rsa,n0-inverse、rsa,exponent、rsa,modulus、rsa,r-squared。
rsa_verify_key--prop即是RSA public key内容。使用prop对签名进行解密得到hash。
rsa_mod_exp--使用prop得到的公钥对签名内容进行解密得到pkcs1.5 padding的hash。
mod_exp_sw
rsa_mod_exp_sw
padding->verify--可能是padding_pkcs_15_verify()。
padding_pkcs_15_verify--先检查padding,然后比较hash是否一致。
padding_pkcs_15_verify--检查padding是否符合pkcs1.5规范。
->memcmp--将计算得到的hash值和对签名进行解密的得到的hash进行比较,一致则通过。
fit_image_select
fit_image_print--打印FIT镜像的详细信息。
fit_image_verify--验证镜像的一致性。
fit_image_get_data_and_size
fit_image_verify_with_data
fit_image_verify_required_sigs--处理FIT中signature节点,进行验签。
fit_image_verify_sig
fit_image_check_sig
fit_image_setup_verify
fit_image_hash_get_value
info.crypto->verify--对应crypto_algo的verify函数,比如rsa_verify。
fit_image_check_hash--处理FIT中hash节点。计算hash值,并和从FIT中获取的hash进行比较。
fit_image_hash_get_algo--获取哈希算法名称。
fit_image_hash_get_value--获取hash值。
calculate_hash--计算hash值,。
fit_image_check_sig--类似于fit_config_check_sig()。
fit_image_get_data_and_size--获取当前镜像的buf地址和size大小。
fit_image_get_load--获取当前镜像的load地址。
image_decomp--如果镜像需要解压,则调用image_decomp将输入数据data解压到load地址。
memcpy--如果load和当前data地址不一致,则需要memcpy一次。