• James Bottomley's avatar
    tpm: Add the rest of the session HMAC API · 1085b827
    James Bottomley authored
    The final pieces of the HMAC API are for manipulating the session area
    of the command.  To add an authentication HMAC session
    tpm_buf_append_hmac_session() is called where tpm2_append_auth() would
    go. If a non empty password is passed in, this is correctly added to
    the HMAC to prove knowledge of it without revealing it.  Note that if
    the session is only used to encrypt or decrypt parameters (no
    authentication) then tpm_buf_append_hmac_session_opt() must be used
    instead.  This functions identically to tpm_buf_append_hmac_session()
    when TPM_BUS_SECURITY is enabled, but differently when it isn't,
    because effectively nothing is appended to the session area.
    
    Next the parameters should be filled in for the command and finally
    tpm_buf_fill_hmac_session() is called immediately prior to transmitting
    the command which computes the correct HMAC and places it in the
    command at the session location in the tpm buffer
    
    Finally, after tpm_transmit_cmd() is called,
    tpm_buf_check_hmac_response() is called to check that the returned
    HMAC matched and collect the new state for the next use of the
    session, if any.
    
    The features of the session are controlled by the session attributes
    set in tpm_buf_append_hmac_session().  If TPM2_SA_CONTINUE_SESSION is
    not specified, the session will be flushed and the tpm2_auth structure
    freed in tpm_buf_check_hmac_response(); otherwise the session may be
    used again.  Parameter encryption is specified by or'ing the flag
    TPM2_SA_DECRYPT and response encryption by or'ing the flag
    TPM2_SA_ENCRYPT.  the various encryptions will be taken care of by
    tpm_buf_fill_hmac_session() and tpm_buf_check_hmac_response()
    respectively.
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
    Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> # crypto API parts
    Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Tested-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    1085b827
tpm2-sessions.c 37.3 KB