Commit Graph

450 Commits

Author SHA1 Message Date
Stefan Berger
c433b064bf tpm2: Pass along COMPAT_LEVEL to DRBG generator and pass to OBJECTs
This should be the last patch that activates OpenSSL key creation
in case a KDF is based on COMPAT_LEVEL_OPENSSL.

What may break the upgrade path are external keys. All those keys
can be used for key derivation via the NULL hierarchy using
TPM2_CreateLoaded(), with parent = NULL. The NULL hierarchy currently
indicates 'newSeed = TRUE', which would then be the reason to
use OpenSSL now for key creation while previously the original TPM 2
code was used.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-26 12:05:10 -04:00
Stefan Berger
5ed1e02538 tpm2: WIP: Create EC keys using KDF 2019-06-26 12:05:10 -04:00
Stefan Berger
51e4a08a56 tpm2: Introduce COMPAT_LEVEL_OPENSSL but do not use yet
Introduce the COMPAT_LEVEL_OPENSSL constant so that we can add the
code that will be execute once this compatibility level is activated.

The meaning of this constant is that all derived keys are now generated
by OpenSSL. We will activate this by setting COMPAT_LEVEL_LAST to
COMPAT_LEVEL_OPENSSL but can only do this once all code has been added to
create derived keys with OpenSSL API calls. (OpenSSL will need to be extended).

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-26 12:05:10 -04:00
Stefan Berger
133bbae39a tpm2: Add COMPAT_LEVEL to DRBG and KDF states
Add a COMPAT_LEVEL to the DRBG and KDF states that is associated
with the seed and indicates the compatibility level we need
to maintain when deriving keys from seeds.

All functions that need to pass a value set COMPAT_LEVEL to
COMPAT_LEVEL_ORIGINAL (0) for now.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-26 12:05:10 -04:00
Stefan Berger
4ef40892ac tpm2: Add COMPAT_LEVEL to nullSeed to track compatibility level
Add COMPAT_LEVEL to the nullSeed in the state_reset data to track
its compatibility level.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-26 12:05:10 -04:00
Stefan Berger
4dfc71a718 tpm2: Add COMPAT_LEVEL to permanent state to track compatibility level
Add a variable compatLevel to the each seed in the permanent state
that allows us to track the age of the seed. Whenever a new seed
is created the compatLevel is also written and set to the latest
version. This compatLevel then influences the crypto algorithm that
can be used.

This patch only sets the variables to the current compatibility
level COMPAT_LEVEL_ORIGINAL and writes it out as part of the state
file. This makes the state file not downgradeable.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-26 12:04:36 -04:00
Stefan Berger
c5ba5e1291 tpm2: Remove duplicate CryptUtil_fp.h
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-10 11:19:58 -04:00
Stefan Berger
afbb327423 Implement EC key generation using OpenSSL functions if rand == NULL
Use OpenSSL functions to create EC keys only for the case that
rand == NULL in which case no KDF is being used and where we can
create a truly random key. This doesn't break the upgrade path.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-10 11:19:58 -04:00
Stefan Berger
d175ee918b tpm2: Also include openssl/ecdsa.h for older openssl versions
Older OpenSSL versions had the ECDSA headers in openssl/ecdsa.h, so
include this file as well.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-04 15:36:10 -04:00
Stefan Berger
55f5988781 tpm2: Switch ECDSA signature creation to OpenSSL
Use OpenSSL crypto library now also for the ECDSA signature creation.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-04 15:36:10 -04:00
Stefan Berger
82686260c7 tpm2: Make OsslToTpmBn's BIGNUM parameter const
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-04 15:36:10 -04:00
Stefan Berger
46869d307e Switch ECDSA signature verification to OpenSSL
Switch the ECDSA signature verification to OpenSSL. Do the signature
creation in the next step so we can verify the creation / verification
against the original TPM 2 code.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-06-03 18:18:13 -04:00
Stefan Berger
4e1cd261ef build-sys: Add support for --disable-use-openssl-functions
OpenSSL's crypto library does not support all crypto functionality
we need in all versions. Elliptic curve support via EVP seems to
have been added much later than for example symmetric crypto support.
So, we move the USE_OPENSSL_FUNCTIONS out of Implementation.h
into configure.ac and let the build system detect what functionality
is available in the crypto library. In this patch we now also rename
USE_OPENSSL_FUNCTIONS to USE_OPENSSL_FUNCTIONS_SYMMETRIC to indicate
that we can use the symmetric crypto functions of the crypto lib.

