Commit Graph

31 Commits

Author SHA1 Message Date
Stefan Berger
5a6cc8bda5 tpm2: Refactor Ecc-specific AlgorithmProfile.c code for reuse
Refactor some Ecc-specific code in AlgorithmProfile.c so it can be reused
for other algorithms later on as well.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2026-02-21 15:43:05 -05:00
Stefan Berger
65b3939400 Sync: Move many files to BSD-2-Clause license
Move many files to the BSD-2-clause license that either
- have no modifications in them at all
- where all modifictions are from 'me'
- where I have permission to move the modifications by 3rd parties under
  the new license

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2026-02-13 09:59:26 -05:00
Stefan Berger
1425c9133d tpm2: Adopt the directory structure of upstream code repo
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2026-02-13 09:59:26 -05:00
Dan Streetman
e814a1c731 tpm2: Enable support for 4096 bit RSA keys (with fixes)
- Enable RSA_4096
- Add RSA_4096 to s_KeySizesRSA at stateFormatLevel 8
- Increase STATE_FORMAT_LEVEL_CURRENT to 8
- Update tests for larger object size and increased StateFormatLevel
- In NVMarshal.c replace MAX_RSA_KEY_BITS with old value 3072
  so that the state is acceptable to older versions of libtpms;
  if we wrote 4096, then older versions of libtpms would reject the
  state.
- In NVMarshal.c replace RSA_4096 with '0' so it is acceptable to older
  versions; if we wrote '1', then older versions of libtpms would reject
  the state.

Fixes: #491

Signed-off-by: Dan Streetman <ddstreet@ieee.org>
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2025-05-07 12:23:44 -04:00
Stefan Berger
f756952283 Revert "tpm2: Enable support for 4096 bit RSA keys"
This reverts commit 63627b335e.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2025-05-07 11:45:36 -04:00
Dan Streetman
63627b335e tpm2: Enable support for 4096 bit RSA keys
- Enable RSA_4096
- Add RSA_4096 to s_KeySizesRSA at stateFormatLevel 8
- Increase STATE_FORMAT_LEVEL_CURRENT to 8
- Update tests for larger object size and increased StateFormatLevel

Fixes: #491

Signed-off-by: Dan Streetman <ddstreet@ieee.org>
2025-05-07 10:38:22 -04:00
Stefan Berger
0d8377b1b4 tpm2: Allow setting the minimum HMAC key size: hmac-min-key-size
Allow setting the minimum HMAC key size and add enforcement gates.

Check that the value of hmac=min-key-size given in the profile is not
larger than 1024. This value is taken from the maximum size of
TPM2B_SENSITIVE, which is MAX_SYM_DATA (=128), which can be provided as
key to an HMAC.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-10-08 15:55:19 -04:00
Stefan Berger
b97c3bb776 tpm2: Check for n < 0 from asprintf before return
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-09-24 09:32:02 -04:00
Stefan Berger
ea68ece7a7 tpm2: Disable curves whose keysize is too small and than can be disabled
When ecc-min-size is given use it to disable all curves whose keysize is
too small and that can be disabled.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-26 22:34:38 -04:00
Stefan Berger
37c5b7d546 tpm2: Fix display of disabled elliptic curve algorithms
If elliptic curve algorithms were enabled with a shortcut the output
may have shown the individual curves as disabled, even though this is
not the case. Remove the enabledEccCurvesPrint bitfield since it
leads to misleading output.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-26 22:34:38 -04:00
Stefan Berger
869bfa53d9 tpm2: Prevent list of disabled algorithms to start with a comma
The list of disabled algorithms may have started with a comma if the first
disabled algorithm was an ec curve. Fix this by passing the 'first'
variable and using it.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-26 22:34:38 -04:00
Stefan Berger
c47b17e209 tpm2: Filter-out unusable and runtime-disabled curves
Allow completely arbitrary TPM_ECC_CURVE's to be passed to
RuntimeAlgorithmKeySizeCheckEnabled by checking that its value lies within
the bitfield and if it doesn't return a FALSE. Out-of-bounds values passed
to TEST_BIT would have caused a pAssert failure.

