
1: /* ==================================================================== 2: * Copyright (c) 2004 The OpenSSL Project. All rights reserved. 3: * 4: * Redistribution and use in source and binary forms, with or without 5: * modification, are permitted provided that the following conditions 6: * are met: 7: * 8: * 1. Redistributions of source code must retain the above copyright 9: * notice, this list of conditions and the following disclaimer. 10: * 11: * 2. Redistributions in binary form must reproduce the above copyright 12: * notice, this list of conditions and the following disclaimer in 13: * the documentation and/or other materials provided with the 14: * distribution. 15: * 16: * 3. All advertising materials mentioning features or use of this 17: * software must display the following acknowledgment: 18: * "This product includes software developed by the OpenSSL Project 19: * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 20: * 21: * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 22: * endorse or promote products derived from this software without 23: * prior written permission. For written permission, please contact 24: * openssl-core@openssl.org. 25: * 26: * 5. Products derived from this software may not be called "OpenSSL" 27: * nor may "OpenSSL" appear in their names without prior written 28: * permission of the OpenSSL Project. 29: * 30: * 6. Redistributions of any form whatsoever must retain the following 31: * acknowledgment: 32: * "This product includes software developed by the OpenSSL Project 33: * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 34: * 35: * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 36: * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 37: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 38: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 39: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 40: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 41: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 42: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 43: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 44: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 45: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 46: * OF THE POSSIBILITY OF SUCH DAMAGE. 47: * 48: */ 49: 50: #include <string.h> 51: 52: #include "apps.h" 53: #include <openssl/bn.h> 54: 55: 56: #undef PROG 57: #define PROG prime_main 58: 59: int MAIN(int, char **); 60: 61: int MAIN(int argc, char **argv) 62: { 63: int hex=0; 64: int checks=20; 65: BIGNUM *bn=NULL; 66: BIO *bio_out; 67: 68: apps_startup(); 69: 70: if (bio_err == NULL) 71: if ((bio_err=BIO_new(BIO_s_file())) != NULL) 72: BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); 73: 74: --argc; 75: ++argv; 76: while (argc >= 1 && **argv == '-') 77: { 78: if(!strcmp(*argv,"-hex")) 79: hex=1; 80: else if(!strcmp(*argv,"-checks")) 81: if(--argc < 1) 82: goto bad; 83: else 84: checks=atoi(*++argv); 85: else 86: { 87: BIO_printf(bio_err,"Unknown option '%s'\n",*argv); 88: goto bad; 89: } 90: --argc; 91: ++argv; 92: } 93: 94: if (argv[0] == NULL) 95: { 96: BIO_printf(bio_err,"No prime specified\n"); 97: goto bad; 98: } 99: 100: if ((bio_out=BIO_new(BIO_s_file())) != NULL) 101: { 102: BIO_set_fp(bio_out,stdout,BIO_NOCLOSE); 103: #ifdef OPENSSL_SYS_VMS 104: { 105: BIO *tmpbio = BIO_new(BIO_f_linebuffer()); 106: bio_out = BIO_push(tmpbio, bio_out); 107: } 108: #endif 109: } 110: 111: if(hex) 112: BN_hex2bn(&bn,argv[0]); 113: else 114: BN_dec2bn(&bn,argv[0]); 115: 116: BN_print(bio_out,bn); 117: BIO_printf(bio_out," is %sprime\n", 118: BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not "); 119: 120: BN_free(bn); 121: BIO_free_all(bio_out); 122: 123: return 0; 124: 125: bad: 126: BIO_printf(bio_err,"options are\n"); 127: BIO_printf(bio_err,"%-14s hex\n","-hex"); 128: BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>"); 129: return 1; 130: }