From 1aafe14181fc567907ad0f43384f9ba84c7d655b Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Mar 20 2013 15:38:05 +0000 Subject: new upstream version --- diff --git a/.gitignore b/.gitignore index 2daa2a1..2474d69 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ libgcrypt-1.4.5-hobbled.tar.bz2 /libgcrypt-1.4.6-hobbled.tar.bz2 /libgcrypt-1.5.0-hobbled.tar.bz2 +/libgcrypt-1.5.1-hobbled.tar.xz diff --git a/libgcrypt-1.5.0-empty-passphrase.patch b/libgcrypt-1.5.0-empty-passphrase.patch deleted file mode 100644 index c989420..0000000 --- a/libgcrypt-1.5.0-empty-passphrase.patch +++ /dev/null @@ -1,54 +0,0 @@ -commit 8528f1ba40e587dc17e02822e529fbd7ac69a189 -Author: Milan Broz -Date: Mon Oct 29 17:18:09 2012 +0100 - - PBKDF2: Allow empty passphrase. - - * cipher/kdf.c (gcry_kdf_derive): Allow empty passphrase for PBKDF2. - * tests/t-kdf.c (check_pbkdf2): Add test case for above. - -- - - While it is insecure, the PBKDF2 implementations usually - allows to derive key only from salt. - - This particular case is used e.g. in cryptsetup when - you use empty file as keyfile for LUKS keyslot. - - Test vector is compared with two independent implementations. - - Signed-off-by: Milan Broz - -diff --git a/cipher/kdf.c b/cipher/kdf.c -index d981022..46e8550 100644 ---- a/cipher/kdf.c -+++ b/cipher/kdf.c -@@ -238,7 +238,7 @@ gcry_kdf_derive (const void *passphrase, size_t passphraselen, - { - gpg_err_code_t ec; - -- if (!passphrase || !passphraselen) -+ if (!passphrase || (!passphraselen && algo != GCRY_KDF_PBKDF2)) - { - ec = GPG_ERR_INV_DATA; - goto leave; -diff --git a/tests/t-kdf.c b/tests/t-kdf.c -index 7209525..06c0026 100644 ---- a/tests/t-kdf.c -+++ b/tests/t-kdf.c -@@ -917,7 +917,15 @@ check_pbkdf2 (void) - 16, - "\x56\xfa\x6a\xa7\x55\x48\x09\x9d\xcc\x37" - "\xd7\xf0\x34\x25\xe0\xc3" -- } -+ }, -+ { /* empty password test, not in RFC-6070 */ -+ "", 0, -+ "salt", 4, -+ 2, -+ 20, -+ "\x13\x3a\x4c\xe8\x37\xb4\xd2\x52\x1e\xe2" -+ "\xbf\x03\xe1\x1c\x71\xca\x79\x4e\x07\x97" -+ }, - }; - int tvidx; - gpg_error_t err; diff --git a/libgcrypt-1.5.0-set-enforced-mode.patch b/libgcrypt-1.5.0-set-enforced-mode.patch deleted file mode 100644 index 05ee548..0000000 --- a/libgcrypt-1.5.0-set-enforced-mode.patch +++ /dev/null @@ -1,127 +0,0 @@ -diff -up libgcrypt-1.5.0/doc/gcrypt.texi.enforce libgcrypt-1.5.0/doc/gcrypt.texi ---- libgcrypt-1.5.0/doc/gcrypt.texi.enforce 2011-06-29 10:36:37.000000000 +0200 -+++ libgcrypt-1.5.0/doc/gcrypt.texi 2012-04-04 11:05:41.527430118 +0200 -@@ -577,8 +577,10 @@ initialization (i.e. before @code{gcry_c - - In addition to the standard FIPS mode, Libgcrypt may also be put into - an Enforced FIPS mode by writing a non-zero value into the file --@file{/etc/gcrypt/fips_enabled}. The Enforced FIPS mode helps to --detect applications which don't fulfill all requirements for using -+@file{/etc/gcrypt/fips_enabled} or by using the control command -+@code{GCRYCTL_SET_ENFORCED_FIPS_FLAG} before any other calls to -+libgcrypt. The Enforced FIPS mode helps to detect applications -+which don't fulfill all requirements for using - Libgcrypt in FIPS mode (@pxref{FIPS Mode}). - - Once Libgcrypt has been put into FIPS mode, it is not possible to -@@ -787,20 +789,20 @@ proper random device. - This command dumps information pertaining to the configuration of the - library to the given stream. If NULL is given for @var{stream}, the log - system is used. This command may be used before the intialization has --been finished but not before a gcry_version_check. -+been finished but not before a @code{gcry_check_version}. - - @item GCRYCTL_OPERATIONAL_P; Arguments: none - This command returns true if the library is in an operational state. - This information makes only sense in FIPS mode. In contrast to other - functions, this is a pure test function and won't put the library into - FIPS mode or change the internal state. This command may be used before --the intialization has been finished but not before a gcry_version_check. -+the intialization has been finished but not before a @code{gcry_check_version}. - - @item GCRYCTL_FIPS_MODE_P; Arguments: none - This command returns true if the library is in FIPS mode. Note, that - this is no indication about the current state of the library. This - command may be used before the intialization has been finished but not --before a gcry_version_check. An application may use this command or -+before a @code{gcry_check_version}. An application may use this command or - the convenience macro below to check whether FIPS mode is actually - active. - -@@ -816,10 +818,19 @@ implemented as a macro. - Running this command puts the library into FIPS mode. If the library is - already in FIPS mode, a self-test is triggered and thus the library will - be put into operational state. This command may be used before a call --to gcry_check_version and that is actually the recommended way to let an -+to @code{gcry_check_version} and that is actually the recommended way to let an - application switch the library into FIPS mode. Note that Libgcrypt will - reject an attempt to switch to fips mode during or after the intialization. - -+@item GCRYCTL_SET_ENFORCED_FIPS_FLAG; Arguments: none -+Running this command sets the internal flag that puts the library into -+the enforced FIPS mode during the FIPS mode initialization. This command -+does not affect the library if the library is not put into the FIPS mode and -+it must be used before any other libgcrypt library calls that initialize -+the library such as @code{gcry_check_version}. Note that Libgcrypt will -+reject an attempt to switch to the enforced fips mode during or after -+the intialization. -+ - @item GCRYCTL_SELFTEST; Arguments: none - This may be used at anytime to have the library run all implemented - self-tests. It works in standard and in FIPS mode. Returns 0 on -diff -up libgcrypt-1.5.0/src/fips.c.enforce libgcrypt-1.5.0/src/fips.c ---- libgcrypt-1.5.0/src/fips.c.enforce 2011-07-21 15:41:25.000000000 +0200 -+++ libgcrypt-1.5.0/src/fips.c 2012-04-04 10:26:24.311525789 +0200 -@@ -274,9 +274,17 @@ _gcry_fips_mode (void) - int - _gcry_enforced_fips_mode (void) - { -+ if (!_gcry_fips_mode ()) -+ return 0; - return enforced_fips_mode; - } - -+/* Set a flag telling whether we are in the enforced fips mode. */ -+void -+_gcry_set_enforced_fips_mode (void) -+{ -+ enforced_fips_mode = 1; -+} - - /* If we do not want to enforce the fips mode, we can set a flag so - that the application may check whether it is still in fips mode. -diff -up libgcrypt-1.5.0/src/g10lib.h.enforce libgcrypt-1.5.0/src/g10lib.h ---- libgcrypt-1.5.0/src/g10lib.h.enforce 2011-02-16 18:27:28.000000000 +0100 -+++ libgcrypt-1.5.0/src/g10lib.h 2012-04-04 10:25:03.280777602 +0200 -@@ -326,6 +326,8 @@ int _gcry_fips_mode (void); - - int _gcry_enforced_fips_mode (void); - -+void _gcry_set_enforced_fips_mode (void); -+ - void _gcry_inactivate_fips_mode (const char *text); - int _gcry_is_fips_mode_inactive (void); - -diff -up libgcrypt-1.5.0/src/gcrypt.h.in.enforce libgcrypt-1.5.0/src/gcrypt.h.in ---- libgcrypt-1.5.0/src/gcrypt.h.in.enforce 2011-03-11 09:47:39.000000000 +0100 -+++ libgcrypt-1.5.0/src/gcrypt.h.in 2012-04-04 10:25:53.806867670 +0200 -@@ -415,7 +415,8 @@ enum gcry_ctl_cmds - GCRYCTL_FORCE_FIPS_MODE = 56, - GCRYCTL_SELFTEST = 57, - /* Note: 58 .. 62 are used internally. */ -- GCRYCTL_DISABLE_HWF = 63 -+ GCRYCTL_DISABLE_HWF = 63, -+ GCRYCTL_SET_ENFORCED_FIPS_FLAG = 64 - }; - - /* Perform various operations defined by CMD. */ -diff -up libgcrypt-1.5.0/src/global.c.enforce libgcrypt-1.5.0/src/global.c ---- libgcrypt-1.5.0/src/global.c.enforce 2011-04-01 10:15:40.000000000 +0200 -+++ libgcrypt-1.5.0/src/global.c 2012-04-04 10:24:12.647685222 +0200 -@@ -596,6 +596,16 @@ _gcry_vcontrol (enum gcry_ctl_cmds cmd, - } - break; - -+ case GCRYCTL_SET_ENFORCED_FIPS_FLAG: -+ if (!any_init_done) -+ { -+ /* Not yet intialized at all. Set the enforced fips mode flag */ -+ _gcry_set_enforced_fips_mode (); -+ } -+ else -+ err = GPG_ERR_GENERAL; -+ break; -+ - default: - /* A call to make sure that the dummy code is linked in. */ - _gcry_compat_identification (); diff --git a/libgcrypt-1.5.0-use-poll.patch b/libgcrypt-1.5.0-use-poll.patch deleted file mode 100644 index b0ca158..0000000 --- a/libgcrypt-1.5.0-use-poll.patch +++ /dev/null @@ -1,57 +0,0 @@ -diff -up libgcrypt-1.5.0/random/rndlinux.c.use-poll libgcrypt-1.5.0/random/rndlinux.c ---- libgcrypt-1.5.0/random/rndlinux.c.use-poll 2012-04-05 15:37:52.000000000 +0200 -+++ libgcrypt-1.5.0/random/rndlinux.c 2013-03-05 14:15:29.735709032 +0100 -@@ -32,6 +32,7 @@ - #include - #include - #include -+#include - #include "types.h" - #include "g10lib.h" - #include "rand-internal.h" -@@ -142,21 +143,19 @@ _gcry_rndlinux_gather_random (void (*add - } - - /* Enter the read loop. */ -- delay = 0; /* Start with 0 seconds so that we do no block on the -+ delay = 100; /* Start with 0 seconds so that we do no block on the - first iteration and in turn call the progress function - before blocking. To give the OS a better chance to - return with something we will actually use 100ms. */ - while (length) - { -- fd_set rfds; -- struct timeval tv; - int rc; -+ struct pollfd pfd; - -- FD_ZERO(&rfds); -- FD_SET(fd, &rfds); -- tv.tv_sec = delay; -- tv.tv_usec = delay? 0 : 100000; -- if ( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) -+ pfd.fd = fd; -+ pfd.events = POLLIN; -+ -+ if ( !(rc=poll(&pfd, 1, delay)) ) - { - if (!any_need_entropy || last_so_far != (want - length) ) - { -@@ -165,14 +164,14 @@ _gcry_rndlinux_gather_random (void (*add - (int)last_so_far, (int)want); - any_need_entropy = 1; - } -- delay = 3; /* Use 3 seconds henceforth. */ -+ delay = 3000; /* Use 3 seconds henceforth. */ - continue; - } - else if( rc == -1 ) - { -- log_error ("select() error: %s\n", strerror(errno)); -+ log_error ("poll() error: %s\n", strerror(errno)); - if (!delay) -- delay = 1; /* Use 1 second if we encounter an error before -+ delay = 1000; /* Use 1 second if we encounter an error before - we have ever blocked. */ - continue; - } diff --git a/libgcrypt-1.5.1-use-poll.patch b/libgcrypt-1.5.1-use-poll.patch new file mode 100644 index 0000000..f6ed0b7 --- /dev/null +++ b/libgcrypt-1.5.1-use-poll.patch @@ -0,0 +1,82 @@ +diff -up libgcrypt-1.5.1/random/rndlinux.c.use-poll libgcrypt-1.5.1/random/rndlinux.c +--- libgcrypt-1.5.1/random/rndlinux.c.use-poll 2013-03-20 15:33:26.504867356 +0100 ++++ libgcrypt-1.5.1/random/rndlinux.c 2013-03-20 15:37:24.999944048 +0100 +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include "types.h" + #include "g10lib.h" + #include "rand-internal.h" +@@ -142,49 +143,37 @@ _gcry_rndlinux_gather_random (void (*add + } + + /* Enter the read loop. */ +- delay = 0; /* Start with 0 seconds so that we do no block on the ++ delay = 100; /* Start with 0 seconds so that we do no block on the + first iteration and in turn call the progress function + before blocking. To give the OS a better chance to + return with something we will actually use 100ms. */ + while (length) + { +- fd_set rfds; +- struct timeval tv; + int rc; ++ struct pollfd pfd; + +- /* If the system has no limit on the number of file descriptors +- and we encounter an fd which is larger than the fd_set size, +- we don't use the select at all. The select code is only used +- to emit progress messages. A better solution would be to +- fall back to poll() if available. */ +-#ifdef FD_SETSIZE +- if (fd < FD_SETSIZE) +-#endif ++ pfd.fd = fd; ++ pfd.events = POLLIN; ++ ++ if ( !(rc=poll(&pfd, 1, delay)) ) + { +- FD_ZERO(&rfds); +- FD_SET(fd, &rfds); +- tv.tv_sec = delay; +- tv.tv_usec = delay? 0 : 100000; +- if ( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) +- { +- if (!any_need_entropy || last_so_far != (want - length) ) +- { +- last_so_far = want - length; +- _gcry_random_progress ("need_entropy", 'X', +- (int)last_so_far, (int)want); +- any_need_entropy = 1; +- } +- delay = 3; /* Use 3 seconds henceforth. */ +- continue; +- } +- else if( rc == -1 ) ++ if (!any_need_entropy || last_so_far != (want - length) ) + { +- log_error ("select() error: %s\n", strerror(errno)); +- if (!delay) +- delay = 1; /* Use 1 second if we encounter an error before ++ last_so_far = want - length; ++ _gcry_random_progress ("need_entropy", 'X', ++ (int)last_so_far, (int)want); ++ any_need_entropy = 1; ++ } ++ delay = 3000; /* Use 3 seconds henceforth. */ ++ continue; ++ } ++ else if( rc == -1 ) ++ { ++ log_error ("poll() error: %s\n", strerror(errno)); ++ if (!delay) ++ delay = 1000; /* Use 1 second if we encounter an error before + we have ever blocked. */ +- continue; +- } ++ continue; + } + + do diff --git a/libgcrypt.spec b/libgcrypt.spec index 12b34ca..bf35271 100644 --- a/libgcrypt.spec +++ b/libgcrypt.spec @@ -1,8 +1,8 @@ Name: libgcrypt -Version: 1.5.0 -Release: 11%{?dist} +Version: 1.5.1 +Release: 1%{?dist} URL: http://www.gnupg.org/ -Source0: libgcrypt-%{version}-hobbled.tar.bz2 +Source0: libgcrypt-%{version}-hobbled.tar.xz # The original libgcrypt sources now contain potentially patented ECC # cipher support. We have to remove it in the tarball we ship with # the hobble-libgcrypt script. @@ -21,14 +21,10 @@ Patch5: libgcrypt-1.5.0-tests.patch Patch6: libgcrypt-1.5.0-fips-cfgrandom.patch # make the FIPS-186-3 DSA CAVS testable Patch7: libgcrypt-1.5.0-fips-cavs.patch -# add GCRYCTL_SET_ENFORCED_FIPS_FLAG -Patch8: libgcrypt-1.5.0-set-enforced-mode.patch # fix for memory leaks an other errors found by Coverity scan Patch9: libgcrypt-1.5.0-leak.patch -# allow empty passphrase (upstreamed) -Patch10: libgcrypt-1.5.0-empty-passphrase.patch # use poll instead of select when gathering randomness -Patch11: libgcrypt-1.5.0-use-poll.patch +Patch11: libgcrypt-1.5.1-use-poll.patch # Technically LGPLv2.1+, but Fedora's table doesn't draw a distinction. # Documentation and some utilities are GPLv2+ licensed. These files @@ -68,9 +64,7 @@ applications using libgcrypt. %patch5 -p1 -b .tests %patch6 -p1 -b .cfgrandom %patch7 -p1 -b .cavs -%patch8 -p1 -b .enforce %patch9 -p1 -b .leak -%patch10 -p1 -b .emptypass %patch11 -p1 -b .use-poll mv AUTHORS AUTHORS.iso88591 @@ -185,6 +179,9 @@ exit 0 %doc COPYING %changelog +* Wed Mar 20 2013 Tomas Mraz 1.5.1-1 +- new upstream version + * Tue Mar 5 2013 Tomas Mraz 1.5.0-11 - use poll() instead of select() when gathering randomness (#913773) diff --git a/sources b/sources index 28984ca..e3421d3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -35a73c1f2616ad904108ed8645c82f4c libgcrypt-1.5.0-hobbled.tar.bz2 +ec6ed0e0c3ad51a4a3d15e730cab0f6a libgcrypt-1.5.1-hobbled.tar.xz