#ifndef _CL_NSS_UTILS_H_
#define _CL_NSS_UTILS_H_
#include <security_asn1/SecNssCoder.h>
#include <Security/certExtensionTemplates.h>
#include <security_utilities/alloc.h>
#include <Security/cssm.h>
#include "DecodedCert.h"
class ArenaAllocator : public Security::Allocator
{
NOCOPY(ArenaAllocator)
public:
ArenaAllocator(SecNssCoder &coder)
: mCoder(coder) { }
~ArenaAllocator() { }
void *malloc(size_t) throw(std::bad_alloc) ;
void free(void *) throw() ;
void *realloc(void *, size_t) throw(std::bad_alloc);
private:
SecNssCoder &mCoder;
};
void clAllocData(
Allocator &alloc,
CSSM_DATA &dst,
size_t len);
void clAllocCopyData(
Allocator &alloc,
const CSSM_DATA &src,
CSSM_DATA &dst);
bool clCompareCssmData(
const CSSM_DATA *data1,
const CSSM_DATA *data2);
uint32 clDataToInt(
const CSSM_DATA &cdata,
CSSM_RETURN toThrow = CSSMERR_CL_INVALID_CERT_POINTER);
void clIntToData(
uint32 num,
CSSM_DATA &cdata,
Allocator &alloc);
CSSM_BOOL clNssBoolToCssm(
const CSSM_DATA &nssBool);
void clCssmBoolToNss(
CSSM_BOOL cBool,
CSSM_DATA &nssBool,
Allocator &alloc);
void clCssmBitStringToNss(
CSSM_DATA &b);
void clNssBitStringToCssm(
CSSM_DATA &b);
unsigned clNssArraySize(
const void **array);
void **clNssNullArray(
uint32 num,
SecNssCoder &coder);
CE_KeyUsage clBitStringToKeyUsage(
const CSSM_DATA &cdata);
CSSM_ALGORITHMS CL_oidToAlg(
const CSSM_OID &oid);
void CL_copyAlgId(
const CSSM_X509_ALGORITHM_IDENTIFIER &srcAlgId,
CSSM_X509_ALGORITHM_IDENTIFIER &destAlgId,
Allocator &alloc);
void CL_freeCssmAlgId(
CSSM_X509_ALGORITHM_IDENTIFIER *cdsaObj, Allocator &alloc);
bool CL_nssTimeToCssm(
const NSS_Time &derTime,
CSSM_X509_TIME &cssmObj,
Allocator &alloc);
void CL_cssmTimeToNss(
const CSSM_X509_TIME &cssmTime,
NSS_Time &nssTime,
SecNssCoder &coder);
void CL_freeCssmTime(
CSSM_X509_TIME *cssmTime,
Allocator &alloc);
void CL_nullAlgParams(
CSSM_X509_ALGORITHM_IDENTIFIER &algId);
void CL_copySubjPubKeyInfo(
const CSSM_X509_SUBJECT_PUBLIC_KEY_INFO &srcInfo,
bool srcInBits,
CSSM_X509_SUBJECT_PUBLIC_KEY_INFO &dstInfo,
bool dstInBits,
Allocator &alloc);
CSSM_KEY_PTR CL_extractCSSMKeyNSS(
const CSSM_X509_SUBJECT_PUBLIC_KEY_INFO &keyInfo,
Allocator &alloc,
const DecodedCert *decodedCert); void CL_CSSMKeyToSubjPubKeyInfoNSS(
const CSSM_KEY &cssmKey,
CSSM_X509_SUBJECT_PUBLIC_KEY_INFO &nssKeyInfo,
SecNssCoder &coder);
void CL_freeCSSMKey(
CSSM_KEY_PTR cssmKey,
Allocator &alloc,
bool freeTop = true);
void CL_cssmAuthorityKeyIdToNss(
const CE_AuthorityKeyID &cdsaObj,
NSS_AuthorityKeyId &nssObj,
SecNssCoder &coder);
void CL_nssAuthorityKeyIdToCssm(
const NSS_AuthorityKeyId &nssObj,
CE_AuthorityKeyID &cdsaObj,
SecNssCoder &coder, Allocator &alloc);
void CL_cssmInfoAccessToNss(
const CE_AuthorityInfoAccess &cdsaObj,
NSS_AuthorityInfoAccess &nssObj,
SecNssCoder &coder);
void CL_infoAccessToCssm(
const NSS_AuthorityInfoAccess &nssObj,
CE_AuthorityInfoAccess &cdsaObj,
SecNssCoder &coder, Allocator &alloc);
void CL_freeInfoAccess(
CE_AuthorityInfoAccess &cssmInfo,
Allocator &alloc);
void CL_cssmQualCertStatementsToNss(
const CE_QC_Statements &cdsaObj,
NSS_QC_Statements &nssObj,
SecNssCoder &coder);
void CL_qualCertStatementsToCssm(
const NSS_QC_Statements &nssObj,
CE_QC_Statements &cdsaObj,
SecNssCoder &coder, Allocator &alloc);
void CL_freeQualCertStatements(
CE_QC_Statements &cssmQCs,
Allocator &alloc);
void CL_decodeDistributionPointName(
const CSSM_DATA &nssBlob,
CE_DistributionPointName &cssmDpn,
SecNssCoder &coder,
Allocator &alloc);
void CL_encodeDistributionPointName(
CE_DistributionPointName &cpoint,
CSSM_DATA &npoint,
SecNssCoder &coder);
void CL_cssmDistPointsToNss(
const CE_CRLDistPointsSyntax &cdsaObj,
NSS_CRLDistributionPoints &nssObj,
SecNssCoder &coder);
void CL_nssDistPointsToCssm(
const NSS_CRLDistributionPoints &nssObj,
CE_CRLDistPointsSyntax &cdsaObj,
SecNssCoder &coder, Allocator &alloc);
void CL_nssIssuingDistPointToCssm(
NSS_IssuingDistributionPoint *nssIdp,
CE_IssuingDistributionPoint *cssmIdp,
SecNssCoder &coder,
Allocator &alloc);
void CL_cssmNameConstraintsToNss(
const CE_NameConstraints &cdsaObj,
NSS_NameConstraints &nssObj,
SecNssCoder &coder);
void CL_nssNameConstraintsToCssm(
const NSS_NameConstraints &nssObj,
CE_NameConstraints &cdsaObj,
SecNssCoder &coder, Allocator &alloc);
void CL_freeCssmNameConstraints(
CE_NameConstraints *cssmNcs,
Allocator &alloc);
void CL_cssmPolicyMappingsToNss(
const CE_PolicyMappings &cdsaObj,
NSS_PolicyMappings &nssObj,
SecNssCoder &coder);
void CL_nssPolicyMappingsToCssm(
const NSS_PolicyMappings &nssObj,
CE_PolicyMappings &cdsaObj,
SecNssCoder &coder, Allocator &alloc);
void CL_freeCssmPolicyMappings(
CE_PolicyMappings *cssmPms,
Allocator &alloc);
void CL_cssmPolicyConstraintsToNss(
const CE_PolicyConstraints *cdsaObj,
NSS_PolicyConstraints *nssObj,
SecNssCoder &coder);
void CL_nssPolicyConstraintsToCssm(
const NSS_PolicyConstraints *nssObj,
CE_PolicyConstraints *cdsaObj,
SecNssCoder &coder, Allocator &alloc);
void CL_freeCssmPolicyConstraints(
CE_PolicyConstraints *cssmPcs,
Allocator &alloc);
CSSM_ALGORITHMS CL_nssDecodeECDSASigAlgParams(
const CSSM_DATA &algParams,
SecNssCoder &coder);
void CL_certCrlDecodeComponents(
const CssmData &signedItem, CssmOwnedData &tbsBlob, CssmOwnedData &algId, CssmOwnedData &rawSig); void
CL_certEncodeComponents(
const CssmData &TBSCert, const CssmData &algId, const CssmData &rawSig, CssmOwnedData &signedCert);
#endif