blob: d9d894488e6835a97728821e9f6a16d239a34966 [file] [log] [blame]
/* 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/. */
#ifndef PKISTORE_H
#define PKISTORE_H
#ifndef NSSPKIT_H
#include "nsspkit.h"
#endif /* NSSPKIT_H */
#ifndef BASE_H
#include "base.h"
#endif /* BASE_H */
PR_BEGIN_EXTERN_C
/*
* PKI Stores
*
* This is a set of routines for managing local stores of PKI objects.
* Currently, the only application is in crypto contexts, where the
* certificate store is used. In the future, methods should be added
* here for storing local references to keys.
*/
/*
* nssCertificateStore
*
* Manages local store of certificate, trust, and S/MIME profile objects.
* Within a crypto context, mappings of cert to trust and cert to S/MIME
* profile are always 1-1. Therefore, it is reasonable to store all objects
* in a single collection, indexed by the certificate.
*/
NSS_EXTERN nssCertificateStore *
nssCertificateStore_Create
(
NSSArena *arenaOpt
);
NSS_EXTERN PRStatus
nssCertificateStore_Destroy
(
nssCertificateStore *store
);
/* Atomic Find cert in store, or add this cert to the store.
** Ref counts properly maintained.
*/
NSS_EXTERN NSSCertificate *
nssCertificateStore_FindOrAdd
(
nssCertificateStore *store,
NSSCertificate *c
);
NSS_EXTERN void
nssCertificateStore_RemoveCertLOCKED
(
nssCertificateStore *store,
NSSCertificate *cert
);
struct nssCertificateStoreTraceStr {
nssCertificateStore* store;
PZLock* lock;
PRBool locked;
PRBool unlocked;
};
typedef struct nssCertificateStoreTraceStr nssCertificateStoreTrace;
NSS_EXTERN void
nssCertificateStore_Lock (
nssCertificateStore *store, nssCertificateStoreTrace* out
);
NSS_EXTERN void
nssCertificateStore_Unlock (
nssCertificateStore *store, const nssCertificateStoreTrace* in,
nssCertificateStoreTrace* out
);
NSS_EXTERN NSSCertificate **
nssCertificateStore_FindCertificatesBySubject
(
nssCertificateStore *store,
NSSDER *subject,
NSSCertificate *rvOpt[],
PRUint32 maximumOpt,
NSSArena *arenaOpt
);
NSS_EXTERN NSSCertificate **
nssCertificateStore_FindCertificatesByNickname
(
nssCertificateStore *store,
const NSSUTF8 *nickname,
NSSCertificate *rvOpt[],
PRUint32 maximumOpt,
NSSArena *arenaOpt
);
NSS_EXTERN NSSCertificate **
nssCertificateStore_FindCertificatesByEmail
(
nssCertificateStore *store,
NSSASCII7 *email,
NSSCertificate *rvOpt[],
PRUint32 maximumOpt,
NSSArena *arenaOpt
);
NSS_EXTERN NSSCertificate *
nssCertificateStore_FindCertificateByIssuerAndSerialNumber
(
nssCertificateStore *store,
NSSDER *issuer,
NSSDER *serial
);
NSS_EXTERN NSSCertificate *
nssCertificateStore_FindCertificateByEncodedCertificate
(
nssCertificateStore *store,
NSSDER *encoding
);
NSS_EXTERN PRStatus
nssCertificateStore_AddTrust
(
nssCertificateStore *store,
NSSTrust *trust
);
NSS_EXTERN NSSTrust *
nssCertificateStore_FindTrustForCertificate
(
nssCertificateStore *store,
NSSCertificate *cert
);
NSS_EXTERN PRStatus
nssCertificateStore_AddSMIMEProfile
(
nssCertificateStore *store,
nssSMIMEProfile *profile
);
NSS_EXTERN nssSMIMEProfile *
nssCertificateStore_FindSMIMEProfileForCertificate
(
nssCertificateStore *store,
NSSCertificate *cert
);
NSS_EXTERN void
nssCertificateStore_DumpStoreInfo
(
nssCertificateStore *store,
void (* cert_dump_iter)(const void *, void *, void *),
void *arg
);
PR_END_EXTERN_C
#endif /* PKISTORE_H */