Call this function now early from CryptCapGetOneECCCurve that now can pass
any value as a TPM_ECC_CRUVE without causing a failure when filtering
out disabled or runtime unusable curves.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-22 08:28:07 -04:00
Stefan Berger
3327a145fa tpm2: Filter-out runtime-unsupported algId in AlgorithmCapGetOneImplemented
Allow completely arbitrary TPM_ALG_ID's to be passed to
RuntimeAlgorithmCheckEnabled by checking that its value lies withing the
bitfield and if it doesn't return a FALSE. Out-of-bounds values passed
to TEST_BIT would have caused a pAssert failure.

Call this function now early on from AlgorithmCapGetOneImplemented that
now can pass any value as a TPM_ALG_ID without causing a failure.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-22 08:28:07 -04:00
Stefan Berger
ae970a547a tpm2: Change RuntimeAlgorithm's TPM_RC_FAILUREs to TPM_RC_VALUE
To leave TPM_RC_FAILURE for more severe failures replace it with
TPM_RC_VALUE.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-19 16:18:50 -04:00
Stefan Berger
ee141c60e0 tpm2: Enable Camellia-192 and AES-192 and bump up stateFormatLevel
Enable Camellia-192 and AES-192 and bump up the stateFormatLevel to '4'.
This now prevents using this state with previous stateFormatLevels (< 4)
because there Camellia-192 or AES-192 was not enabled and the user would
otherwise not be able to decrypt data with either one if it was usable.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 14:09:09 -04:00
Stefan Berger
6a39d24669 tpm2: Allow to runtime-disable SHA3 (not currenty supported)
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
cbf4757385 tpm2: Allow to runtime-disable SM2
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
689376598e tpm2: Allow to runtime-disable ECDAA
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
b6df124f7b tpm2: Allow to runtime-disable ECSCHNORR
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
8afb546148 tpm2: Allow to runtime-disable CMAC
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
7d11c20963 tpm2: Allow to runtime-disable cipher modes CTR,OFB,CBC, and ECB
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
1e3e82c074 tpm2: Allow to runtime-disable SHA-1 & SHA-512 hashing algorithm
Runtime-disabling any hash algorithm also means that the corresponding
hash bank must be disabled as well. In case the SHA-1 bank is disabled,
the output of TPM2_GetCapability must therefore filter-out the SHA-1 bank
that is still compiled-in but otherwise cannot be used.

$ tssgetcapability -cap 5
3 PCR selections
    hash TPM_ALG_SHA256
    TPMS_PCR_SELECTION length 3
    ff ff ff
    hash TPM_ALG_SHA384
    TPMS_PCR_SELECTION length 3
    ff ff ff
    hash TPM_ALG_SHA512
    TPMS_PCR_SELECTION length 3
    ff ff ff

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
c6e4785063 tpm2: Allow to runtime-disable ECMQV
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
83a18c67e7 tpm2: Allow to runtime-disable RSAES encryption scheme
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
50fc1a383c tpm2: Allow to runtime-disable RSASSA signing scheme
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
26ad3f2167 tpm2: Allow to runtime-disable RSAPSS signing scheme
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
01d5759990 tpm2: Allow to runtime-disable SM4 symmetric encryption algorithm
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
5a02cd2ea3 tpm2: Allow to runtime-disable TDES symmetric encryption algorithm
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
ad7c4a9b8f tpm2: Allow to runtime-disable Camellia symmetric encryption algorithm
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
31dc25a92c tpm2: Add support for setting a runtime profile
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00
Stefan Berger
63f4981309 tpm2: Implement functions to set and check runtime-disabled algorithms
Implement functions to set and check runtime-disabled algorithms. Use
these functions when the algorithm capabilities of the TPM 2 are
advertised via the TPM2_GetCapability command. However, it is not
sufficient to just suppress runtime-disabled algorithms in the return
value of this command but also certain code paths have to be instrumented
to check for disabled algorithms since they could otherwise lead to their
usage. Users are not required nor will they always look at the returned
values of TPM2_GetCapability but should still be prevented from using
runtime-disabled algorithms.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2024-07-15 11:51:38 -04:00