[go: up one dir, main page]

File: tpm2_kdfe.h

package info (click to toggle)
tpm2-tools 5.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 4,396 kB
  • sloc: ansic: 35,984; sh: 12,809; xml: 8,089; makefile: 569
file content (62 lines) | stat: -rw-r--r-- 2,018 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* SPDX-License-Identifier: BSD-3-Clause */

#ifndef SRC_TPM_KDFE_H_
#define SRC_TPM_KDFE_H_

#include <tss2/tss2_sys.h>

/**
 * The KDFe function, defined in Appendix C.6.1 of TPM 2.0 Library
 * Specification Part1
 *  (https://trustedcomputinggroup.org/resource/tpm-library-specification/)
 *
 * @param hash_alg
 *  The hashing algorithm to use.
 * @param Z
 *  The ECDH shared secret. Z is the x coordinate of the product of d and Q,
 *  where d is a private key and Q is the other party's public key.
 * @param label
 *  The label value. ie. "DUPLICATE\0" or "IDENTITY\0".
 * @param label_length
 *  Length of the label.
 * @param party_u_info
 *  The x-coordinate of the public key
 * @param party_v_info
 *  The x-coordinate of the other party's public key
 * @param size_in_bits
 *  The number of bits of the key stream to be generated
 * @param result_key
 *  The buffer to write the generated key stream
 * @return
 *  TPM2_RC_SUCCESS on success
 */
TSS2_RC tpm2_kdfe(
        TPMI_ALG_HASH hash_alg, TPM2B_ECC_PARAMETER *Z,
        unsigned char *label, int label_length,
        TPM2B_ECC_PARAMETER *party_u_info, TPM2B_ECC_PARAMETER *party_v_info,
        UINT16 size_in_bits, TPM2B_MAX_BUFFER  *result_key );

/**
 * Derive the seed value and protected seed value, as specified
 * in Appendix C.6.3 of TPM 2.0 Library Specification Part1
 *  (https://trustedcomputinggroup.org/resource/tpm-library-specification/)
 *
 * @param[in] parent_pub
 *  The parents ECC public key.
 * @param[in] label
 *  The label value. ie. "DUPLICATE\0" or "IDENTITY\0".
 * @param[in] label_len
 *  Length of the label.
 * @param[out] seed
 *  The derived seed value
 * @param[out] out_sym_seed
 *  protedted seed value, ie the public key for the ephemeral key.
 * @return
 *  True on success, false otherwise.
 */
bool ecdh_derive_seed_and_encrypted_seed(
        TPM2B_PUBLIC *parent_pub, unsigned char *label, int label_len,
        TPM2B_DIGEST *seed, TPM2B_ENCRYPTED_SECRET *out_sym_seed);


#endif /* SRC_TPM_KDFE_H_ */