1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef PKISTORE_H 6 #define PKISTORE_H 7 8 #ifndef NSSPKIT_H 9 #include "nsspkit.h" 10 #endif /* NSSPKIT_H */ 11 12 #ifndef BASE_H 13 #include "base.h" 14 #endif /* BASE_H */ 15 16 PR_BEGIN_EXTERN_C 17 18 /* 19 * PKI Stores 20 * 21 * This is a set of routines for managing local stores of PKI objects. 22 * Currently, the only application is in crypto contexts, where the 23 * certificate store is used. In the future, methods should be added 24 * here for storing local references to keys. 25 */ 26 27 /* 28 * nssCertificateStore 29 * 30 * Manages local store of certificate, trust, and S/MIME profile objects. 31 * Within a crypto context, mappings of cert to trust and cert to S/MIME 32 * profile are always 1-1. Therefore, it is reasonable to store all objects 33 * in a single collection, indexed by the certificate. 34 */ 35 36 NSS_EXTERN nssCertificateStore * 37 nssCertificateStore_Create( 38 NSSArena *arenaOpt); 39 40 NSS_EXTERN PRStatus 41 nssCertificateStore_Destroy( 42 nssCertificateStore *store); 43 44 /* Atomic Find cert in store, or add this cert to the store. 45 ** Ref counts properly maintained. 46 */ 47 NSS_EXTERN NSSCertificate * 48 nssCertificateStore_FindOrAdd( 49 nssCertificateStore *store, 50 NSSCertificate *c); 51 52 NSS_EXTERN void 53 nssCertificateStore_RemoveCertLOCKED( 54 nssCertificateStore *store, 55 NSSCertificate *cert); 56 57 struct nssCertificateStoreTraceStr { 58 nssCertificateStore *store; 59 PZLock *lock; 60 PRBool locked; 61 PRBool unlocked; 62 }; 63 64 typedef struct nssCertificateStoreTraceStr nssCertificateStoreTrace; 65 66 NSS_EXTERN void 67 nssCertificateStore_Lock( 68 nssCertificateStore *store, nssCertificateStoreTrace *out); 69 70 NSS_EXTERN void 71 nssCertificateStore_Unlock( 72 nssCertificateStore *store, const nssCertificateStoreTrace *in, 73 nssCertificateStoreTrace *out); 74 75 NSS_EXTERN NSSCertificate ** 76 nssCertificateStore_FindCertificatesBySubject( 77 nssCertificateStore *store, 78 NSSDER *subject, 79 NSSCertificate *rvOpt[], 80 PRUint32 maximumOpt, 81 NSSArena *arenaOpt); 82 83 NSS_EXTERN NSSCertificate ** 84 nssCertificateStore_FindCertificatesByNickname( 85 nssCertificateStore *store, 86 const NSSUTF8 *nickname, 87 NSSCertificate *rvOpt[], 88 PRUint32 maximumOpt, 89 NSSArena *arenaOpt); 90 91 NSS_EXTERN NSSCertificate ** 92 nssCertificateStore_FindCertificatesByEmail( 93 nssCertificateStore *store, 94 NSSASCII7 *email, 95 NSSCertificate *rvOpt[], 96 PRUint32 maximumOpt, 97 NSSArena *arenaOpt); 98 99 NSS_EXTERN NSSCertificate * 100 nssCertificateStore_FindCertificateByIssuerAndSerialNumber( 101 nssCertificateStore *store, 102 NSSDER *issuer, 103 NSSDER *serial); 104 105 NSS_EXTERN NSSCertificate * 106 nssCertificateStore_FindCertificateByEncodedCertificate( 107 nssCertificateStore *store, 108 NSSDER *encoding); 109 110 NSS_EXTERN PRStatus 111 nssCertificateStore_AddTrust( 112 nssCertificateStore *store, 113 NSSTrust *trust); 114 115 NSS_EXTERN NSSTrust * 116 nssCertificateStore_FindTrustForCertificate( 117 nssCertificateStore *store, 118 NSSCertificate *cert); 119 120 NSS_EXTERN PRStatus 121 nssCertificateStore_AddSMIMEProfile( 122 nssCertificateStore *store, 123 nssSMIMEProfile *profile); 124 125 NSS_EXTERN nssSMIMEProfile * 126 nssCertificateStore_FindSMIMEProfileForCertificate( 127 nssCertificateStore *store, 128 NSSCertificate *cert); 129 130 NSS_EXTERN void 131 nssCertificateStore_DumpStoreInfo( 132 nssCertificateStore *store, 133 void (*cert_dump_iter)(const void *, void *, void *), 134 void *arg); 135 136 PR_END_EXTERN_C 137 138 #endif /* PKISTORE_H */ 139