CLCrlExtensions.cpp [plain text]
#include "DecodedCrl.h"
#include "CLCrlExtensions.h"
#include "CLCertExtensions.h"
#include "clNssUtils.h"
#include "clNameUtils.h"
#include "CLFieldsCommon.h"
#include <security_utilities/utilities.h>
#include <Security/oidscert.h>
#include <Security/cssmerr.h>
#include <Security/x509defs.h>
#include <Security/certextensions.h>
#include <Security/SecAsn1Templates.h>
void setFieldCrlNumber(
DecodedItem &crl,
const CssmData &fieldValue)
{
CSSM_X509_EXTENSION_PTR cssmExt = verifySetFreeExtension(fieldValue,
false);
CE_CrlNumber *cdsaObj = (CE_CrlNumber *)cssmExt->value.parsedValue;
ArenaAllocator alloc(crl.coder());
CSSM_DATA_PTR nssVal = (CSSM_DATA_PTR)alloc.malloc(sizeof(CSSM_DATA));
clIntToData(*cdsaObj, *nssVal, alloc);
crl.addExtension(nssVal, cssmExt->extnId, cssmExt->critical, false,
kSecAsn1IntegerTemplate);
}
bool getFieldCrlCommon(
DecodedItem &crl,
const CSSM_OID &fieldId, unsigned index, uint32 &numFields, CssmOwnedData &fieldValue)
{
const DecodedExten *decodedExt;
CSSM_DATA *nssObj;
CE_CrlNumber *cdsaObj;
bool brtn;
brtn = crl.GetExtenTop<CSSM_DATA, CE_CrlNumber>(
index,
numFields,
fieldValue.allocator,
fieldId,
nssObj,
cdsaObj,
decodedExt);
if(!brtn) {
return false;
}
*cdsaObj = clDataToInt(*nssObj, CSSMERR_CL_INVALID_CRL_POINTER);
getFieldExtenCommon(cdsaObj, *decodedExt, fieldValue);
return true;
}
bool getFieldCrlNumber(
DecodedItem &crl,
unsigned index, uint32 &numFields, CssmOwnedData &fieldValue)
{
return getFieldCrlCommon(crl, CSSMOID_CrlNumber, index, numFields,
fieldValue);
}
bool getFieldDeltaCrl(
DecodedItem &crl,
unsigned index, uint32 &numFields, CssmOwnedData &fieldValue)
{
return getFieldCrlCommon(crl, CSSMOID_DeltaCrlIndicator, index,
numFields, fieldValue);
}
void freeFieldIssuingDistPoint (
CssmOwnedData &fieldValue)
{
CSSM_X509_EXTENSION_PTR cssmExt = verifySetFreeExtension(fieldValue, false);
Allocator &alloc = fieldValue.allocator;
CE_IssuingDistributionPoint *cdsaObj =
(CE_IssuingDistributionPoint *)cssmExt->value.parsedValue;
CL_freeCssmIssuingDistPoint(cdsaObj, alloc);
freeFieldExtenCommon(cssmExt, alloc); }
void freeFieldCrlDistributionPoints (
CssmOwnedData &fieldValue)
{
CSSM_X509_EXTENSION_PTR cssmExt = verifySetFreeExtension(fieldValue, false);
Allocator &alloc = fieldValue.allocator;
CE_CRLDistPointsSyntax *cdsaObj =
(CE_CRLDistPointsSyntax *)cssmExt->value.parsedValue;
CL_freeCssmDistPoints(cdsaObj, alloc);
freeFieldExtenCommon(cssmExt, alloc); }
void freeFieldOidOrData (
CssmOwnedData &fieldValue)
{
CSSM_X509_EXTENSION_PTR cssmExt = verifySetFreeExtension(fieldValue, false);
Allocator &alloc = fieldValue.allocator;
CSSM_DATA *cdsaObj =
(CSSM_DATA *)cssmExt->value.parsedValue;
if(cdsaObj) {
alloc.free(cdsaObj->Data);
}
freeFieldExtenCommon(cssmExt, alloc); }