/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
 * pkix_pl_crldp.h
 *
 * Crp DP Object Definitions
 *
 */
#include "pkix_pl_common.h"

#ifndef _PKIX_PL_CRLDP_H
#define _PKIX_PL_CRLDP_H

#ifdef __cplusplus
extern "C" {
#endif

/* CRLDP object can not be used without holding a reference
 * to the pkix certificate they belong to. The memory for dp der
 * object is allocated on nssCert certificate - a member of
 * PKIX_PL_Cert struct. */
typedef struct pkix_pl_CrlDpStruct {
    /* reference to decoded crldp that allocated on nssCert arena. */
    const CRLDistributionPoint *nssdp;
    DistributionPointTypes distPointType;
    union {
	CERTGeneralName *fullName;
        /* if dp is a relative name, the issuerName is a merged value
         * of crlIssuer and a relative name. Must be destroyed by CrlDp
         * destructor. */
        CERTName *issuerName;
    } name;
    PKIX_Boolean isPartitionedByReasonCode;
} pkix_pl_CrlDp;


PKIX_Error *
pkix_pl_CrlDp_RegisterSelf(void *plContext);

/* Parses CRLDistributionPoint structure and creaetes
 * pkix_pl_CrlDp object. */
PKIX_Error *
pkix_pl_CrlDp_Create(const CRLDistributionPoint *dp,
                     const CERTName *certIssuerName,
                     pkix_pl_CrlDp **pPkixDP,
                     void *plContext);
#endif /* _PKIX_PL_CRLDP_H */
