import tpm-tools-1.3.9-4.el8

This commit is contained in:
CentOS Sources 2019-05-07 01:57:27 -04:00 committed by Andrew Lukoshko
commit e9cfe7668f
6 changed files with 518 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/tpm-tools-1.3.9.tar.gz

1
.tpm-tools.metadata Normal file
View File

@ -0,0 +1 @@
63d5cd42f464f7a200c508b551f5f2728f141a71 SOURCES/tpm-tools-1.3.9.tar.gz

View File

@ -0,0 +1,37 @@
From 3acd773846a85d142e919e2f4eeeee1acea5ca3a Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Mon, 20 Feb 2017 10:28:33 +0100
Subject: [PATCH 1/3] Fix build with OpenSSL 1.1 due to EVP_PKEY being an
opaque struct
With OpenSSL 1.1 the build fails with:
data_import.c:375:26: error: dereferencing pointer to incomplete type
'EVP_PKEY {aka struct evp_pkey_st}'
The manual page[1] says:
Previous versions of this document suggested using
EVP_PKEY_type(pkey->type) to determine the type of a key. Since EVP_PKEY
is now opaque this is no longer possible: the equivalent is
EVP_PKEY_base_id(pkey).
[1] https://www.openssl.org/docs/man1.1.0/crypto/EVP_PKEY_base_id.html
---
src/data_mgmt/data_import.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/data_mgmt/data_import.c b/src/data_mgmt/data_import.c
index f534717f02..d4d2052bc6 100644
--- a/src/data_mgmt/data_import.c
+++ b/src/data_mgmt/data_import.c
@@ -372,7 +372,7 @@ readX509Cert( const char *a_pszFile,
goto out;
}
- if ( EVP_PKEY_type( pKey->type ) != EVP_PKEY_RSA ) {
+ if ( EVP_PKEY_base_id( pKey ) != EVP_PKEY_RSA ) {
logError( TOKEN_RSA_KEY_ERROR );
X509_free( pX509 );
--
2.9.3

View File

@ -0,0 +1,192 @@
From 72fe7011fe981f90a04a62a3fb6ad33037390dff Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Mon, 20 Feb 2017 10:43:10 +0100
Subject: [PATCH 2/3] Fix build with OpenSSL 1.1 due to RSA being an opaque
struct
RSA is an opaque struct in OpenSSL 1.1. New getter functions must be
used to access the key components. The functions were not present in
OpenSSL 1.0, so add a compat header with the implementation of the
needed functions as suggested by the OpenSSL wiki [1] in order to allow
building tpm-tools with any version of OpenSSL.
[1] https://wiki.openssl.org/index.php/1.1_API_Changes
---
src/data_mgmt/Makefile.am | 3 ++-
src/data_mgmt/data_import.c | 52 ++++++++++++++++++++++---------------
src/data_mgmt/openssl_compat.h | 58 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 92 insertions(+), 21 deletions(-)
create mode 100644 src/data_mgmt/openssl_compat.h
diff --git a/src/data_mgmt/Makefile.am b/src/data_mgmt/Makefile.am
index de505e48ef..9457618ab9 100644
--- a/src/data_mgmt/Makefile.am
+++ b/src/data_mgmt/Makefile.am
@@ -32,7 +32,8 @@ noinst_HEADERS = data_common.h \
data_init.h \
data_object.h \
data_passwd.h \
- data_protect.h
+ data_protect.h \
+ openssl_compat.h
#
# Common build flags
diff --git a/src/data_mgmt/data_import.c b/src/data_mgmt/data_import.c
index d4d2052bc6..532543f7d3 100644
--- a/src/data_mgmt/data_import.c
+++ b/src/data_mgmt/data_import.c
@@ -39,6 +39,7 @@
#include <openssl/evp.h>
#include <openssl/err.h>
+#include "openssl_compat.h"
/*
* Global variables
@@ -691,8 +692,11 @@ createRsaPubKeyObject( RSA *a_pRsa,
int rc = -1;
- int nLen = BN_num_bytes( a_pRsa->n );
- int eLen = BN_num_bytes( a_pRsa->e );
+ const BIGNUM *rsa_n, *rsa_e;
+ RSA_get0_key( a_pRsa, &rsa_n, &rsa_e, NULL );
+
+ int nLen = BN_num_bytes( rsa_n );
+ int eLen = BN_num_bytes( rsa_e );
CK_RV rv;
@@ -732,8 +736,8 @@ createRsaPubKeyObject( RSA *a_pRsa,
}
// Get binary representations of the RSA key information
- BN_bn2bin( a_pRsa->n, n );
- BN_bn2bin( a_pRsa->e, e );
+ BN_bn2bin( rsa_n, n );
+ BN_bn2bin( rsa_e, e );
// Create the RSA public key object
rv = createObject( a_hSession, tAttr, ulAttrCount, a_hObject );
@@ -760,14 +764,22 @@ createRsaPrivKeyObject( RSA *a_pRsa,
int rc = -1;
- int nLen = BN_num_bytes( a_pRsa->n );
- int eLen = BN_num_bytes( a_pRsa->e );
- int dLen = BN_num_bytes( a_pRsa->d );
- int pLen = BN_num_bytes( a_pRsa->p );
- int qLen = BN_num_bytes( a_pRsa->q );
- int dmp1Len = BN_num_bytes( a_pRsa->dmp1 );
- int dmq1Len = BN_num_bytes( a_pRsa->dmq1 );
- int iqmpLen = BN_num_bytes( a_pRsa->iqmp );
+ const BIGNUM *rsa_n, *rsa_e, *rsa_d;
+ const BIGNUM *rsa_p, *rsa_q;
+ const BIGNUM *rsa_dmp1, *rsa_dmq1, *rsa_iqmp;
+
+ RSA_get0_key( a_pRsa, &rsa_n, &rsa_e, &rsa_d );
+ RSA_get0_factors( a_pRsa, &rsa_p, &rsa_q );
+ RSA_get0_crt_params( a_pRsa, &rsa_dmp1, &rsa_dmq1, &rsa_iqmp );
+
+ int nLen = BN_num_bytes( rsa_n );
+ int eLen = BN_num_bytes( rsa_e );
+ int dLen = BN_num_bytes( rsa_d );
+ int pLen = BN_num_bytes( rsa_p );
+ int qLen = BN_num_bytes( rsa_q );
+ int dmp1Len = BN_num_bytes( rsa_dmp1 );
+ int dmq1Len = BN_num_bytes( rsa_dmq1 );
+ int iqmpLen = BN_num_bytes( rsa_iqmp );
CK_RV rv;
@@ -821,14 +833,14 @@ createRsaPrivKeyObject( RSA *a_pRsa,
}
// Get binary representations of the RSA key information
- BN_bn2bin( a_pRsa->n, n );
- BN_bn2bin( a_pRsa->e, e );
- BN_bn2bin( a_pRsa->d, d );
- BN_bn2bin( a_pRsa->p, p );
- BN_bn2bin( a_pRsa->q, q );
- BN_bn2bin( a_pRsa->dmp1, dmp1 );
- BN_bn2bin( a_pRsa->dmq1, dmq1 );
- BN_bn2bin( a_pRsa->iqmp, iqmp );
+ BN_bn2bin( rsa_n, n );
+ BN_bn2bin( rsa_e, e );
+ BN_bn2bin( rsa_d, d );
+ BN_bn2bin( rsa_p, p );
+ BN_bn2bin( rsa_q, q );
+ BN_bn2bin( rsa_dmp1, dmp1 );
+ BN_bn2bin( rsa_dmq1, dmq1 );
+ BN_bn2bin( rsa_iqmp, iqmp );
// Create the RSA private key object
rv = createObject( a_hSession, tAttr, ulAttrCount, a_hObject );
diff --git a/src/data_mgmt/openssl_compat.h b/src/data_mgmt/openssl_compat.h
new file mode 100644
index 0000000000..2a60fdf492
--- /dev/null
+++ b/src/data_mgmt/openssl_compat.h
@@ -0,0 +1,58 @@
+/*
+ * Getter functions for OpenSSL < 1.1 compatibility. Based on code from:
+ * https://wiki.openssl.org/index.php/1.1_API_Changes#Adding_forward-compatible_code_to_older_versions
+ * and therefore:
+ * Copyright OpenSSL 2016
+ * Contents licensed under the terms of the OpenSSL license
+ * See http://www.openssl.org/source/license.html for details
+ */
+
+#ifndef __OPENSSL_COMPAT_H
+#define __OPENSSL_COMPAT_H
+
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+
+#include <openssl/engine.h>
+
+static inline void
+RSA_get0_key( const RSA *r,
+ const BIGNUM **n,
+ const BIGNUM **e,
+ const BIGNUM **d ) {
+
+ if ( n )
+ *n = r->n;
+ if ( e )
+ *e = r->e;
+ if ( d )
+ *d = r->d;
+}
+
+static inline void
+RSA_get0_factors( const RSA *r,
+ const BIGNUM **p,
+ const BIGNUM **q ) {
+
+ if ( p )
+ *p = r->p;
+ if ( q )
+ *q = r->q;
+}
+
+static inline void
+RSA_get0_crt_params( const RSA *r,
+ const BIGNUM **dmp1,
+ const BIGNUM **dmq1,
+ const BIGNUM **iqmp ) {
+
+ if ( dmp1 )
+ *dmp1 = r->dmp1;
+ if ( dmq1 )
+ *dmq1 = r->dmq1;
+ if ( iqmp )
+ *iqmp = r->iqmp;
+}
+
+#endif /* OPENSSL_VERSION_NUMBER */
+
+#endif /* __OPENSSL_COMPAT_H */
--
2.9.3

View File

@ -0,0 +1,89 @@
From c229bb590250bd9769cb5a63918ab0f6c9386be7 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Mon, 20 Feb 2017 12:00:39 +0100
Subject: [PATCH 3/3] Allocate OpenSSL cipher contexts for seal/unseal
Cipher contexts need to be allocated before using EVP_EncryptInit or
EVP_DecryptInit. Using a NULL context is invalid.
Fixes: f50ab0949438 ("Support OpenSSL 1.1.0")
---
lib/tpm_unseal.c | 12 ++++++++++--
src/cmds/tpm_sealdata.c | 11 +++++++++--
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/lib/tpm_unseal.c b/lib/tpm_unseal.c
index fc4a84906a..005dab7f8f 100644
--- a/lib/tpm_unseal.c
+++ b/lib/tpm_unseal.c
@@ -86,7 +86,7 @@ int tpmUnsealFile( char* fname, unsigned char** tss_data, int* tss_size,
int srkSecretLen;
unsigned char* res_data = NULL;
int res_size = 0;
-
+ EVP_CIPHER_CTX *ctx = NULL;
BIO *bdata = NULL, *b64 = NULL, *bmem = NULL;
int bioRc;
@@ -408,7 +408,12 @@ int tpmUnsealFile( char* fname, unsigned char** tss_data, int* tss_size,
}
/* Decode and decrypt the encrypted data */
- EVP_CIPHER_CTX *ctx = NULL;
+ ctx = EVP_CIPHER_CTX_new();
+ if ( ctx == NULL ) {
+ rc = TPMSEAL_STD_ERROR;
+ tpm_errno = ENOMEM;
+ goto tss_out;
+ }
EVP_DecryptInit(ctx, EVP_aes_256_cbc(), symKey, (unsigned char *)TPMSEAL_IV);
/* Create a base64 BIO to decode the encrypted data */
@@ -459,6 +464,9 @@ out:
} else
free(res_data);
+ if (ctx)
+ EVP_CIPHER_CTX_free(ctx);
+
return rc;
}
diff --git a/src/cmds/tpm_sealdata.c b/src/cmds/tpm_sealdata.c
index a2157f34b1..e25244a0f4 100644
--- a/src/cmds/tpm_sealdata.c
+++ b/src/cmds/tpm_sealdata.c
@@ -118,7 +118,7 @@ int main(int argc, char **argv)
char *passwd = NULL;
int pswd_len;
BYTE wellKnown[TCPA_SHA1_160_HASH_LEN] = TSS_WELL_KNOWN_SECRET;
-
+ EVP_CIPHER_CTX *ctx = NULL;
BIO *bin = NULL, *bdata=NULL, *b64=NULL;
initIntlSys();
@@ -343,7 +343,11 @@ int main(int argc, char **argv)
BIO_puts(bdata, TPMSEAL_ENC_STRING);
bdata = BIO_push(b64, bdata);
- EVP_CIPHER_CTX *ctx = NULL;
+ ctx = EVP_CIPHER_CTX_new();
+ if (ctx == NULL) {
+ logError(_("Unable to allocate cipher context\n"));
+ goto out_close;
+ }
EVP_EncryptInit(ctx, EVP_aes_256_cbc(), randKey, (unsigned char *)TPMSEAL_IV);
while ((lineLen = BIO_read(bin, line, sizeof(line))) > 0) {
@@ -375,5 +379,8 @@ out:
BIO_free(bdata);
if (b64)
BIO_free(b64);
+ if (ctx)
+ EVP_CIPHER_CTX_free(ctx);
+
return iRc;
}
--
2.9.3

198
SPECS/tpm-tools.spec Normal file
View File

@ -0,0 +1,198 @@
Name: tpm-tools
Summary: Management tools for the TPM hardware
Version: 1.3.9
Release: 4%{?dist}
License: CPL
URL: http://trousers.sourceforge.net
Source0: http://downloads.sourceforge.net/trousers/%{name}-%{version}.tar.gz
BuildRequires: trousers-devel openssl-devel opencryptoki-devel
Patch0001: 0001-Fix-build-with-OpenSSL-1.1-due-to-EVP_PKEY-being-an-.patch
Patch0002: 0002-Fix-build-with-OpenSSL-1.1-due-to-RSA-being-an-opaqu.patch
Patch0003: 0003-Allocate-OpenSSL-cipher-contexts-for-seal-unseal.patch
%description
tpm-tools is a group of tools to manage and utilize the Trusted Computing
Group's TPM hardware. TPM hardware can create, store and use RSA keys
securely (without ever being exposed in memory), verify a platform's
software state using cryptographic hashes and more.
%package pkcs11
Summary: Management tools using PKCS#11 for the TPM hardware
# opencryptoki is dlopen'd, the Requires won't get picked up automatically
Requires: opencryptoki-libs%{?_isa}
%description pkcs11
tpm-tools-pkcs11 is a group of tools that use the TPM PKCS#11 token. All data
contained in the PKCS#11 data store is protected by the TPM (keys,
certificates, etc.). You can import keys and certificates, list out the
objects in the data store, and protect data.
%package devel
Summary: Files to use the library routines supplied with tpm-tools
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
tpm-tools-devel is a package that contains the libraries and headers necessary
for developing tpm-tools applications.
%prep
%autosetup -p1 -c %{name}-%{version}
%build
%configure --disable-static --disable-rpath --disable-silent-rules
%make_build
%install
%make_install INSTALL="install -p"
rm -f $RPM_BUILD_ROOT/%{_libdir}/libtpm_unseal.la
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%license LICENSE
%doc README
%{_bindir}/tpm_*
%{_sbindir}/tpm_*
%{_libdir}/libtpm_unseal.so.?.?.?
%{_libdir}/libtpm_unseal.so.?
%{_mandir}/man1/tpm_*
%{_mandir}/man8/tpm_*
%files pkcs11
%license LICENSE
%{_bindir}/tpmtoken_*
%{_mandir}/man1/tpmtoken_*
%files devel
%{_libdir}/libtpm_unseal.so
%{_includedir}/tpm_tools/
%{_mandir}/man3/tpmUnseal*
%changelog
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Mon Feb 20 2017 Michal Schmidt <mschmidt@redhat.com> - 1.3.9-1
- Upstream release 1.3.9.
- Add fixes for build errors with OpenSSL 1.1.
- Add fixes for NULL cipher context use in seal/unseal.
- spec file modernization.
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.8-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.8-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.8-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.8-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.8-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Thu Apr 03 2014 Michal Schmidt <mschmidt@redhat.com> - 1.3.8-6
- Fix FTBFS with current autotools (#1083627)
- Drop tpm-tools-1.3.7-build.patch, the package builds without it (#952372)
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.8-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.8-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.8-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Tue Jul 3 2012 Peter Robinson <pbrobinson@fedoraproject.org> - 1.3.8-2
- Cleanup spec and modernise spec
* Fri Jun 22 2012 Steve Grubb <sgrubb@redhat.com> 1.3.8-1
- New upstream release
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Mon Sep 19 2011 Steve Grubb <sgrubb@redhat.com> 1.3.7-1
- New upstream release
* Fri Jun 24 2011 Steve Grubb <sgrubb@redhat.com> 1.3.5-5
- Remove -Werror from compile flags (#716046)
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.5-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Thu Jul 08 2010 Michal Schmidt <mschmidt@redhat.com> - 1.3.5-3
- Add the LICENSE file to the -pkcs11 subpackage too, as it may be
installed independently.
- Remove useless macros.
* Sun Feb 14 2010 Michal Schmidt <mschmidt@redhat.com> - 1.3.5-2
- Fix for DSO linking change.
* Mon Feb 01 2010 Steve Grubb <sgrubb@redhat.com> 1.3.5-1
- New upstream bug fix release
* Fri Jan 29 2010 Steve Grubb <sgrubb@redhat.com> 1.3.4-2
- Remove rpaths
* Wed Oct 21 2009 Michal Schmidt <mschmidt@redhat.com> - 1.3.4-1
- Upstream release 1.3.4:
- adds SRK password support on unsealing
- LICENSE is back.
- Remove no longer needed patch:
tpm-tools-1.3.3-check-fwrite-success.patch
* Fri Aug 21 2009 Tomas Mraz <tmraz@redhat.com> - 1.3.3-2
- rebuilt with new openssl
* Fri Aug 07 2009 Michal Schmidt <mschmidt@redhat.com> 1.3.3-1
- New upstream release 1.3.3.
- No longer needed patch, dropped:
tpm-tools-conditionally-build-tpmtoken-manpages-Makefile.in.patch
- Use global instead of define for macros.
- Remove rpaths.
- LICENSE file is suddenly missing in upstream tarball.
- Added patch to allow compilation:
tpm-tools-1.3.3-check-fwrite-success.patch
* Wed Jul 29 2009 Michal Schmidt <mschmidt@redhat.com> 1.3.1-10
- Split the pkcs11 utilities into a subpackage.
* Wed Jul 29 2009 Michal Schmidt <mschmidt@redhat.com> 1.3.1-9
- Enable pkcs11 support (tpmtoken_* utilities).
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.1-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Sun Jan 18 2009 Tomas Mraz <tmraz@redhat.com> - 1.3.1-6
- rebuild with new openssl
* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 1.3.1-5
- Autorebuild for GCC 4.3
* Tue Dec 18 2007 Kent Yoder <kyoder@users.sf.net> - 1.3.1-4
- Updated for comments in RHIT#394941 comment #6
* Fri Dec 14 2007 Kent Yoder <kyoder@users.sf.net> - 1.3.1-3
- Updated to own the includedir/tpm_tools directory, removed
requirement on trousers and ldconfig in post/postun
* Thu Dec 13 2007 Kent Yoder <kyoder@users.sf.net> - 1.3.1-2
- Updated for Fedora package submission guidelines
* Fri Nov 16 2007 Kent Yoder <kyoder@users.sf.net> - 1.3.1
- Updates to configure
* Fri Oct 05 2007 Kent Yoder <kyoder@users.sf.net> - 1.2.5.1
- Updated build section to use smp_mflags