aboutsummaryrefslogtreecommitdiffstats
path: root/cipher
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1999-02-10 16:22:40 +0000
committerWerner Koch <[email protected]>1999-02-10 16:22:40 +0000
commit9a4f506a18ed04f5dbd69d74ec0c35ade79e357a (patch)
tree07178f77cb23862b045b0edf8a2bc5ce188432cd /cipher
parentSee ChangeLog: Sun Jan 24 18:16:26 CET 1999 Werner Koch (diff)
downloadgnupg-9a4f506a18ed04f5dbd69d74ec0c35ade79e357a.tar.gz
gnupg-9a4f506a18ed04f5dbd69d74ec0c35ade79e357a.zip
See ChangeLog: Wed Feb 10 17:15:39 CET 1999 Werner Koch
Diffstat (limited to 'cipher')
-rw-r--r--cipher/ChangeLog12
-rw-r--r--cipher/Makefile.am55
-rw-r--r--cipher/blowfish.c1
-rw-r--r--cipher/cipher.c3
-rw-r--r--cipher/dynload.c3
-rw-r--r--cipher/dynload.h5
-rw-r--r--cipher/md.c65
-rw-r--r--cipher/md5.c57
-rw-r--r--cipher/md5.h34
-rw-r--r--cipher/pubkey.c1
-rw-r--r--cipher/random.c11
-rw-r--r--cipher/rmd.h12
-rw-r--r--cipher/rmd160.c63
-rw-r--r--cipher/rndunix.c3
-rw-r--r--cipher/sha1.c65
-rw-r--r--cipher/sha1.h33
-rw-r--r--cipher/tiger.c18
-rw-r--r--cipher/twofish.c10
18 files changed, 300 insertions, 151 deletions
diff --git a/cipher/ChangeLog b/cipher/ChangeLog
index 273b6fdee..1858f6a50 100644
--- a/cipher/ChangeLog
+++ b/cipher/ChangeLog
@@ -1,3 +1,15 @@
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <[email protected]>
+
+ * Makefile.am: Modules are now figured out by configure
+ * construct.c: New. Generated by configure. Changed all modules
+ to work with that.
+ * sha1.h: Removed.
+ * md5.h: Removed.
+
+ * twofish.c: Changed interface to allow Twofish/256
+
+ * rndunix.c (start_gatherer): Die on SIGPIPE.
+
Wed Jan 20 18:59:49 CET 1999 Werner Koch <[email protected]>
* rndunix.c (gather_random): Fix to avoid infinite loop.
diff --git a/cipher/Makefile.am b/cipher/Makefile.am
index 4a7171071..b21dc18f5 100644
--- a/cipher/Makefile.am
+++ b/cipher/Makefile.am
@@ -1,12 +1,33 @@
## Process this file with automake to produce Makefile.in
+
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl
noinst_LIBRARIES = libcipher.a
-EXTRA_PROGRAMS = tiger twofish rndunix rndlinux
+# The configure script greps the module names from the following lines.
+# You must also add all these names to EXTRA_PROGRAMS some lines below
+# and EXTRA_foo_SOURCES entries.
+# Hmmm is there a more easy way to do this? (EXTRA_PROGRAMS
+# might also list programs which are not modules)
+# MODULES: rndunix rndlinux
+# MODULES: sha1 rmd160 md5 tiger
+# MODULES: twofish
+EXTRA_PROGRAMS = rndunix rndlinux \
+ sha1 rmd160 md5 tiger \
+ twofish
+
+EXTRA_rndlinux_SOURCES = rndlinux.c
+EXTRA_rndunix_SOURCES = rndunix.c
+EXTRA_md5_SOURCES = md5.c
+EXTRA_rmd160_SOURCES = rmd160.c
+EXTRA_sha1_SOURCES = sha1.c
+EXTRA_tiger_SOURCES = tiger.c
+EXTRA_twofish_SOURCES = twofish.c
+
+
if ENABLE_GNUPG_EXTENSIONS
-pkglib_PROGRAMS = @DYNAMIC_CIPHER_MODS@ @DYNAMIC_RANDOM_MODS@
+pkglib_PROGRAMS = @DYNAMIC_CIPHER_MODS@
else
pkglib_PROGRAMS =
endif
@@ -27,37 +48,41 @@ libcipher_a_SOURCES = cipher.c \
cast5.h \
elgamal.c \
elgamal.h \
- md5.c \
- md5.h \
primegen.c \
random.h \
random.c \
rand-internal.h \
rmd.h \
- rmd160.c \
- sha1.h \
- sha1.c \
dsa.h \
dsa.c \
g10c.c \
- smallprime.c
+ smallprime.c \
+ construct.c
+# configure creates the constructor file
+BUILT_SOURCES = construct.c
-EXTRA_libcipher_a_SOURCES = rndlinux.c rndunix.c
-EXTRA_tiger_SOURCES = tiger.c
-EXTRA_twofish_SOURCES = twofish.c
-libcipher_a_DEPENDENCIES = @STATIC_RANDOM_OBJS@ @STATIC_CIPHER_OBJS@
-libcipher_a_LIBADD = @STATIC_RANDOM_OBJS@ @STATIC_CIPHER_OBJS@
+libcipher_a_DEPENDENCIES = @STATIC_CIPHER_OBJS@
+libcipher_a_LIBADD = @STATIC_CIPHER_OBJS@
+
+# If I remember it correct, automake 1.4 has a feature to set
+# fooFLAGS depending on the program. So we should check it out.
tiger: $(srcdir)/tiger.c
`echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o tiger $(srcdir)/tiger.c | \
- sed -e 's/-O[2-9]*/-O1/' `
+ sed -e 's/-O[2-9]*/-O1/g' `
+
+tiger.o: $(srcdir)/tiger.c
+ `echo $(COMPILE) $(srcdir)/tiger.c | sed -e 's/-O[2-9]*/-O1/g' `
twofish: $(srcdir)/twofish.c
`echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o twofish $(srcdir)/twofish.c | \
- sed -e 's/-O[0-9]*/ /' `
+ sed -e 's/-O[0-9]*/ /g' `
+
+twofish.o: $(srcdir)/twofish.c
+ `echo $(COMPILE) $(srcdir)/twofish.c | sed -e 's/-O[0-9]*/ /g' `
rndunix: $(srcdir)/rndunix.c
diff --git a/cipher/blowfish.c b/cipher/blowfish.c
index 3bbc03835..8cffa8b3e 100644
--- a/cipher/blowfish.c
+++ b/cipher/blowfish.c
@@ -37,6 +37,7 @@
#include "types.h"
#include "errors.h"
#include "blowfish.h"
+#include "dynload.h"
diff --git a/cipher/cipher.c b/cipher/cipher.c
index f27eec397..37d60251b 100644
--- a/cipher/cipher.c
+++ b/cipher/cipher.c
@@ -18,8 +18,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
-#define DEFINES_CIPHER_HANDLE 1
-
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
@@ -160,6 +158,7 @@ load_cipher_modules()
int any = 0;
if( !initialized ) {
+ cipher_modules_constructor();
setup_cipher_table(); /* load static modules on the first call */
initialized = 1;
return 1;
diff --git a/cipher/dynload.c b/cipher/dynload.c
index 6b9263e18..b8c7c67d8 100644
--- a/cipher/dynload.c
+++ b/cipher/dynload.c
@@ -66,6 +66,7 @@ typedef struct {
int seq1;
int seq2;
void *sym;
+ int reqalgo;
} ENUMCONTEXT;
@@ -323,6 +324,7 @@ enum_gnupgext_digests( void **enum_context,
if( !*enum_context ) { /* init context */
ctx = m_alloc_clear( sizeof( *ctx ) );
ctx->r = extensions;
+ ctx->reqalgo = *algo;
*enum_context = ctx;
}
else if( !algo ) { /* release the context */
@@ -333,6 +335,7 @@ enum_gnupgext_digests( void **enum_context,
else
ctx = *enum_context;
+ /* fixme: have a look at the hint string */
for( r = ctx->r; r; r = r->next ) {
int class, vers;
diff --git a/cipher/dynload.h b/cipher/dynload.h
index f22f5f3ee..792531cf0 100644
--- a/cipher/dynload.h
+++ b/cipher/dynload.h
@@ -20,6 +20,8 @@
#ifndef G10_CIPHER_DYNLOAD_H
#define G10_CIPHER_DYNLOAD_H
+#include "mpi.h"
+
void register_internal_cipher_extension( const char *module_id,
void * (*enumfunc)(int, int*, int*, int*) );
@@ -60,4 +62,7 @@ void (*dynload_getfnc_fast_random_poll(void)
)( void (*)(const void*, size_t, int), int );
+/** This function is in construct.c **/
+void cipher_modules_constructor(void);
+
#endif /*G10_CIPHER_DYNLOAD_H*/
diff --git a/cipher/md.c b/cipher/md.c
index 6e335db80..6c4d1124b 100644
--- a/cipher/md.c
+++ b/cipher/md.c
@@ -18,8 +18,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
-#define DEFINES_MD_HANDLE 1
-
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
@@ -30,8 +28,6 @@
#include "cipher.h"
#include "errors.h"
#include "dynload.h"
-#include "md5.h"
-#include "sha1.h"
#include "rmd.h"
@@ -57,7 +53,6 @@ struct md_digest_list_s {
static struct md_digest_list_s *digest_list;
-
static struct md_digest_list_s *
new_list_item( int algo,
const char *(*get_info)( int, size_t*,byte**, int*, int*,
@@ -79,33 +74,19 @@ new_list_item( int algo,
return r;
}
-/****************
- * Put the static entries into the table.
- */
-static void
-setup_digest_list()
-{
- struct md_digest_list_s *r;
-
- r = new_list_item( DIGEST_ALGO_MD5, md5_get_info );
- if( r ) { r->next = digest_list; digest_list = r; }
-
- r = new_list_item( DIGEST_ALGO_RMD160, rmd160_get_info );
- if( r ) { r->next = digest_list; digest_list = r; }
-
- r = new_list_item( DIGEST_ALGO_SHA1, sha1_get_info );
- if( r ) { r->next = digest_list; digest_list = r; }
-}
/****************
- * Try to load all modules and return true if new modules are available
+ * Try to load the modules with the requeste algorithm
+ * and return true if new modules are available
+ * If req_alog is -1 try to load all digest algorithms.
*/
static int
-load_digest_modules()
+load_digest_module( int req_algo )
{
- static int done = 0;
static int initialized = 0;
+ static u32 checked_algos[256/32];
+ static int checked_all = 0;
struct md_digest_list_s *r;
void *context = NULL;
int algo;
@@ -116,16 +97,24 @@ load_digest_modules()
void (**)(void*),byte *(**)(void*));
if( !initialized ) {
- setup_digest_list(); /* load static modules on the first call */
+ cipher_modules_constructor();
initialized = 1;
- return 1;
}
-
- if( done )
- return 0;
- done = 1;
+ algo = req_algo;
+ if( algo > 255 || !algo )
+ return 0; /* algorithm number too high (does not fit into out bitmap)*/
+ if( checked_all )
+ return 0; /* already called with -1 */
+ if( algo < 0 )
+ checked_all = 1;
+ else if( (checked_algos[algo/32] & (1 << (algo%32))) )
+ return 0; /* already checked and not found */
+ else
+ checked_algos[algo/32] |= (1 << (algo%32));
while( enum_gnupgext_digests( &context, &algo, &get_info ) ) {
+ if( req_algo != -1 && algo != req_algo )
+ continue;
for(r=digest_list; r; r = r->next )
if( r->algo == algo )
break;
@@ -144,6 +133,8 @@ load_digest_modules()
r->next = digest_list;
digest_list = r;
any = 1;
+ if( req_algo != -1 )
+ break;
}
enum_gnupgext_digests( &context, NULL, NULL );
return any;
@@ -163,7 +154,7 @@ string_to_digest_algo( const char *string )
for(r = digest_list; r; r = r->next )
if( !stricmp( r->name, string ) )
return r->algo;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module(-1) );
return 0;
}
@@ -180,7 +171,7 @@ digest_algo_to_string( int algo )
for(r = digest_list; r; r = r->next )
if( r->algo == algo )
return r->name;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
return NULL;
}
@@ -194,7 +185,7 @@ check_digest_algo( int algo )
for(r = digest_list; r; r = r->next )
if( r->algo == algo )
return 0;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module(algo) );
return G10ERR_DIGEST_ALGO;
}
@@ -241,7 +232,7 @@ md_enable( MD_HANDLE h, int algo )
for(r = digest_list; r; r = r->next )
if( r->algo == algo )
break;
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
if( !r ) {
log_error("md_enable: algorithm %d not available\n", algo );
return;
@@ -456,7 +447,7 @@ md_digest_length( int algo )
if( r->algo == algo )
return r->mdlen;
}
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
log_error("WARNING: no length for md algo %d\n", algo);
return 0;
}
@@ -479,7 +470,7 @@ md_asn_oid( int algo, size_t *asnlen, size_t *mdlen )
return r->asnoid;
}
}
- } while( !r && load_digest_modules() );
+ } while( !r && load_digest_module( algo ) );
log_bug("no asn for md algo %d\n", algo);
return NULL;
}
diff --git a/cipher/md5.c b/cipher/md5.c
index 214e13727..6a53deda8 100644
--- a/cipher/md5.c
+++ b/cipher/md5.c
@@ -34,8 +34,8 @@
#include <string.h>
#include <assert.h>
#include "util.h"
-#include "md5.h"
#include "memory.h"
+#include "dynload.h"
typedef struct {
@@ -338,7 +338,7 @@ md5_read( MD5_CONTEXT *hd )
* Returns: A pointer to string describing the algorithm or NULL if
* the ALGO is invalid.
*/
-const char *
+static const char *
md5_get_info( int algo, size_t *contextsize,
byte **r_asnoid, int *r_asnlen, int *r_mdlen,
void (**r_init)( void *c ),
@@ -367,5 +367,58 @@ md5_get_info( int algo, size_t *contextsize,
}
+#ifndef IS_MODULE
+static
+#endif
+const char * const gnupgext_version = "MD5 ($Revision$)";
+
+static struct {
+ int class;
+ int version;
+ int value;
+ void (*func)(void);
+} func_table[] = {
+ { 10, 1, 0, (void(*)(void))md5_get_info },
+ { 11, 1, 1 },
+};
+
+
+#ifndef IS_MODULE
+static
+#endif
+void *
+gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
+{
+ void *ret;
+ int i = *sequence;
+
+ do {
+ if( i >= DIM(func_table) || i < 0 )
+ return NULL;
+ *class = func_table[i].class;
+ *vers = func_table[i].version;
+ switch( *class ) {
+ case 11: case 21: case 31: ret = &func_table[i].value; break;
+ default: ret = func_table[i].func; break;
+ }
+ i++;
+ } while( what && what != *class );
+
+ *sequence = i;
+ return ret;
+}
+
+
+
+
+#ifndef IS_MODULE
+void
+md5_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
+}
+#endif
+
+
/* end of file */
diff --git a/cipher/md5.h b/cipher/md5.h
deleted file mode 100644
index 89fc843cc..000000000
--- a/cipher/md5.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* md5.h - message digest 5
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_MD5_H
-#define G10_MD5_H
-
-
-const char *
-md5_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asn_len, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-
-#endif /*G10_MD5_H*/
diff --git a/cipher/pubkey.c b/cipher/pubkey.c
index 2ca8dd854..58ba00007 100644
--- a/cipher/pubkey.c
+++ b/cipher/pubkey.c
@@ -170,6 +170,7 @@ load_pubkey_modules()
if( !initialized ) {
+ cipher_modules_constructor();
setup_pubkey_table();
initialized = 1;
return 1;
diff --git a/cipher/random.c b/cipher/random.c
index b0bc832e6..bcd017d4c 100644
--- a/cipher/random.c
+++ b/cipher/random.c
@@ -116,16 +116,7 @@ initialize()
keypool = secure_alloc ? m_alloc_secure_clear(POOLSIZE+BLOCKLEN)
: m_alloc_clear(POOLSIZE+BLOCKLEN);
is_initialized = 1;
-
- #if USE_RNDLINUX
- rndlinux_constructor();
- #elif USE_RNDUNIX
- rndunix_constructor();
- #elif USE_RNDW32
- #elif USE_RNDOS2
- #elif USE_RNDATARI
- #elif USE_RNDMVS
- #endif
+ cipher_modules_constructor();
}
void
diff --git a/cipher/rmd.h b/cipher/rmd.h
index 0c1fbad99..cd5c453a3 100644
--- a/cipher/rmd.h
+++ b/cipher/rmd.h
@@ -32,16 +32,4 @@ typedef struct {
void rmd160_init( RMD160_CONTEXT *hd );
void rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer );
-
-
-const char *
-rmd160_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asn_len, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-
#endif /*G10_RMD_H*/
diff --git a/cipher/rmd160.c b/cipher/rmd160.c
index 4d644756f..70904a144 100644
--- a/cipher/rmd160.c
+++ b/cipher/rmd160.c
@@ -27,6 +27,7 @@
#include "memory.h"
#include "rmd.h"
#include "cipher.h" /* only used for the rmd160_hash_buffer() prototype */
+#include "dynload.h"
/*********************************
* RIPEMD-160 is not patented, see (as of 25.10.97)
@@ -554,7 +555,7 @@ rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length )
* Returns: A pointer to string describing the algorithm or NULL if
* the ALGO is invalid.
*/
-const char *
+static const char *
rmd160_get_info( int algo, size_t *contextsize,
byte **r_asnoid, int *r_asnlen, int *r_mdlen,
void (**r_init)( void *c ),
@@ -582,3 +583,63 @@ rmd160_get_info( int algo, size_t *contextsize,
return "RIPEMD160";
}
+
+#ifndef IS_MODULE
+static
+#endif
+const char * const gnupgext_version = "RMD160 ($Revision$)";
+
+static struct {
+ int class;
+ int version;
+ int value;
+ void (*func)(void);
+} func_table[] = {
+ { 10, 1, 0, (void(*)(void))rmd160_get_info },
+ { 11, 1, 3 },
+};
+
+
+#ifndef IS_MODULE
+static
+#endif
+void *
+gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
+{
+ void *ret;
+ int i = *sequence;
+
+ do {
+ if( i >= DIM(func_table) || i < 0 ) {
+ return NULL;
+ }
+ *class = func_table[i].class;
+ *vers = func_table[i].version;
+ switch( *class ) {
+ case 11:
+ case 21:
+ case 31:
+ ret = &func_table[i].value;
+ break;
+ default:
+ ret = func_table[i].func;
+ break;
+ }
+ i++;
+ } while( what && what != *class );
+
+ *sequence = i;
+ return ret;
+}
+
+
+
+
+#ifndef IS_MODULE
+void
+rmd160_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
+}
+#endif
+
diff --git a/cipher/rndunix.c b/cipher/rndunix.c
index 716b02672..0132cd901 100644
--- a/cipher/rndunix.c
+++ b/cipher/rndunix.c
@@ -642,6 +642,9 @@ start_gatherer( int pipefd )
select(0, NULL, NULL, NULL, &tv);
continue;
}
+ if( errno == EPIPE ) /* parent has exited, so give up */
+ exit(0);
+
/* we can't do very much here because stderr is closed */
if( dbgfp )
fprintf(dbgfp, "gatherer can't write to pipe: %s\n",
diff --git a/cipher/sha1.c b/cipher/sha1.c
index b3da296f8..04bdbac98 100644
--- a/cipher/sha1.c
+++ b/cipher/sha1.c
@@ -38,7 +38,7 @@
#include <assert.h>
#include "util.h"
#include "memory.h"
-#include "sha1.h"
+#include "dynload.h"
typedef struct {
@@ -331,7 +331,7 @@ sha1_read( SHA1_CONTEXT *hd )
* Returns: A pointer to string describing the algorithm or NULL if
* the ALGO is invalid.
*/
-const char *
+static const char *
sha1_get_info( int algo, size_t *contextsize,
byte **r_asnoid, int *r_asnlen, int *r_mdlen,
void (**r_init)( void *c ),
@@ -358,3 +358,64 @@ sha1_get_info( int algo, size_t *contextsize,
return "SHA1";
}
+
+
+#ifndef IS_MODULE
+static
+#endif
+const char * const gnupgext_version = "SHA1 ($Revision$)";
+
+static struct {
+ int class;
+ int version;
+ int value;
+ void (*func)(void);
+} func_table[] = {
+ { 10, 1, 0, (void(*)(void))sha1_get_info },
+ { 11, 1, 2 },
+};
+
+
+#ifndef IS_MODULE
+static
+#endif
+void *
+gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
+{
+ void *ret;
+ int i = *sequence;
+
+ do {
+ if( i >= DIM(func_table) || i < 0 ) {
+ return NULL;
+ }
+ *class = func_table[i].class;
+ *vers = func_table[i].version;
+ switch( *class ) {
+ case 11:
+ case 21:
+ case 31:
+ ret = &func_table[i].value;
+ break;
+ default:
+ ret = func_table[i].func;
+ break;
+ }
+ i++;
+ } while( what && what != *class );
+
+ *sequence = i;
+ return ret;
+}
+
+
+
+
+#ifndef IS_MODULE
+void
+sha1_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version, gnupgext_enum_func );
+}
+#endif
+
diff --git a/cipher/sha1.h b/cipher/sha1.h
deleted file mode 100644
index 3d9302671..000000000
--- a/cipher/sha1.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* sha1.h - SHA1 hash function
- * Copyright (C) 1998 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * GnuPG is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_SHA1_H
-#define G10_SHA1_H
-
-
-const char *
-sha1_get_info( int algo, size_t *contextsize,
- byte **r_asnoid, int *r_asn_len, int *r_mdlen,
- void (**r_init)( void *c ),
- void (**r_write)( void *c, byte *buf, size_t nbytes ),
- void (**r_final)( void *c ),
- byte *(**r_read)( void *c )
- );
-
-#endif /*G10_SHA1_H*/
diff --git a/cipher/tiger.c b/cipher/tiger.c
index 20d17cae0..0765f0bbd 100644
--- a/cipher/tiger.c
+++ b/cipher/tiger.c
@@ -909,6 +909,9 @@ tiger_get_info( int algo, size_t *contextsize,
+#ifndef IS_MODULE
+static
+#endif
const char * const gnupgext_version = "TIGER ($Revision$)";
static struct {
@@ -938,6 +941,9 @@ static struct {
* version = interface version of the function/pointer
* (currently this is 1 for all functions)
*/
+#ifndef IS_MODULE
+static
+#endif
void *
gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
{
@@ -969,5 +975,17 @@ gnupgext_enum_func( int what, int *sequence, int *class, int *vers )
return ret;
}
+
+
+#ifndef IS_MODULE
+void
+tiger_constructor(void)
+{
+ register_internal_cipher_extension( gnupgext_version,
+ gnupgext_enum_func );
+}
+#endif
+
+
#endif /* HAVE_U64_TYPEDEF */
diff --git a/cipher/twofish.c b/cipher/twofish.c
index 6ff7dee9f..d1e171bad 100644
--- a/cipher/twofish.c
+++ b/cipher/twofish.c
@@ -24,6 +24,7 @@
#include "types.h" /* for byte and u32 typedefs */
#include "util.h"
#include "errors.h"
+#include "dynload.h"
/* Prototype for the self-test function. */
@@ -462,7 +463,7 @@ twofish_setkey (TWOFISH_context *ctx, const byte *key, const unsigned keylen)
static const char *selftest_failed=0;
/* Check key length. */
- if( keylen != 16 )
+ if( keylen != 16 ) /* enhance this code for 256 bit keys */
return G10ERR_WRONG_KEYLEN;
/* Do self-test if necessary. */
@@ -840,16 +841,18 @@ twofish_get_info (int algo, size_t *keylen,
void (**r_decrypt) (void *c, byte *outbuf, byte *inbuf)
)
{
- *keylen = 128;
+ *keylen = algo==10? 256 : 128;
*blocksize = 16;
*contextsize = sizeof (TWOFISH_context);
*r_setkey = FNCCAST_SETKEY (twofish_setkey);
*r_encrypt= FNCCAST_CRYPT (twofish_encrypt);
*r_decrypt= FNCCAST_CRYPT (twofish_decrypt);
+ if( algo == 10 )
+ return "TWOFISH";
if (algo == 102) /* This algorithm number is assigned for
* experiments, so we can use it */
- return "TWOFISH";
+ return "TWOFISH128";
return NULL;
}
@@ -863,6 +866,7 @@ static struct {
void (*func)(void);
} func_table[] = {
{ 20, 1, 0, (void(*)(void))twofish_get_info },
+ { 21, 1, 10 },
{ 21, 1, 102 },
};