Using the OpenSSL crypto support is enabled by default, so one has
to use --disable-use-openssl-functions, which we do for Travis now.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 16:25:15 -04:00
Stefan Berger
dfe7816ae3 Travis: Add a Travis build for the case 'USE_OPENSSL_FUNCTIONS NO'
Maintain the build for the case of USE_OPENSSL_FUNCTIONS set to NO
where we build the original TPM 2 code.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 12:23:05 -04:00
Stefan Berger
e91633b271 tpm2: Convert symmetric cipher implementations to use OpenSSL functions
Convert functions for symmetric encryption via AES and TDES to
use OpenSSL EVP functions where necessary. Leave the old code around
and use the #if USE_OPENSSL_FUNCTIONS to activate the new parts.

OpenSSL does not provide an implementation for TDES in CTR mode, so
we reuse the original TPM 2 code for this mode.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 12:23:05 -04:00
Stefan Berger
8de7f334c7 tpm2: Implement helper for getting OpenSSL crypto functions
Implement helper for getting OpenSSL crypto functions from
crytpo algorithm IDs, encryption modes, and key sizes.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 12:23:05 -04:00
Stefan Berger
f5e4768265 tpm2: Introduce clear_and_free() to clear memory before freeing
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 12:23:05 -04:00
Stefan Berger
1ae430e708 tpm2: Introduce #define USE_OPENSSL_FUNCTIONS
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 12:23:05 -04:00
Stefan Berger
31e4db99f4 tpm2: Add fall through comment to address Coverity finding
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 10:11:33 -04:00
Stefan Berger
bca3109634 tpm2: Rearrange code in _plat__IsNvAvailable to avoid unused var
Rerrange the code in _plat__IsNvavailable to avoid an unused
variable.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 10:11:33 -04:00
Stefan Berger
1b2c4fc5b9 tpm2: Fix coverity scan errors in NvFileSize
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 10:11:33 -04:00
Stefan Berger
cbc70e79d5 Travis: If building coverity_scan branch, build only job number 1
Only build one job when building the coverity branch.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-30 10:11:33 -04:00
Stefan Berger
7e6473b938 tpm2: Clear all EC_POINT and BIGNUM before freeing
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-24 12:59:10 -04:00
Stefan Berger
10d4e5fd9d tpm2: Rename NV_ROUNDUP to TPM2_ROUNDUP and move to new Utils.h
Move NV_ROUNDUP to Utils.h and call it TPM2_ROUNDUP for reuse by
other functions.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-23 11:39:24 -04:00
Stefan Berger
e2129d2939 tpm2: Add CMAC test cases from RFC 4493
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-09 23:11:27 -04:00
Stefan Berger
137b9da5c8 tpm2: Reset the internal CMAC state when starting a CMAC
Initialize the internal CMAC state to 0s when starting a CMAC.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-09 23:11:27 -04:00
Stefan Berger
a829ddbdeb Extend TDES test cases (CFB, OFB) with test cases for short input
Add TDES test cases testing CFB and OFB with non-blocksized short
input.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-08 14:59:55 -04:00
Stefan Berger
c14f1b01c9 tpm2: Extend internal test case with tests for TDES
Also test the TDES implementations.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-08 11:11:41 -04:00
Stefan Berger
cb386e4c7f tpm2: Add script to re-generate the test data for AES and new test for TDES
Add a script that uses openssl to create the test data we are using
in the TPM 2 code already. Extend this script with TDES 128 and 192 bit
key sizes and tests.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-08 11:11:41 -04:00
Stefan Berger
bd7dc396e1 tests: Add a test program to run the TPM 2 self tests
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-07 16:01:48 -04:00
Stefan Berger
edd720a1ad tests: Restrict number of command line parameters to fuzz
Restrict the number of command line parameters passed to the
fuzz program in order not to overstep command line parameter
size restrictions.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-07 16:01:48 -04:00
Stefan Berger
04971a0fb9 tests: run a lot less tests in base64decode.sh
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-07 16:01:48 -04:00
Stefan Berger
96e8ed4aa3 Travis: Display test failures
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-07 16:01:48 -04:00
Stefan Berger
0540739531 tests: Fix memory leak in test cases
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-05-07 16:01:48 -04:00
Marc-André Lureau
552bd634ca build-sys: don't tweak LD_LIBRARY_PATH
libtool already provides helper scripts around executables.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2019-04-16 07:17:53 -04:00
Stefan Berger
5ac0d9a3d5 Add missing #define TPM_HAVE_TPM2_DECLARATIONS in tpm2 code (RHEL 6)
Add some missing #define TPM_HAVE_TPM2_DECLARATIONS before the include
of "tpm_library_intern.h" in TPM 2 code so we don't run into compile
errors on RHEL 6 when data types are redefined in TPM 1.2 code.

