new upstream version
This commit is contained in:
parent
6fb8d4d1e6
commit
1aafe14181
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
libgcrypt-1.4.5-hobbled.tar.bz2
|
libgcrypt-1.4.5-hobbled.tar.bz2
|
||||||
/libgcrypt-1.4.6-hobbled.tar.bz2
|
/libgcrypt-1.4.6-hobbled.tar.bz2
|
||||||
/libgcrypt-1.5.0-hobbled.tar.bz2
|
/libgcrypt-1.5.0-hobbled.tar.bz2
|
||||||
|
/libgcrypt-1.5.1-hobbled.tar.xz
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
commit 8528f1ba40e587dc17e02822e529fbd7ac69a189
|
|
||||||
Author: Milan Broz <mbroz@redhat.com>
|
|
||||||
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 <mbroz@redhat.com>
|
|
||||||
|
|
||||||
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;
|
|
@ -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 ();
|
|
@ -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 <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
+#include <poll.h>
|
|
||||||
#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;
|
|
||||||
}
|
|
82
libgcrypt-1.5.1-use-poll.patch
Normal file
82
libgcrypt-1.5.1-use-poll.patch
Normal file
@ -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 <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
+#include <poll.h>
|
||||||
|
#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
|
@ -1,8 +1,8 @@
|
|||||||
Name: libgcrypt
|
Name: libgcrypt
|
||||||
Version: 1.5.0
|
Version: 1.5.1
|
||||||
Release: 11%{?dist}
|
Release: 1%{?dist}
|
||||||
URL: http://www.gnupg.org/
|
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
|
# The original libgcrypt sources now contain potentially patented ECC
|
||||||
# cipher support. We have to remove it in the tarball we ship with
|
# cipher support. We have to remove it in the tarball we ship with
|
||||||
# the hobble-libgcrypt script.
|
# the hobble-libgcrypt script.
|
||||||
@ -21,14 +21,10 @@ Patch5: libgcrypt-1.5.0-tests.patch
|
|||||||
Patch6: libgcrypt-1.5.0-fips-cfgrandom.patch
|
Patch6: libgcrypt-1.5.0-fips-cfgrandom.patch
|
||||||
# make the FIPS-186-3 DSA CAVS testable
|
# make the FIPS-186-3 DSA CAVS testable
|
||||||
Patch7: libgcrypt-1.5.0-fips-cavs.patch
|
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
|
# fix for memory leaks an other errors found by Coverity scan
|
||||||
Patch9: libgcrypt-1.5.0-leak.patch
|
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
|
# 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.
|
# Technically LGPLv2.1+, but Fedora's table doesn't draw a distinction.
|
||||||
# Documentation and some utilities are GPLv2+ licensed. These files
|
# Documentation and some utilities are GPLv2+ licensed. These files
|
||||||
@ -68,9 +64,7 @@ applications using libgcrypt.
|
|||||||
%patch5 -p1 -b .tests
|
%patch5 -p1 -b .tests
|
||||||
%patch6 -p1 -b .cfgrandom
|
%patch6 -p1 -b .cfgrandom
|
||||||
%patch7 -p1 -b .cavs
|
%patch7 -p1 -b .cavs
|
||||||
%patch8 -p1 -b .enforce
|
|
||||||
%patch9 -p1 -b .leak
|
%patch9 -p1 -b .leak
|
||||||
%patch10 -p1 -b .emptypass
|
|
||||||
%patch11 -p1 -b .use-poll
|
%patch11 -p1 -b .use-poll
|
||||||
|
|
||||||
mv AUTHORS AUTHORS.iso88591
|
mv AUTHORS AUTHORS.iso88591
|
||||||
@ -185,6 +179,9 @@ exit 0
|
|||||||
%doc COPYING
|
%doc COPYING
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 20 2013 Tomas Mraz <tmraz@redhat.com> 1.5.1-1
|
||||||
|
- new upstream version
|
||||||
|
|
||||||
* Tue Mar 5 2013 Tomas Mraz <tmraz@redhat.com> 1.5.0-11
|
* Tue Mar 5 2013 Tomas Mraz <tmraz@redhat.com> 1.5.0-11
|
||||||
- use poll() instead of select() when gathering randomness (#913773)
|
- use poll() instead of select() when gathering randomness (#913773)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user