* This file is part of the openHiTLS project.
*
* openHiTLS is licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef BSL_PEM_INTERNAL_H
#define BSL_PEM_INTERNAL_H
#include "hitls_build.h"
#ifdef HITLS_BSL_PEM
#include <stdint.h>
#include "bsl_types.h"
#ifdef __cplusplus
extern "C" {
#endif
#define BSL_PEM_CERT_BEGIN_STR "-----BEGIN CERTIFICATE-----"
#define BSL_PEM_CERT_END_STR "-----END CERTIFICATE-----"
#define BSL_PEM_CRL_BEGIN_STR "-----BEGIN X509 CRL-----"
#define BSL_PEM_CRL_END_STR "-----END X509 CRL-----"
#define BSL_PEM_PUB_KEY_BEGIN_STR "-----BEGIN PUBLIC KEY-----"
#define BSL_PEM_PUB_KEY_END_STR "-----END PUBLIC KEY-----"
#define BSL_PEM_RSA_PUB_KEY_BEGIN_STR "-----BEGIN RSA PUBLIC KEY-----"
#define BSL_PEM_RSA_PUB_KEY_END_STR "-----END RSA PUBLIC KEY-----"
#define BSL_PEM_RSA_PRI_KEY_BEGIN_STR "-----BEGIN RSA PRIVATE KEY-----"
#define BSL_PEM_RSA_PRI_KEY_END_STR "-----END RSA PRIVATE KEY-----"
#define BSL_PEM_EC_PRI_KEY_BEGIN_STR "-----BEGIN EC PRIVATE KEY-----"
#define BSL_PEM_EC_PRI_KEY_END_STR "-----END EC PRIVATE KEY-----"
#define BSL_PEM_PRI_KEY_BEGIN_STR "-----BEGIN PRIVATE KEY-----"
#define BSL_PEM_PRI_KEY_END_STR "-----END PRIVATE KEY-----"
#define BSL_PEM_P8_PRI_KEY_BEGIN_STR "-----BEGIN ENCRYPTED PRIVATE KEY-----"
#define BSL_PEM_P8_PRI_KEY_END_STR "-----END ENCRYPTED PRIVATE KEY-----"
#define BSL_PEM_CERT_REQ_BEGIN_STR "-----BEGIN CERTIFICATE REQUEST-----"
#define BSL_PEM_CERT_REQ_END_STR "-----END CERTIFICATE REQUEST-----"
bool BSL_PEM_IsPemFormat(char *encode, uint32_t encodeLen);
int32_t BSL_PEM_GetAsn1Encode(const char *encode, const uint32_t encodeLen, uint8_t **asn1Encode, uint32_t *asn1Len);
typedef struct {
const char *head;
const char *tail;
} BSL_PEM_Symbol;
int32_t BSL_PEM_EncodeAsn1ToPem(uint8_t *asn1Encode, uint32_t asn1Len, BSL_PEM_Symbol *symbol,
char **encode, uint32_t *encodeLen);
int32_t BSL_PEM_DecodePemToAsn1(char **encode, uint32_t *encodeLen, BSL_PEM_Symbol *symbol, uint8_t **asn1Encode,
uint32_t *asn1Len);
int32_t BSL_PEM_GetPemRealEncode(char **encode, uint32_t *encodeLen, BSL_PEM_Symbol *symbol, char **realEncode,
uint32_t *realLen);
int32_t BSL_PEM_GetSymbolAndType(char *encode, uint32_t encodeLen, BSL_PEM_Symbol *symbol, const char **type);
#ifdef __cplusplus
}
#endif
#endif
#endif