Source Structure

Code Overview

To help understand the code, below is a C++-class hierarchy used in this code base. They are explained further in the documents in their respective directories, so the file names where the classes are defined is listed below (this, very roughly in order of functional interactions, of chronological usage during execution, and of most-to-least importance):

template_line                         ./template/template_line.hpp
    sst_template_line                 ./template/template_line.hpp
        read_sst_template_line        ./template/sst_template_line.hpp
        remove_sst_template_line      ./template/sst_template_line.hpp
        set_sst_template_line         ./template/sst_template_line.hpp
    policy_template_line              ./template/template_line.hpp
        read_policy_template_line     ./template/crypto_template_line.hpp
        set_policy_template_line      ./template/crypto_template_line.hpp
    key_template_line                 ./template/template_line.hpp
        read_key_template_line        ./template/crypto_template_line.hpp
        remove_key_template_line      ./template/crypto_template_line.hpp
        set_key_template_line         ./template/crypto_template_line.hpp
    security_template_line            ./template/template_line.hpp
        security_hash_template_line   ./template/secure_template_line.hpp

psa_call                              ./calls/psa_call.hpp
    crypto_call                       ./calls/psa_call.hpp
        policy_call                   ./calls/crypto_call.hpp
            init_policy_call          ./calls/crypto_call.hpp
            reset_policy_call         ./calls/crypto_call.hpp
            add_policy_usage_call     ./calls/crypto_call.hpp
            set_policy_lifetime_call  ./calls/crypto_call.hpp
            set_policy_type_call      ./calls/crypto_call.hpp
            set_policy_algorithm_call ./calls/crypto_call.hpp
            set_policy_usage_call     ./calls/crypto_call.hpp
            get_policy_lifetime_call  ./calls/crypto_call.hpp
            get_policy_type_call      ./calls/crypto_call.hpp
            get_policy_algorithm_call ./calls/crypto_call.hpp
            get_policy_usage_call     ./calls/crypto_call.hpp
            get_policy_size_call      ./calls/crypto_call.hpp
            get_policy_call           ./calls/crypto_call.hpp
        key_call                      ./calls/crypto_call.hpp
            generate_key_call         ./calls/crypto_call.hpp
            create_key_call           ./calls/crypto_call.hpp
            copy_key_call             ./calls/crypto_call.hpp
            read_key_data_call        ./calls/crypto_call.hpp
            remove_key_call           ./calls/crypto_call.hpp
    sst_call                         ./calls/psa_call.hpp
        sst_remove_call              ./calls/sst_call.hpp
        sst_get_call                 ./calls/sst_call.hpp
        sst_set_call                 ./calls/sst_call.hpp
    security_call                    ./calls/psa_call.hpp
        hash_call                    ./calls/security_call.hpp

boilerplate                          ./boilerplate/boilerplate.hpp

psa_asset                            ./assets/psa_asset.hpp
    crypto_asset                     ./assets/crypto_asset.hpp
        policy_asset                 ./assets/crypto_asset.hpp
        key_asset                    ./assets/crypto_asset.hpp
    sst_asset                        ./assets/sst_asset.hpp

tf_fuzz_info                         ./tf_fuzz.hpp

variables                            ./utility/variables.hpp
crc32                                ./utility/compute.hpp

gibberish                            ./utility/gibberish.hpp

expect_info                          ./utility/data_blocks.hpp
set_data_info                        ./utility/data_blocks.hpp
asset_name_id_info                   ./utility/data_blocks.hpp

TF-Fuzz now has better-organized management of variables in the generated code. In particular, it maintains a list of variables named in the test template, and implicit in the code, notably variables assets are read into. It also now has completely separate execution phases to parse the test template, simulate the sequence of PSA calls generated, and write out the expected results. That simulation is only in enough detail to predict expected results. Since TF-Fuzz currently mostly addresses only SST calls, that simulation is very simple in nature – just tracking data movement.


Copyright (c) 2024, Arm Limited. All rights reserved.