Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
pem.h
00001 /** 00002 * \file pem.h 00003 * 00004 * \brief Privacy Enhanced Mail (PEM) decoding 00005 * 00006 * Copyright (C) 2006-2013, Brainspark B.V. 00007 * 00008 * This file is part of PolarSSL (http://www.polarssl.org) 00009 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> 00010 * 00011 * All rights reserved. 00012 * 00013 * This program is free software; you can redistribute it and/or modify 00014 * it under the terms of the GNU General Public License as published by 00015 * the Free Software Foundation; either version 2 of the License, or 00016 * (at your option) any later version. 00017 * 00018 * This program is distributed in the hope that it will be useful, 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00021 * GNU General Public License for more details. 00022 * 00023 * You should have received a copy of the GNU General Public License along 00024 * with this program; if not, write to the Free Software Foundation, Inc., 00025 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00026 */ 00027 #ifndef POLARSSL_PEM_H 00028 #define POLARSSL_PEM_H 00029 00030 #include <string.h> 00031 00032 /** 00033 * \name PEM Error codes 00034 * These error codes are returned in case of errors reading the 00035 * PEM data. 00036 * \{ 00037 */ 00038 #define POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT -0x1080 /**< No PEM header or footer found. */ 00039 #define POLARSSL_ERR_PEM_INVALID_DATA -0x1100 /**< PEM string is not as expected. */ 00040 #define POLARSSL_ERR_PEM_MALLOC_FAILED -0x1180 /**< Failed to allocate memory. */ 00041 #define POLARSSL_ERR_PEM_INVALID_ENC_IV -0x1200 /**< RSA IV is not in hex-format. */ 00042 #define POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG -0x1280 /**< Unsupported key encryption algorithm. */ 00043 #define POLARSSL_ERR_PEM_PASSWORD_REQUIRED -0x1300 /**< Private key password can't be empty. */ 00044 #define POLARSSL_ERR_PEM_PASSWORD_MISMATCH -0x1380 /**< Given private key password does not allow for correct decryption. */ 00045 #define POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE -0x1400 /**< Unavailable feature, e.g. hashing/encryption combination. */ 00046 #define POLARSSL_ERR_PEM_BAD_INPUT_DATA -0x1480 /**< Bad input parameters to function. */ 00047 /* \} name */ 00048 00049 #ifdef __cplusplus 00050 extern "C" { 00051 #endif 00052 00053 #if defined(POLARSSL_PEM_PARSE_C) 00054 /** 00055 * \brief PEM context structure 00056 */ 00057 typedef struct 00058 { 00059 unsigned char *buf ; /*!< buffer for decoded data */ 00060 size_t buflen ; /*!< length of the buffer */ 00061 unsigned char *info ; /*!< buffer for extra header information */ 00062 } 00063 pem_context; 00064 00065 /** 00066 * \brief PEM context setup 00067 * 00068 * \param ctx context to be initialized 00069 */ 00070 void pem_init( pem_context *ctx ); 00071 00072 /** 00073 * \brief Read a buffer for PEM information and store the resulting 00074 * data into the specified context buffers. 00075 * 00076 * \param ctx context to use 00077 * \param header header string to seek and expect 00078 * \param footer footer string to seek and expect 00079 * \param data source data to look in 00080 * \param pwd password for decryption (can be NULL) 00081 * \param pwdlen length of password 00082 * \param use_len destination for total length used (set after header is 00083 * correctly read, so unless you get 00084 * POLARSSL_ERR_PEM_BAD_INPUT_DATA or 00085 * POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT, use_len is 00086 * the length to skip) 00087 * 00088 * \note Attempts to check password correctness by verifying if 00089 * the decrypted text starts with an ASN.1 sequence of 00090 * appropriate length 00091 * 00092 * \return 0 on success, or a specific PEM error code 00093 */ 00094 int pem_read_buffer( pem_context *ctx, const char *header, const char *footer, 00095 const unsigned char *data, 00096 const unsigned char *pwd, 00097 size_t pwdlen, size_t *use_len ); 00098 00099 /** 00100 * \brief PEM context memory freeing 00101 * 00102 * \param ctx context to be freed 00103 */ 00104 void pem_free( pem_context *ctx ); 00105 #endif /* POLARSSL_PEM_PARSE_C */ 00106 00107 #if defined(POLARSSL_PEM_WRITE_C) 00108 /** 00109 * \brief Write a buffer of PEM information from a DER encoded 00110 * buffer. 00111 * 00112 * \param header header string to write 00113 * \param footer footer string to write 00114 * \param der_data DER data to write 00115 * \param der_len length of the DER data 00116 * \param buf buffer to write to 00117 * \param buf_len length of output buffer 00118 * \param olen total length written / required (if buf_len is not enough) 00119 * 00120 * \return 0 on success, or a specific PEM or BASE64 error code. On 00121 * POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL olen is the required 00122 * size. 00123 */ 00124 int pem_write_buffer( const char *header, const char *footer, 00125 const unsigned char *der_data, size_t der_len, 00126 unsigned char *buf, size_t buf_len, size_t *olen ); 00127 #endif /* POLARSSL_PEM_WRITE_C */ 00128 00129 #ifdef __cplusplus 00130 } 00131 #endif 00132 00133 #endif /* pem.h */ 00134 00135
Generated on Tue Jul 12 2022 19:40:19 by
1.7.2