X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=rsa.c;h=2b4c7293f48071806a7ce4bcde40349a029a823e;hp=d1107a952ef1a0e0ce9198a66ee17e0a6e61c31e;hb=ff05a229397c75142725f45cad191ce4a00625ce;hpb=2fe58dfd10216a37f1ece081f926971882de112e diff --git a/rsa.c b/rsa.c index d1107a9..2b4c729 100644 --- a/rsa.c +++ b/rsa.c @@ -1,29 +1,3 @@ -/*************************************************************************** - * - * Part II Project, "A secure, private IP network" - * Stephen Early - * - * - * $RCSfile: rsa.c,v $ - * - * Description: RSA signature making and checking functions - * - * Copyright: (C) Stephen Early 1995 - * - * $Revision: 1.1 $ - * - * $Date: 1996/05/16 18:40:14 $ - * - * $State: Exp $ - * - ***************************************************************************/ - -/* $Log: rsa.c,v $ - * Revision 1.1 1996/05/16 18:40:14 sde1000 - * Initial revision - * - */ - #include #include #include "secnet.h" @@ -62,6 +36,10 @@ static string_t rsa_sign(void *sst, uint8_t *data, uint32_t datalen) msize=mpz_sizeinbase(&st->n, 16); + if (datalen*2+4>=msize) { + fatal("rsa_sign: message too big\n"); + } + strcpy(buff,"0001"); for (i=0; id, &st->n); - mpz_powm(&check, &sig, &e, &st->n); - if (mpz_cmp(&plain,&check)!=0) { - cfgfatal(loc,"rsa-private","file \"%s\" does not contain a " - "valid RSA key!\n",filename); + i=list_elem(args,1); + if (i && i->type==t_bool && i->data.bool==False) { + Message(M_INFO,"rsa-private (%s:%d): skipping RSA key validity " + "check\n",loc.file,loc.line); + } else { + mpz_init(&sig); + mpz_init(&plain); + mpz_init(&check); + read_mpbin(&plain,c,strlen(c)); + mpz_powm(&sig, &plain, &st->d, &st->n); + mpz_powm(&check, &sig, &e, &st->n); + if (mpz_cmp(&plain,&check)!=0) { + cfgfatal(loc,"rsa-private","file \"%s\" does not contain a " + "valid RSA key!\n",filename); + } + mpz_clear(&sig); + mpz_clear(&plain); + mpz_clear(&check); } - mpz_clear(&sig); - mpz_clear(&plain); - mpz_clear(&check); free(c); mpz_clear(&e); +assume_valid: return new_closure(&st->cl); }