2 * COPYRIGHT (C) 1990 DIGITAL EQUIPMENT CORPORATION
5 * "Digital Equipment Corporation authorizes the reproduction,
6 * distribution and modification of this software subject to the following
9 * 1. Any partial or whole copy of this software, or any modification
10 * thereof, must include this copyright notice in its entirety.
12 * 2. This software is supplied "as is" with no warranty of any kind,
13 * expressed or implied, for any purpose, including any warranty of fitness
14 * or merchantibility. DIGITAL assumes no responsibility for the use or
15 * reliability of this software, nor promises to provide any form of
16 * support for it on any basis.
18 * 3. Distribution of this software is authorized only if no profit or
19 * remuneration of any kind is received in exchange for such distribution.
21 * 4. This software produces public key authentication certificates
22 * bearing an expiration date established by DIGITAL and RSA Data
23 * Security, Inc. It may cease to generate certificates after the expiration
24 * date. Any modification of this software that changes or defeats
25 * the expiration date or its effect is unauthorized.
27 * 5. Software that will renew or extend the expiration date of
28 * authentication certificates produced by this software may be obtained
29 * from RSA Data Security, Inc., 10 Twin Dolphin Drive, Redwood City, CA
30 * 94065, (415)595-8782, or from DIGITAL"
35 #include <sys/types.h>
39 #include "bigrsacode.h"
40 #include "bigkeygen.h"
48 /* given two primes in msb-lsg order, initialize the key structure */
50 int KeyFromPQ ( P, PL, Q, QL, keys )
55 BigNum p = keys->p, q = keys->q ;
60 memset(keys,0,sizeof(RSAKeyStorage));
63 DecodeBigInteger(P, p, PL);
64 DecodeBigInteger(Q, q, QL);
66 pl = BnnNumDigits(p, (PL+sizeof(BigNumDigit))/sizeof(BigNumDigit));
67 ql = BnnNumDigits(q, (QL+sizeof(BigNumDigit))/sizeof(BigNumDigit));
69 if (BnnCompare(p, pl, q, ql) == -1) {
71 BigNumDigit tp[DigitLim];
72 BnnSetToZero(tp,DigitLim);
84 BnnSetDigit(keys->e, (BigNumDigit) ((1<<16)+1));
87 BnnMultiply(keys->n, pl+ql, p, pl, q, ql),
94 if (FinishKey(keys)==0) return (0);
96 if (TestRSAKeys(keys)!=1) {
98 printf("\nFailed.\n");