diff --git a/idea.c.gz b/idea.c.gz new file mode 100644 index 0000000..6e20215 --- /dev/null +++ b/idea.c.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:309928da34941dff1d6f6687542ff3d58306d85be9e1a9906bc4f9f8e6011844 +size 5216 diff --git a/libgcrypt-1.5.0-idea.patch b/libgcrypt-1.5.0-idea.patch new file mode 100644 index 0000000..006e89d --- /dev/null +++ b/libgcrypt-1.5.0-idea.patch @@ -0,0 +1,63 @@ +diff -ur libgcrypt-1.5.0/cipher/cipher.c libgcrypt-1.5.0f/cipher/cipher.c +--- libgcrypt-1.5.0/cipher/cipher.c 2011-04-19 16:06:57.000000000 +0200 ++++ libgcrypt-1.5.0f/cipher/cipher.c 2011-12-25 00:45:18.391287616 +0100 +@@ -60,6 +60,12 @@ + { &_gcry_cipher_spec_blowfish, + &dummy_extra_spec, GCRY_CIPHER_BLOWFISH }, + #endif ++#if USE_IDEA ++ { &_gcry_cipher_spec_idea, ++ &dummy_extra_spec, GCRY_CIPHER_IDEA }, ++#else ++# warn IDEA not supported ++#endif + #if USE_DES + { &_gcry_cipher_spec_des, + &dummy_extra_spec, GCRY_CIPHER_DES }, +diff -ur libgcrypt-1.5.0/cipher/Makefile.am libgcrypt-1.5.0f/cipher/Makefile.am +--- libgcrypt-1.5.0/cipher/Makefile.am 2011-03-11 09:47:39.000000000 +0100 ++++ libgcrypt-1.5.0f/cipher/Makefile.am 2011-12-25 00:39:27.051857406 +0100 +@@ -51,6 +51,7 @@ + dsa.c \ + elgamal.c \ + ecc.c \ ++idea.c \ + md4.c \ + md5.c \ + rijndael.c rijndael-tables.h \ +diff -ur libgcrypt-1.5.0/configure.ac libgcrypt-1.5.0f/configure.ac +--- libgcrypt-1.5.0/configure.ac 2011-06-29 10:53:22.000000000 +0200 ++++ libgcrypt-1.5.0f/configure.ac 2011-12-25 00:39:27.050857305 +0100 +@@ -155,7 +155,7 @@ + LIBGCRYPT_CONFIG_HOST="$host" + + # Definitions for symmetric ciphers. +-available_ciphers="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed" ++available_ciphers="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed idea" + available_ciphers="$available_ciphers camellia" + enabled_ciphers="" + +@@ -1005,6 +1005,12 @@ + AC_DEFINE(USE_CAST5, 1, [Defined if this module should be included]) + fi + ++LIST_MEMBER(idea, $enabled_ciphers) ++if test "$found" = "1" ; then ++ GCRYPT_CIPHERS="$GCRYPT_CIPHERS idea.lo" ++ AC_DEFINE(USE_IDEA, 1, [Defined if this module should be included]) ++fi ++ + LIST_MEMBER(des, $enabled_ciphers) + if test "$found" = "1" ; then + GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo" +diff -ur libgcrypt-1.5.0/src/cipher.h libgcrypt-1.5.0f/src/cipher.h +--- libgcrypt-1.5.0/src/cipher.h 2011-06-10 10:53:41.000000000 +0200 ++++ libgcrypt-1.5.0f/src/cipher.h 2011-12-25 00:40:25.323733275 +0100 +@@ -118,6 +118,7 @@ + + /* Declarations for the cipher specifications. */ + extern gcry_cipher_spec_t _gcry_cipher_spec_blowfish; ++extern gcry_cipher_spec_t _gcry_cipher_spec_idea; + extern gcry_cipher_spec_t _gcry_cipher_spec_des; + extern gcry_cipher_spec_t _gcry_cipher_spec_tripledes; + extern gcry_cipher_spec_t _gcry_cipher_spec_arcfour; diff --git a/libgcrypt-1.5.0-idea_codecleanup.patch b/libgcrypt-1.5.0-idea_codecleanup.patch new file mode 100644 index 0000000..305ad44 --- /dev/null +++ b/libgcrypt-1.5.0-idea_codecleanup.patch @@ -0,0 +1,164 @@ +diff -ur libgcrypt-1.5.0/cipher/idea.c libgcrypt-1.5.0f/cipher/idea.c +--- libgcrypt-1.5.0/cipher/idea.c 2011-12-25 00:45:06.747113267 +0100 ++++ libgcrypt-1.5.0f/cipher/idea.c 2011-12-25 00:45:18.393287816 +0100 +@@ -89,6 +89,9 @@ + #include + #include + #include ++#include "g10lib.h" ++#include "types.h" ++#include "cipher.h" + + #if !defined(BIG_ENDIAN_HOST) && !defined(LITTLE_ENDIAN_HOST) + /* Try to handle endianness if we didn't get it from config.h */ +@@ -103,9 +106,6 @@ + #endif + #endif + +-typedef unsigned short u16; /* Note: Make sure this is a 16 bit type. */ +-typedef unsigned long u32; /* Note: Make sure this is a 32 bit type. */ +- + /* end configurable stuff */ + + +@@ -116,8 +116,8 @@ + + /* local stuff */ + +-#define FNCCAST_SETKEY(f) ((int(*)(void*, unsigned char*, unsigned int))(f)) +-#define FNCCAST_CRYPT(f) ((void(*)(void*, unsigned char*, unsigned char*))(f)) ++#define FNCCAST_SETKEY(f) ((int(*)(void*, byte*, unsigned int))(f)) ++#define FNCCAST_CRYPT(f) ((void(*)(void*, byte*, byte*))(f)) + + #define IDEA_KEYSIZE 16 + #define IDEA_BLOCKSIZE 8 +@@ -131,11 +131,9 @@ + } IDEA_context; + + +-static int do_setkey( IDEA_context *c, unsigned char *key, unsigned keylen ); +-static void encrypt_block( IDEA_context *bc, unsigned char *outbuf, +- unsigned char *inbuf ); +-static void decrypt_block( IDEA_context *bc, unsigned char *outbuf, +- unsigned char *inbuf ); ++static gcry_err_code_t do_setkey( void *data, const byte *key, unsigned keylen ); ++static void encrypt_block( void *data, byte *outbuf, const byte *inbuf ); ++static void decrypt_block( void *data, byte *outbuf, const byte *inbuf ); + static int selftest(int); + + +@@ -170,7 +168,7 @@ + + + static void +-expand_key( unsigned char *userkey, u16 *ek ) ++expand_key( const byte *userkey, u16 *ek ) + { + int i,j; + +@@ -233,7 +231,7 @@ + + + static void +-cipher( unsigned char *outbuf, unsigned char *inbuf, u16 *key ) ++cipher( byte *outbuf, const byte *inbuf, u16 *key ) + { + u16 x1, x2, x3,x4, s2, s3; + u16 *in, *out; +@@ -309,25 +307,28 @@ + } + + +-static int +-do_setkey( IDEA_context *c, unsigned char *key, unsigned keylen ) ++static gcry_err_code_t ++do_setkey( void *data, const byte *key, unsigned keylen ) + { ++ IDEA_context *c = (IDEA_context*)data; + assert(keylen == 16); + c->have_dk = 0; + expand_key( key, c->ek ); + invert_key( c->ek, c->dk ); +- return 0; ++ return GPG_ERR_NO_ERROR; + } + + static void +-encrypt_block( IDEA_context *c, unsigned char *outbuf, unsigned char *inbuf ) ++encrypt_block( void *data, byte *outbuf, const byte *inbuf ) + { ++ IDEA_context *c = (IDEA_context*)data; + cipher( outbuf, inbuf, c->ek ); + } + + static void +-decrypt_block( IDEA_context *c, unsigned char *outbuf, unsigned char *inbuf ) ++decrypt_block( void *data, byte *outbuf, const byte *inbuf ) + { ++ IDEA_context *c = (IDEA_context*)data; + if( !c->have_dk ) { + c->have_dk = 1; + invert_key( c->ek, c->dk ); +@@ -340,9 +341,9 @@ + selftest( int check_decrypt ) + { + static struct { +- unsigned char key[16]; +- unsigned char plain[8]; +- unsigned char cipher[8]; ++ byte key[16]; ++ byte plain[8]; ++ byte cipher[8]; + } test_vectors[] = { + { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, +@@ -390,7 +391,7 @@ + { 0xF5, 0xDB, 0x1A, 0xC4, 0x5E, 0x5E, 0xF9, 0xF9 } } + }; + IDEA_context c; +- unsigned char buffer[8]; ++ byte buffer[8]; + int i; + + for(i=0; i < DIM(test_vectors); i++ ) { +@@ -425,12 +426,12 @@ + const char * + idea_get_info( int algo, size_t *keylen, + size_t *blocksize, size_t *contextsize, +- int (**r_setkey)( void *c, unsigned char *key, ++ int (**r_setkey)( void *c, byte *key, + unsigned keylen ), +- void (**r_encrypt)( void *c, unsigned char *outbuf, +- unsigned char *inbuf ), +- void (**r_decrypt)( void *c, unsigned char *outbuf, +- unsigned char *inbuf ) ++ void (**r_encrypt)( void *c, byte *outbuf, ++ byte *inbuf ), ++ void (**r_decrypt)( void *c, byte *outbuf, ++ byte *inbuf ) + ) + { + static int initialized = 0; +@@ -451,7 +452,22 @@ + return NULL; + } + ++static gcry_err_code_t idea_setkey(void *data, const byte *key, unsigned keylen) ++{ ++ static int initialized = 0; ++ if(!initialized) { ++ initialized = 1; ++ if (selftest(0) || selftest(1)) ++ return GPG_ERR_CIPHER_ALGO; ++ } ++ return do_setkey(data, key, keylen); ++} + ++gcry_cipher_spec_t _gcry_cipher_spec_idea = ++{ ++ "IDEA", NULL, NULL, 8, 128, sizeof (IDEA_context), ++ idea_setkey, encrypt_block, decrypt_block ++}; + + const char * const gnupgext_version = "IDEA ($Revision: 1.11 $)"; + diff --git a/libgcrypt.changes b/libgcrypt.changes index ea4df45..5ef2ab8 100644 --- a/libgcrypt.changes +++ b/libgcrypt.changes @@ -4,6 +4,11 @@ Sun Feb 12 15:23:56 UTC 2012 - crrodriguez@opensuse.org - Libraries back into %{_libdir}, /usr merge project ------------------------------------------------------------------- +Sat Dec 24 23:51:26 UTC 2011 - opensuse@dstoecker.de + +- add the missing IDEA algorithm after the patent is no longer relevant + +------------------------------------------------------------------ Sun Nov 13 14:37:29 UTC 2011 - jengelh@medozas.de - Remove redundant/unwanted tags/section (cf. specfile guidelines) diff --git a/libgcrypt.spec b/libgcrypt.spec index 71b2e15..7d5c365 100644 --- a/libgcrypt.spec +++ b/libgcrypt.spec @@ -19,7 +19,7 @@ Name: libgcrypt BuildRequires: libgpg-error-devel BuildRequires: libtool -Url: http://www.gnu.org/directory/Security/libgcrypt.html +Url: http://directory.fsf.org/wiki/Libgcrypt Version: 1.5.0 Release: 0 Summary: The GNU Crypto Library @@ -27,10 +27,13 @@ License: GPL-2.0+ ; LGPL-2.1+ Group: Development/Libraries/C and C++ Source: %name-%version.tar.bz2 Source2: baselibs.conf +Source3: idea.c.gz Patch0: %name-ppc64.patch Patch1: libgcrypt-strict-aliasing.patch Patch3: libgcrypt-1.4.1-rijndael_no_strict_aliasing.patch Patch4: libgcrypt-sparcv9.diff +Patch5: libgcrypt-1.5.0-idea.patch +Patch6: libgcrypt-1.5.0-idea_codecleanup.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -58,7 +61,9 @@ GnuPG (alpha version). Summary: The GNU Crypto Library License: GFDL-1.1 ; GPL-2.0+ ; LGPL-2.1+ ; MIT Group: Development/Libraries/C and C++ -Requires: libgcrypt11 = %version libgpg-error-devel +Requires: glibc-devel +Requires: libgcrypt11 = %version +Requires: libgpg-error-devel # bug437293 %ifarch ppc64 Obsoletes: libgcrypt-devel-64bit @@ -75,14 +80,17 @@ library. %prep %setup -q -n libgcrypt-%version +gzip -dc < %{S:3} > cipher/idea.c %patch0 -p1 %patch1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 +%patch6 -p1 %build # define ciphers to build -ENABLE_CIPHER="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed camellia" +ENABLE_CIPHER="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed camellia idea" ENABLE_PUBKEY="dsa elgamal rsa ecc" ENABLE_DIGEST="crc md4 md5 rmd160 sha1 sha256 sha512 tiger whirlpool" #