From: Dr. Stephen Henson Date: Tue, 26 Apr 2005 23:02:52 +0000 (+0000) Subject: Port prime utility across from stable branch. X-Git-Tag: OpenSSL_0_9_8-beta1~13^2~111 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=b08868c48a3b6c6130bd79e4ed4b422a8b9b00b9 Port prime utility across from stable branch. --- diff --git a/ChangeLog.0_9_7-stable_not-in-head b/ChangeLog.0_9_7-stable_not-in-head index 441cadc8a2..73c38c8f50 100644 --- a/ChangeLog.0_9_7-stable_not-in-head +++ b/ChangeLog.0_9_7-stable_not-in-head @@ -693,13 +693,6 @@ be added to the end of this file. PR: 900 -2004-06-24 14:12 steve - - Changed: - apps/prime.c (1.1.2.2), "Exp", lines: +3 -0 - - Include to get definition of strcmp. - 2004-06-24 14:31 steve Changed: diff --git a/apps/Makefile b/apps/Makefile index 6b9ea7e2d1..7785009b19 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -46,7 +46,7 @@ E_EXE= verify asn1pars req dgst dh dhparam enc passwd gendh errstr \ ca crl rsa rsautl dsa dsaparam ec ecparam \ x509 genrsa gendsa s_server s_client speed \ s_time version pkcs7 crl2pkcs7 sess_id ciphers nseq pkcs12 \ - pkcs8 spkac smime rand engine ocsp + pkcs8 spkac smime rand engine ocsp prime PROGS= $(PROGRAM).c @@ -63,7 +63,7 @@ E_OBJ= verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o er x509.o genrsa.o gendsa.o s_server.o s_client.o speed.o \ s_time.o $(A_OBJ) $(S_OBJ) $(RAND_OBJ) version.o sess_id.o \ ciphers.o nseq.o pkcs12.o pkcs8.o spkac.o smime.o rand.o engine.o \ - ocsp.o + ocsp.o prime.o E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca.c \ pkcs7.c crl2p7.c crl.c \ @@ -71,7 +71,7 @@ E_SRC= verify.c asn1pars.c req.c dgst.c dh.c enc.c passwd.c gendh.c errstr.c ca. x509.c genrsa.c gendsa.c s_server.c s_client.c speed.c \ s_time.c $(A_SRC) $(S_SRC) $(RAND_SRC) version.c sess_id.c \ ciphers.c nseq.c pkcs12.c pkcs8.c spkac.c smime.c rand.c engine.c \ - ocsp.c + ocsp.c prime.c SRC=$(E_SRC) diff --git a/apps/prime.c b/apps/prime.c new file mode 100644 index 0000000000..1753b3ebc1 --- /dev/null +++ b/apps/prime.c @@ -0,0 +1,128 @@ +/* ==================================================================== + * Copyright (c) 2004 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +#include "apps.h" +#include + + +#undef PROG +#define PROG prime_main + +int MAIN(int argc, char **argv) + { + int hex=0; + int checks=20; + BIGNUM *bn=NULL; + BIO *bio_out; + + apps_startup(); + + if (bio_err == NULL) + if ((bio_err=BIO_new(BIO_s_file())) != NULL) + BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); + + --argc; + ++argv; + while (argc >= 1 && **argv == '-') + { + if(!strcmp(*argv,"-hex")) + hex=1; + else if(!strcmp(*argv,"-checks")) + if(--argc < 1) + goto bad; + else + checks=atoi(*++argv); + else + { + BIO_printf(bio_err,"Unknown option '%s'\n",*argv); + goto bad; + } + --argc; + ++argv; + } + + if (argv[0] == NULL) + { + BIO_printf(bio_err,"No prime specified\n"); + goto bad; + } + + if ((bio_out=BIO_new(BIO_s_file())) != NULL) + { + BIO_set_fp(bio_out,stdout,BIO_NOCLOSE); +#ifdef OPENSSL_SYS_VMS + { + BIO *tmpbio = BIO_new(BIO_f_linebuffer()); + bio_out = BIO_push(tmpbio, bio_out); + } +#endif + } + + if(hex) + BN_hex2bn(&bn,argv[0]); + else + BN_dec2bn(&bn,argv[0]); + + BN_print(bio_out,bn); + BIO_printf(bio_out," is %sprime\n", + BN_is_prime(bn,checks,NULL,NULL,NULL) ? "" : "not "); + + BN_free(bn); + BIO_free_all(bio_out); + + return 0; + + bad: + BIO_printf(bio_err,"options are\n"); + BIO_printf(bio_err,"%-14s hex\n","-hex"); + BIO_printf(bio_err,"%-14s number of checks\n","-checks "); + return 1; + } diff --git a/apps/progs.h b/apps/progs.h index f83dbeaca3..dc665c53a7 100644 --- a/apps/progs.h +++ b/apps/progs.h @@ -39,6 +39,7 @@ extern int smime_main(int argc,char *argv[]); extern int rand_main(int argc,char *argv[]); extern int engine_main(int argc,char *argv[]); extern int ocsp_main(int argc,char *argv[]); +extern int prime_main(int argc,char *argv[]); #define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_MD 2 @@ -125,6 +126,7 @@ FUNCTION functions[] = { {FUNC_TYPE_GENERAL,"engine",engine_main}, #endif {FUNC_TYPE_GENERAL,"ocsp",ocsp_main}, + {FUNC_TYPE_GENERAL,"prime",prime_main}, #ifndef OPENSSL_NO_MD2 {FUNC_TYPE_MD,"md2",dgst_main}, #endif