1 /* 2 * kernel_driver.c 3 * 4 * a test driver for the crypto_kernel 5 * 6 * David A. McGrew 7 * Cisco Systems, Inc. 8 */ 9 /* 10 * 11 * Copyright(c) 2001-2006 Cisco Systems, Inc. 12 * All rights reserved. 13 * 14 * Redistribution and use in source and binary forms, with or without 15 * modification, are permitted provided that the following conditions 16 * are met: 17 * 18 * Redistributions of source code must retain the above copyright 19 * notice, this list of conditions and the following disclaimer. 20 * 21 * Redistributions in binary form must reproduce the above 22 * copyright notice, this list of conditions and the following 23 * disclaimer in the documentation and/or other materials provided 24 * with the distribution. 25 * 26 * Neither the name of the Cisco Systems, Inc. nor the names of its 27 * contributors may be used to endorse or promote products derived 28 * from this software without specific prior written permission. 29 * 30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 31 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 32 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 33 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 34 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 35 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 37 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 41 * OF THE POSSIBILITY OF SUCH DAMAGE. 42 * 43 */ 44 45 46 #include <stdio.h> /* for printf() */ 47 #include <unistd.h> /* for getopt() */ 48 #include "crypto_kernel.h" 49 50 void 51 usage(char *prog_name) { 52 printf("usage: %s [ -v ][ -d debug_module ]*\n", prog_name); 53 exit(255); 54 } 55 56 int 57 main (int argc, char *argv[]) { 58 extern char *optarg; 59 int q; 60 int do_validation = 0; 61 err_status_t status; 62 63 if (argc == 1) 64 usage(argv[0]); 65 66 /* initialize kernel - we need to do this before anything else */ 67 status = crypto_kernel_init(); 68 if (status) { 69 printf("error: crypto_kernel init failed\n"); 70 exit(1); 71 } 72 printf("crypto_kernel successfully initalized\n"); 73 74 /* process input arguments */ 75 while (1) { 76 q = getopt(argc, argv, "vd:"); 77 if (q == -1) 78 break; 79 switch (q) { 80 case 'v': 81 do_validation = 1; 82 break; 83 case 'd': 84 status = crypto_kernel_set_debug_module(optarg, 1); 85 if (status) { 86 printf("error: set debug module (%s) failed\n", optarg); 87 exit(1); 88 } 89 break; 90 default: 91 usage(argv[0]); 92 } 93 } 94 95 if (do_validation) { 96 printf("checking crypto_kernel status...\n"); 97 status = crypto_kernel_status(); 98 if (status) { 99 printf("failed\n"); 100 exit(1); 101 } 102 printf("crypto_kernel passed self-tests\n"); 103 } 104 105 status = crypto_kernel_shutdown(); 106 if (status) { 107 printf("error: crypto_kernel shutdown failed\n"); 108 exit(1); 109 } 110 printf("crypto_kernel successfully shut down\n"); 111 112 return 0; 113 } 114 115 /* 116 * crypto_kernel_cipher_test() is a test of the cipher interface 117 * of the crypto_kernel 118 */ 119 120 err_status_t 121 crypto_kernel_cipher_test(void) { 122 123 /* not implemented yet! */ 124 125 return err_status_ok; 126 } 127