Previous patch 73cad883ba seems to have missed those.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-12 11:53:28 -04:00
Stefan Berger
5b13401a35 tpm2: Sync with TPM 2 code comments or commented code
Sync with TPM 2 code where the only difference is now comments
or commented/dead code.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-08 10:12:14 -04:00
Stefan Berger
639243d60d build-sys: Remove cruft from 'check'
Remove some cruft that was useful when TPM 2 code was still in the
works but now that things have settled don't need it anymore.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-04 13:19:16 -04:00
Stefan Berger
65769f9d3c travis: Run cpp-coveralls without sudo
Change file and directory ownerships so that we can run cpp-coveralls
without sudo.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-03 11:14:30 -04:00
Stefan Berger
7620f55ac1 tpm2: TPMT_PUBLIC_PARMS_Marshal is unused
... and TPMU_PUBLIC_PARMS_Marshal is used, so leave its prototype active.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-03 10:50:16 -04:00
Stefan Berger
25f267c491 tpm2: Deactivate unused code
Also TPM 2 code has a lot of unused code that we can #if 0 out.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-01 16:41:21 -04:00
Stefan Berger
8f99250251 gitignore: Ignore coverage related files
Ignore files related to gcov.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-01 16:41:21 -04:00
Marc-André Lureau
b214dabfc8 fuzz: better oss-fuzz integration
There were a few issues with the oss-fuzz integration from commit
8373f09854 ("build-sys: add oss-fuzz
support").

When building on OSS-Fuzz, the projects should use the provided CFLAGS
and CXXFLAGS and don't append any extra sanitization / fuzzing flags.

$LIB_FUZZING_ENGINE is defined to set the library to link to, and it
is a c++ library, so we should build fuzzer with c++...

Now --enable-fuzzer is only used for -fsanitize=fuzzer.

Add a tests/fuzz-main.c as fallback, to run the corpus on other builds.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2019-04-01 11:22:03 -04:00
Marc-André Lureau
3e591832c4 build-sys: fix grep warnings when building out-of-tree
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2019-04-01 11:22:03 -04:00
Stefan Berger
402fc2b1e1 tpm12: Build without support for maintentance commands
Introduce TPM_NOMAINTENANCE_COMMANDS #define to build the TPM 1.2 code
without maintenance commands support. The state for the maintenance
commands has been written out so far, so we have to leave this part
alive even though nothing can be done with the maintenance key anymore.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-01 10:16:25 -04:00
Stefan Berger
d0b9d9a9ff tpm12: Deactivate unused code
There are several functions in the code that do not have a caller.
Deactivate all of them to get higher coverage of the code.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-04-01 10:16:25 -04:00
Stefan Berger
a700edec87 travis: Use cpp-coveralls with the -b option for proper path creation
Add the option -b ./src for proper path creation. Exclude the test
dir to avoid malformed path creation. Also exclude the swtpm dir
since nothing interesting is to be found there.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-03-29 16:04:15 -04:00
Marc-André Lureau
8373f09854 build-sys: add oss-fuzz support
This script will permit integration with Google OSS-FUZZ
https://github.com/google/oss-fuzz

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2019-03-27 14:19:37 -04:00
Stefan Berger
db5af63392 gitignore: Ignore corpus of test cases and auto-created files
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-03-26 10:24:41 -04:00
Stefan Berger
63433c5be1 man: Leave note about leaving store- and loaddata functions unset
Leave a note in the TPMLIB_RegisterCallbacks() function about
the effects of leaving the store- and loaddata functions in the
interface unset.

Leave another not in TPMLIB_MainInit() to not use the library without
calling TPMLIB_RegiserCallbacks().

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2019-03-26 10:24:41 -04:00