--- pgp/src/rsagen.c 2018/04/24 16:39:31 1.1.1.3 +++ pgp/src/rsagen.c 2018/04/24 16:40:22 1.1.1.4 @@ -29,6 +29,7 @@ #include "rsagen.h" /* Define symbol PSEUDORANDOM in random.h to disable truly random numbers. */ #include "random.h" +#include "rsaglue.h" static void derive_rsakeys(unitptr n,unitptr e,unitptr d, unitptr p,unitptr q,unitptr u,short ebits); @@ -282,19 +283,24 @@ int rsa_keygen(unitptr n, unitptr e, uni randflush(); /* ensure recycled random pool is destroyed */ /* Now test key just to make sure --this had better work! */ - { unit M[MAX_UNIT_PRECISION]; - unit C[MAX_UNIT_PRECISION]; - mp_init(M,0x1234); /* material to be signed */ - mp_init(C,0); - status = rsa_decrypt(C,M,d,p,q,u); /* create signature C first */ + { unit C[MAX_UNIT_PRECISION]; + int i; + +/* Create a dummy signature */ + for (i = 0; i < 16; i++) + ((byte *)C)[i] = 3*i+7; +/* Encrypt it */ + status = rsa_private_encrypt(C,(byte *)C,16,e,d,p,q,u,n); if (status < 0) /* modexp error? */ return(status); /* return error status */ - mp_init(M,0); /* ensure test pattern M is destroyed */ - status = mp_modexp(M,C,e,n); /* check signature C */ +/* Extract the signature */ + status = rsa_public_decrypt((byte *)C,C,e,n); if (status < 0) /* modexp error? */ return(status); /* return error status */ - if (testne(M,0x1234)) /* test pattern M recovered? */ - return(KEYFAILED); /* error return, bad key or bad math library */ +/* Verify that we got the same thing back. */ + for (i = 0; i < 16; i++) + if (((byte *)C)[i] != 3*i+7) + return(KEYFAILED); } return(0); /* normal return */ } /* rsa_keygen */