#
# Copyright (c) 2021-2022, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Expect script for Linux/Buildroot using Measured Boot & fTPM
# It is a copy of linux-tpm.exp which doesn't check PCR0 value,
# as that doesn't apply to this config
#

source [file join [file dirname [info script]] utils.inc]
source [file join [file dirname [info script]] handle-arguments.inc]

# File to store the event log from the ftpm service.
set TFA_DIGEST [get_param tfa_digest "tfa_event_log"]

# regexp for non-zero PCR0
set non_zero_pcr "(?!(\\s00){16})((\\s(\[0-9a-f\]){2}){16}\\s)"

expect {
        # Wait for the start of the event log dump.
        "TCG_EfiSpecIDEvent:" {
                set digest_log [open $TFA_DIGEST w]
        }
}

expect {
        # Parse the event log from the debug logs and store the digests
        # so they can be matched later with what the fTPM reads.

        -re "Digest(\\s|\\w)*:\\s(\\w{2}\\s){16}|\
        : (\\w{2}\\s){16}|\
        Event(\\s|\\w)*:\\s\\w+\\s" {
                puts $digest_log $expect_out(0,string)
                exp_continue
        }

        -exact "Booting BL31" {
                close $digest_log
        }
}

expect {
        "login" {
                send "root\n"
        }
}

expect {
        "#" {
                # Load the fTPM driver
                send "ftpm\n"
        }
}

expect {
        "#" { }
}

# Iterate over the rest of PCRs and check that they all are zeros.
for {set i 1} {$i < 11} {incr i} {
        send "pcrread -ha $i\n"

        expect {
                -re "(\\s00){16}\\s+(00\\s){16}" { }

                -re $non_zero_pcr {
                        exit_uart -1
                }
        }
}

expect_string "#" "finished reading PCRs"

# Match the previously stored digest with the one generated by the
# fTPM service. The pass criteria is that both digests must match,
# meaning that TF-A successfully passed the event log to the TPM service.
if {[catch {exec diff -s $TFA_DIGEST ftpm_event_log} result options] == 0} {
        message "tests succeeded, digests matched"
} else {
        message "tests failed, digests did not match"
        exit_uart -1
}
