#ifndef _SNACC_UTILS_H_
#define _SNACC_UTILS_H_
#include <Security/cssmtype.h>
#include <Security/x509defs.h>
#include <Security/certextensions.h>
#include <Security/cssmdata.h>
#include "DecodedCert.h"
#include <Security/asn-incl.h>
#include <Security/sm_vdatypes.h>
#include <Security/sm_x501if.h>
#include <Security/sm_x520sa.h>
#include <Security/sm_x411mtsas.h>
#include <Security/sm_x509cmn.h>
#include <Security/sm_x509af.h>
#include <Security/pkcs9oids.h>
#include <Security/sm_x509ce.h>
#include <Security/sm_cms.h>
#include <Security/sm_ess.h>
#ifdef __cplusplus
extern "C" {
#endif
void
CL_certDecodeComponents(
const CssmData &signedCert, CssmOwnedData &TBSCert, CssmOwnedData &algId, CssmOwnedData &sig);
void
CL_certEncodeComponents(
const CssmData &TBSCert, const CssmData &algId, const CssmData &rawSig, CssmOwnedData &signedCert);
void CL_snaccOidToCssm(
const AsnOid &inOid,
CssmOid &outOid,
CssmAllocator &alloc);
void CL_cssmAlgIdToSnacc (
const CSSM_X509_ALGORITHM_IDENTIFIER &cssmAlgId,
AlgorithmIdentifier &snaccAlgId);
void CL_snaccAlgIdToCssm (
const AlgorithmIdentifier &snaccAlgId,
CSSM_X509_ALGORITHM_IDENTIFIER &cssmAlgId,
CssmAllocator &alloc);
CSSM_ALGORITHMS CL_snaccOidToCssmAlg(
const AsnOid &oid);
void CL_cssmAlgToSnaccOid(
CSSM_ALGORITHMS cssmAlg,
AsnOid &oid);
void CL_nullAlgParams(
AlgorithmIdentifier &snaccAlgId);
void CL_AsnOctsToCssmData(
const AsnOcts &octs,
CSSM_DATA &cdata,
CssmAllocator &alloc);
void CL_snaccGeneralNamesToCdsa(
GeneralNames &snaccObj,
CE_GeneralNames &cdsaObj,
CssmAllocator &alloc);
GeneralNames *CL_cdsaGeneralNamesToSnacc(
CE_GeneralNames &cdsaObj);
#define MAX_RDN_SIZE (4 * 1024)
void CL_normalizeString(
char *strPtr,
int &strLen);
void CL_normalizeX509Name(
Name &name,
CssmAllocator &alloc);
CSSM_KEY_PTR CL_extractCSSMKey(
SubjectPublicKeyInfo &snaccKeyInfo,
CssmAllocator &alloc,
const DecodedCert *decodedCert);
void CL_freeCSSMKey(
CSSM_KEY_PTR cssmKey,
CssmAllocator &alloc,
bool freeTop = true);
#ifdef __cplusplus
}
#endif
#endif