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