mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
See ChangeLog: Wed Feb 10 17:15:39 CET 1999 Werner Koch
This commit is contained in:
parent
a16e15282a
commit
9a4f506a18
60 changed files with 2006 additions and 1340 deletions
|
@ -1,3 +1,15 @@
|
|||
Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* 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 <wk@isil.d.shuttle.de>
|
||||
|
||||
* rndunix.c (gather_random): Fix to avoid infinite loop.
|
||||
|
|
|
@ -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_CIPHER_OBJS@
|
||||
libcipher_a_LIBADD = @STATIC_CIPHER_OBJS@
|
||||
|
||||
libcipher_a_DEPENDENCIES = @STATIC_RANDOM_OBJS@ @STATIC_CIPHER_OBJS@
|
||||
libcipher_a_LIBADD = @STATIC_RANDOM_OBJS@ @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
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include "types.h"
|
||||
#include "errors.h"
|
||||
#include "blowfish.h"
|
||||
#include "dynload.h"
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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*/
|
||||
|
|
65
cipher/md.c
65
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;
|
||||
}
|
||||
|
|
57
cipher/md5.c
57
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 */
|
||||
|
|
34
cipher/md5.h
34
cipher/md5.h
|
@ -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*/
|
|
@ -170,6 +170,7 @@ load_pubkey_modules()
|
|||
|
||||
|
||||
if( !initialized ) {
|
||||
cipher_modules_constructor();
|
||||
setup_pubkey_table();
|
||||
initialized = 1;
|
||||
return 1;
|
||||
|
|
|
@ -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
|
||||
|
|
12
cipher/rmd.h
12
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*/
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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*/
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 },
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue