Line data Source code
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 : #include "nsNSSCertTrust.h"
6 :
7 : void
8 0 : nsNSSCertTrust::AddCATrust(bool ssl, bool email, bool objSign)
9 : {
10 0 : if (ssl) {
11 0 : addTrust(&mTrust.sslFlags, CERTDB_TRUSTED_CA);
12 0 : addTrust(&mTrust.sslFlags, CERTDB_TRUSTED_CLIENT_CA);
13 : }
14 0 : if (email) {
15 0 : addTrust(&mTrust.emailFlags, CERTDB_TRUSTED_CA);
16 0 : addTrust(&mTrust.emailFlags, CERTDB_TRUSTED_CLIENT_CA);
17 : }
18 0 : if (objSign) {
19 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CA);
20 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CLIENT_CA);
21 : }
22 0 : }
23 :
24 : void
25 0 : nsNSSCertTrust::AddPeerTrust(bool ssl, bool email, bool objSign)
26 : {
27 0 : if (ssl)
28 0 : addTrust(&mTrust.sslFlags, CERTDB_TRUSTED);
29 0 : if (email)
30 0 : addTrust(&mTrust.emailFlags, CERTDB_TRUSTED);
31 0 : if (objSign)
32 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED);
33 0 : }
34 :
35 0 : nsNSSCertTrust::nsNSSCertTrust()
36 : {
37 0 : memset(&mTrust, 0, sizeof(CERTCertTrust));
38 0 : }
39 :
40 0 : nsNSSCertTrust::nsNSSCertTrust(unsigned int ssl,
41 : unsigned int email,
42 0 : unsigned int objsign)
43 : {
44 0 : memset(&mTrust, 0, sizeof(CERTCertTrust));
45 0 : addTrust(&mTrust.sslFlags, ssl);
46 0 : addTrust(&mTrust.emailFlags, email);
47 0 : addTrust(&mTrust.objectSigningFlags, objsign);
48 0 : }
49 :
50 0 : nsNSSCertTrust::nsNSSCertTrust(CERTCertTrust *t)
51 : {
52 0 : if (t)
53 0 : memcpy(&mTrust, t, sizeof(CERTCertTrust));
54 : else
55 0 : memset(&mTrust, 0, sizeof(CERTCertTrust));
56 0 : }
57 :
58 0 : nsNSSCertTrust::~nsNSSCertTrust()
59 : {
60 0 : }
61 :
62 : void
63 0 : nsNSSCertTrust::SetSSLTrust(bool peer, bool tPeer,
64 : bool ca, bool tCA, bool tClientCA,
65 : bool user, bool warn)
66 : {
67 0 : mTrust.sslFlags = 0;
68 0 : if (peer || tPeer)
69 0 : addTrust(&mTrust.sslFlags, CERTDB_TERMINAL_RECORD);
70 0 : if (tPeer)
71 0 : addTrust(&mTrust.sslFlags, CERTDB_TRUSTED);
72 0 : if (ca || tCA)
73 0 : addTrust(&mTrust.sslFlags, CERTDB_VALID_CA);
74 0 : if (tClientCA)
75 0 : addTrust(&mTrust.sslFlags, CERTDB_TRUSTED_CLIENT_CA);
76 0 : if (tCA)
77 0 : addTrust(&mTrust.sslFlags, CERTDB_TRUSTED_CA);
78 0 : if (user)
79 0 : addTrust(&mTrust.sslFlags, CERTDB_USER);
80 0 : if (warn)
81 0 : addTrust(&mTrust.sslFlags, CERTDB_SEND_WARN);
82 0 : }
83 :
84 : void
85 0 : nsNSSCertTrust::SetEmailTrust(bool peer, bool tPeer,
86 : bool ca, bool tCA, bool tClientCA,
87 : bool user, bool warn)
88 : {
89 0 : mTrust.emailFlags = 0;
90 0 : if (peer || tPeer)
91 0 : addTrust(&mTrust.emailFlags, CERTDB_TERMINAL_RECORD);
92 0 : if (tPeer)
93 0 : addTrust(&mTrust.emailFlags, CERTDB_TRUSTED);
94 0 : if (ca || tCA)
95 0 : addTrust(&mTrust.emailFlags, CERTDB_VALID_CA);
96 0 : if (tClientCA)
97 0 : addTrust(&mTrust.emailFlags, CERTDB_TRUSTED_CLIENT_CA);
98 0 : if (tCA)
99 0 : addTrust(&mTrust.emailFlags, CERTDB_TRUSTED_CA);
100 0 : if (user)
101 0 : addTrust(&mTrust.emailFlags, CERTDB_USER);
102 0 : if (warn)
103 0 : addTrust(&mTrust.emailFlags, CERTDB_SEND_WARN);
104 0 : }
105 :
106 : void
107 0 : nsNSSCertTrust::SetObjSignTrust(bool peer, bool tPeer,
108 : bool ca, bool tCA, bool tClientCA,
109 : bool user, bool warn)
110 : {
111 0 : mTrust.objectSigningFlags = 0;
112 0 : if (peer || tPeer)
113 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_TERMINAL_RECORD);
114 0 : if (tPeer)
115 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED);
116 0 : if (ca || tCA)
117 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_VALID_CA);
118 0 : if (tClientCA)
119 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CLIENT_CA);
120 0 : if (tCA)
121 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_TRUSTED_CA);
122 0 : if (user)
123 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_USER);
124 0 : if (warn)
125 0 : addTrust(&mTrust.objectSigningFlags, CERTDB_SEND_WARN);
126 0 : }
127 :
128 : void
129 0 : nsNSSCertTrust::SetValidCA()
130 : {
131 : SetSSLTrust(false, false,
132 : true, false, false,
133 0 : false, false);
134 : SetEmailTrust(false, false,
135 : true, false, false,
136 0 : false, false);
137 : SetObjSignTrust(false, false,
138 : true, false, false,
139 0 : false, false);
140 0 : }
141 :
142 : void
143 0 : nsNSSCertTrust::SetValidPeer()
144 : {
145 : SetSSLTrust(true, false,
146 : false, false, false,
147 0 : false, false);
148 : SetEmailTrust(true, false,
149 : false, false, false,
150 0 : false, false);
151 : SetObjSignTrust(true, false,
152 : false, false, false,
153 0 : false, false);
154 0 : }
155 :
156 : bool
157 0 : nsNSSCertTrust::HasAnyCA()
158 : {
159 0 : if (hasTrust(mTrust.sslFlags, CERTDB_VALID_CA) ||
160 0 : hasTrust(mTrust.emailFlags, CERTDB_VALID_CA) ||
161 0 : hasTrust(mTrust.objectSigningFlags, CERTDB_VALID_CA))
162 0 : return true;
163 0 : return false;
164 : }
165 :
166 : bool
167 0 : nsNSSCertTrust::HasPeer(bool checkSSL,
168 : bool checkEmail,
169 : bool checkObjSign)
170 : {
171 0 : if (checkSSL && !hasTrust(mTrust.sslFlags, CERTDB_TERMINAL_RECORD))
172 0 : return false;
173 0 : if (checkEmail && !hasTrust(mTrust.emailFlags, CERTDB_TERMINAL_RECORD))
174 0 : return false;
175 0 : if (checkObjSign && !hasTrust(mTrust.objectSigningFlags, CERTDB_TERMINAL_RECORD))
176 0 : return false;
177 0 : return true;
178 : }
179 :
180 : bool
181 0 : nsNSSCertTrust::HasAnyUser()
182 : {
183 0 : if (hasTrust(mTrust.sslFlags, CERTDB_USER) ||
184 0 : hasTrust(mTrust.emailFlags, CERTDB_USER) ||
185 0 : hasTrust(mTrust.objectSigningFlags, CERTDB_USER))
186 0 : return true;
187 0 : return false;
188 : }
189 :
190 : bool
191 0 : nsNSSCertTrust::HasTrustedCA(bool checkSSL,
192 : bool checkEmail,
193 : bool checkObjSign)
194 : {
195 0 : if (checkSSL && !(hasTrust(mTrust.sslFlags, CERTDB_TRUSTED_CA) ||
196 0 : hasTrust(mTrust.sslFlags, CERTDB_TRUSTED_CLIENT_CA)))
197 0 : return false;
198 0 : if (checkEmail && !(hasTrust(mTrust.emailFlags, CERTDB_TRUSTED_CA) ||
199 0 : hasTrust(mTrust.emailFlags, CERTDB_TRUSTED_CLIENT_CA)))
200 0 : return false;
201 0 : if (checkObjSign &&
202 0 : !(hasTrust(mTrust.objectSigningFlags, CERTDB_TRUSTED_CA) ||
203 0 : hasTrust(mTrust.objectSigningFlags, CERTDB_TRUSTED_CLIENT_CA)))
204 0 : return false;
205 0 : return true;
206 : }
207 :
208 : bool
209 0 : nsNSSCertTrust::HasTrustedPeer(bool checkSSL,
210 : bool checkEmail,
211 : bool checkObjSign)
212 : {
213 0 : if (checkSSL && !(hasTrust(mTrust.sslFlags, CERTDB_TRUSTED)))
214 0 : return false;
215 0 : if (checkEmail && !(hasTrust(mTrust.emailFlags, CERTDB_TRUSTED)))
216 0 : return false;
217 0 : if (checkObjSign &&
218 0 : !(hasTrust(mTrust.objectSigningFlags, CERTDB_TRUSTED)))
219 0 : return false;
220 0 : return true;
221 : }
222 :
223 : void
224 0 : nsNSSCertTrust::addTrust(unsigned int *t, unsigned int v)
225 : {
226 0 : *t |= v;
227 0 : }
228 :
229 : bool
230 0 : nsNSSCertTrust::hasTrust(unsigned int t, unsigned int v)
231 : {
232 0 : return !!(t & v);
233 : }
|