195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * All rights reserved. 395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This package is an SSL implementation written 595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * by Eric Young (eay@cryptsoft.com). 695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The implementation was written so as to conform with Netscapes SSL. 795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This library is free for commercial and non-commercial use as long as 995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the following conditions are aheared to. The following conditions 1095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * apply to all code found in this distribution, be it the RC4, RSA, 1195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * included with this distribution is covered by the same copyright terms 1395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com). 1495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Copyright remains Eric Young's, and as such any Copyright notices in 1695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the code are not to be removed. 1795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * If this package is used in a product, Eric Young should be given attribution 1895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * as the author of the parts of the library used. 1995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This can be in the form of a textual message at program startup or 2095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * in documentation (online or textual) provided with the package. 2195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Redistribution and use in source and binary forms, with or without 2395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * modification, are permitted provided that the following conditions 2495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * are met: 2595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1. Redistributions of source code must retain the copyright 2695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer. 2795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2. Redistributions in binary form must reproduce the above copyright 2895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer in the 2995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * documentation and/or other materials provided with the distribution. 3095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 3. All advertising materials mentioning features or use of this software 3195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * must display the following acknowledgement: 3295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes cryptographic software written by 3395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Eric Young (eay@cryptsoft.com)" 3495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The word 'cryptographic' can be left out if the rouines from the library 3595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * being used are not cryptographic related :-). 3695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4. If you include any Windows specific code (or a derivative thereof) from 3795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the apps directory (application code) you must include an acknowledgement: 3895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 3995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 4995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SUCH DAMAGE. 5195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 5295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The licence and distribution terms for any publically available version or 5395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * derivative of this code cannot be changed. i.e. this code cannot simply be 5495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * copied and put under another distribution licence 5595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * [including the GNU Public Licence.] 5695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 5795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* ==================================================================== 5895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. 5995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Redistribution and use in source and binary forms, with or without 6195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * modification, are permitted provided that the following conditions 6295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * are met: 6395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1. Redistributions of source code must retain the above copyright 6595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer. 6695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2. Redistributions in binary form must reproduce the above copyright 6895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer in 6995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the documentation and/or other materials provided with the 7095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * distribution. 7195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 7295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 3. All advertising materials mentioning features or use of this 7395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * software must display the following acknowledgment: 7495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes software developed by the OpenSSL Project 7595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 7695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 7795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 7895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * endorse or promote products derived from this software without 7995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * prior written permission. For written permission, please contact 8095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * openssl-core@openssl.org. 8195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 8295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 5. Products derived from this software may not be called "OpenSSL" 8395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * nor may "OpenSSL" appear in their names without prior written 8495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * permission of the OpenSSL Project. 8595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 8695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 6. Redistributions of any form whatsoever must retain the following 8795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * acknowledgment: 8895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes software developed by the OpenSSL Project 8995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * for use in the OpenSSL Toolkit (http://www.openssl.org/)" 9095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 9195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 9295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 9395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 9495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 9595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 9695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 9795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 9895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 9995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 10095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 10195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 10295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OF THE POSSIBILITY OF SUCH DAMAGE. 10395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ==================================================================== 10495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 10595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This product includes cryptographic software written by Eric Young 10695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * (eay@cryptsoft.com). This product includes software written by Tim 10795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Hudson (tjh@cryptsoft.com). */ 10895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 10995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <stdio.h> 11095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 11195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/bio.h> 11295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/dh.h> 11395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/dsa.h> 11495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/evp.h> 11595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/pem.h> 11695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/*#include <openssl/pkcs7.h> */ 11795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/rsa.h> 11895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/x509.h> 11995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa); 12295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa); 12395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic EC_KEY *pkey_get_eckey(EVP_PKEY *key, EC_KEY **eckey); 12495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12695c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw(X509_REQ, X509_REQ, PEM_STRING_X509_REQ, X509_REQ) 12795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12895c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_write(X509_REQ_NEW, X509_REQ, PEM_STRING_X509_REQ_OLD, X509_REQ) 12995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 13095c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw(X509_CRL, X509_CRL, PEM_STRING_X509_CRL, X509_CRL) 13195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 13295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 13395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 13495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* We treat RSA or DSA private keys as a special case. 13595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 13695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * For private keys we read in an EVP_PKEY structure with 13795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * PEM_read_bio_PrivateKey() and extract the relevant private 13895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * key: this means can handle "traditional" and PKCS#8 formats 13995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * transparently. 14095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley */ 14195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 14295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa) 14395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 14495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley RSA *rtmp; 14595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(!key) return NULL; 14695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rtmp = EVP_PKEY_get1_RSA(key); 14795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY_free(key); 14895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(!rtmp) return NULL; 14995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(rsa) { 15095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley RSA_free(*rsa); 15195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *rsa = rtmp; 15295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 15395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return rtmp; 15495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 15595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 15695c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyRSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **rsa, pem_password_cb *cb, 15795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *u) 15895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 15995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *pktmp; 16095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley pktmp = PEM_read_bio_PrivateKey(bp, NULL, cb, u); 16195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return pkey_get_rsa(pktmp, rsa); 16295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 16395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 16495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifndef OPENSSL_NO_FP_API 16595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 16695c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyRSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **rsa, pem_password_cb *cb, 16795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *u) 16895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 16995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *pktmp; 17095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley pktmp = PEM_read_PrivateKey(fp, NULL, cb, u); 17195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return pkey_get_rsa(pktmp, rsa); 17295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 17395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 17495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 17595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 17695c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_write_cb_const(RSAPrivateKey, RSA, PEM_STRING_RSA, RSAPrivateKey) 17795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 17895c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw_const(RSAPublicKey, RSA, PEM_STRING_RSA_PUBLIC, RSAPublicKey) 17995c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw(RSA_PUBKEY, RSA, PEM_STRING_PUBLIC, RSA_PUBKEY) 18095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 18195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifndef OPENSSL_NO_DSA 18295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 18395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic DSA *pkey_get_dsa(EVP_PKEY *key, DSA **dsa) 18495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 18595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DSA *dtmp; 18695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(!key) return NULL; 18795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley dtmp = EVP_PKEY_get1_DSA(key); 18895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY_free(key); 18995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(!dtmp) return NULL; 19095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(dsa) { 19195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley DSA_free(*dsa); 19295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *dsa = dtmp; 19395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 19495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return dtmp; 19595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 19695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 19795c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyDSA *PEM_read_bio_DSAPrivateKey(BIO *bp, DSA **dsa, pem_password_cb *cb, 19895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *u) 19995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 20095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *pktmp; 20195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley pktmp = PEM_read_bio_PrivateKey(bp, NULL, cb, u); 20295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return pkey_get_dsa(pktmp, dsa); /* will free pktmp */ 20395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 20495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 20595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 20695c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_write_cb_const(DSAPrivateKey, DSA, PEM_STRING_DSA, DSAPrivateKey) 20795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 20895c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw(DSA_PUBKEY, DSA, PEM_STRING_PUBLIC, DSA_PUBKEY) 20995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 21095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifndef OPENSSL_NO_FP_API 21195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 21295c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyDSA *PEM_read_DSAPrivateKey(FILE *fp, DSA **dsa, pem_password_cb *cb, 21395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *u) 21495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 21595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *pktmp; 21695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley pktmp = PEM_read_PrivateKey(fp, NULL, cb, u); 21795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return pkey_get_dsa(pktmp, dsa); /* will free pktmp */ 21895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 21995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 22195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22295c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw_const(DSAparams, DSA, PEM_STRING_DSAPARAMS, DSAparams) 22395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 22595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystatic EC_KEY *pkey_get_eckey(EVP_PKEY *key, EC_KEY **eckey) 22895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 22995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY *dtmp; 23095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(!key) return NULL; 23195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley dtmp = EVP_PKEY_get1_EC_KEY(key); 23295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY_free(key); 23395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(!dtmp) return NULL; 23495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley if(eckey) 23595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 23695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EC_KEY_free(*eckey); 23795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley *eckey = dtmp; 23895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 23995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return dtmp; 24095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 24195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 24295c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyEC_KEY *PEM_read_bio_ECPrivateKey(BIO *bp, EC_KEY **key, pem_password_cb *cb, 24395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *u) 24495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 24595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *pktmp; 24695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley pktmp = PEM_read_bio_PrivateKey(bp, NULL, cb, u); 24795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return pkey_get_eckey(pktmp, key); /* will free pktmp */ 24895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 24995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 25095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* TODO(fork): remove this code? */ 25195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* IMPLEMENT_PEM_rw_const(ECPKParameters, EC_GROUP, PEM_STRING_ECPARAMETERS, ECPKParameters) */ 25295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 25395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 25495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 25595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 25695c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_write_cb(ECPrivateKey, EC_KEY, PEM_STRING_ECPRIVATEKEY, ECPrivateKey) 25795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 25895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 25995c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw(EC_PUBKEY, EC_KEY, PEM_STRING_PUBLIC, EC_PUBKEY) 26095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 26195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifndef OPENSSL_NO_FP_API 26295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 26395c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyEC_KEY *PEM_read_ECPrivateKey(FILE *fp, EC_KEY **eckey, pem_password_cb *cb, 26495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *u) 26595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 26695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *pktmp; 26795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley pktmp = PEM_read_PrivateKey(fp, NULL, cb, u); 26895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley return pkey_get_eckey(pktmp, eckey); /* will free pktmp */ 26995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 27095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 27195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 27295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 27395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 27495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 27595c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_write_const(DHparams, DH, PEM_STRING_DHPARAMS, DHparams) 27695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 27795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* TODO(fork): remove this code? */ 27895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* IMPLEMENT_PEM_write_const(DHxparams, DH, PEM_STRING_DHXPARAMS, DHxparams) */ 27995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 28095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 28195c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyIMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY) 282