1 /*- 2 * Copyright (c) 2012 Alistair Crooks <agc@NetBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 #include <stdio.h> 26 #include <stdlib.h> 27 #include <string.h> 28 #include <unistd.h> 29 #include <pwd.h> 30 31 #include "rsa.h" 32 #include "rsastubs.h" 33 34 #ifndef USE_ARG 35 #define USE_ARG(x) /*LINTED*/(void)&(x) 36 #endif 37 38 static int 39 pass_cb(char *buf, int size, int rwflag, void *u) 40 { 41 char *passphrase; 42 char prompt[128]; 43 44 USE_ARG(rwflag); 45 snprintf(prompt, sizeof(prompt), "\"%s\" passphrase: ", (char *)u); 46 if ((passphrase = getpass(prompt)) == NULL) { 47 return -1; 48 } 49 (void) memcpy(buf, passphrase, (size_t)size); 50 return (int)strlen(passphrase); 51 } 52 53 RSA * 54 PEM_read_RSAPrivateKey(FILE *fp, RSA **x, pem_password_cb *cb, void *u) 55 { 56 char phrase[128 + 1]; 57 RSA *rsa; 58 int cc; 59 60 fprintf(stderr, "Stubbed PEM_read_RSAPrivateKey\n"); 61 USE_ARG(u); 62 if (cb == NULL) { 63 cb = pass_cb; 64 } 65 cc = (*cb)(phrase, sizeof(phrase), 0, u); 66 rsa = *x = RSA_new(); 67 USE_ARG(fp); 68 return rsa; 69 } 70 71 DSA * 72 PEM_read_DSAPrivateKey(FILE *fp, DSA **x, pem_password_cb *cb, void *u) 73 { 74 DSA *dsa; 75 76 USE_ARG(u); 77 if (cb == NULL) { 78 cb = pass_cb; 79 } 80 dsa = *x = DSA_new(); 81 USE_ARG(fp); 82 return dsa; 83 } 84