Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
michael@0 | 2 | <html> |
michael@0 | 3 | <head> |
michael@0 | 4 | <!-- This Source Code Form is subject to the terms of the Mozilla Public |
michael@0 | 5 | - License, v. 2.0. If a copy of the MPL was not distributed with this |
michael@0 | 6 | - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> |
michael@0 | 7 | |
michael@0 | 8 | |
michael@0 | 9 | <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> |
michael@0 | 10 | <title>Stan Design - Work In Progress</title> |
michael@0 | 11 | </head> |
michael@0 | 12 | <body> |
michael@0 | 13 | <br> |
michael@0 | 14 | This is a working document for progress on Stan design/development.<br> |
michael@0 | 15 | <br> |
michael@0 | 16 | Current <a href="#build">build</a> |
michael@0 | 17 | and <a href="#test">test</a> |
michael@0 | 18 | instructions.<br> |
michael@0 | 19 | <br> |
michael@0 | 20 | The current set of Stan libraries.<br> |
michael@0 | 21 | <a href="#asn1">asn1</a> |
michael@0 | 22 | <br> |
michael@0 | 23 | <a href="#base">base</a> |
michael@0 | 24 | <br> |
michael@0 | 25 | <a href="#ckfw">ckfw</a> |
michael@0 | 26 | <br> |
michael@0 | 27 | <a href="#dev">dev</a> |
michael@0 | 28 | <br> |
michael@0 | 29 | <a href="#pki">pki</a> |
michael@0 | 30 | <br> |
michael@0 | 31 | <a href="#pki1">pki1</a> |
michael@0 | 32 | <br> |
michael@0 | 33 | <a href="#pkix">pkix</a> |
michael@0 | 34 | <br> |
michael@0 | 35 | <br> |
michael@0 | 36 | "Public" types below (those available to consumers of |
michael@0 | 37 | NSS) begin with "NSS". "Protected" types (those only available |
michael@0 | 38 | within NSS) begin with "nss".<br> |
michael@0 | 39 | <br> |
michael@0 | 40 | Open issues appears as numbered indents.<br> |
michael@0 | 41 | <br> |
michael@0 | 42 | <br> |
michael@0 | 43 | |
michael@0 | 44 | <hr width="100%" size="2" align="Left"><br> |
michael@0 | 45 | |
michael@0 | 46 | <h3><a name="asn1"></a> |
michael@0 | 47 | <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/asn1/"> |
michael@0 | 48 | ASN.1</a> |
michael@0 | 49 | </h3> |
michael@0 | 50 | ASN.1 encoder/decoder wrapping around the current |
michael@0 | 51 | ASN.1 implementation.<br> |
michael@0 | 52 | <br> |
michael@0 | 53 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSASN1EncodingType"> NSSASN1EncodingType</a> |
michael@0 | 54 | <br> |
michael@0 | 55 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Item">nssASN1Item</a> |
michael@0 | 56 | <br> |
michael@0 | 57 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Template">nssASN1Template</a> |
michael@0 | 58 | <br> |
michael@0 | 59 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1ChooseTemplateFunction"> |
michael@0 | 60 | nssASN1ChooseTemplateFunction</a> |
michael@0 | 61 | <br> |
michael@0 | 62 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Encoder">nssASN1Encoder</a> |
michael@0 | 63 | <br> |
michael@0 | 64 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Decoder">nssASN1Decoder</a> |
michael@0 | 65 | <br> |
michael@0 | 66 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1EncodingPart"> nssASN1EncodingPart</a> |
michael@0 | 67 | <br> |
michael@0 | 68 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1NotifyFunction"> |
michael@0 | 69 | nssASN1NotifyFunction</a> |
michael@0 | 70 | <br> |
michael@0 | 71 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1EncoderWriteFunction"> |
michael@0 | 72 | nssASN1EncoderWriteFunction</a> |
michael@0 | 73 | <br> |
michael@0 | 74 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1DecoderFilterFunction"> |
michael@0 | 75 | nssASN1DecoderFilterFunction</a> |
michael@0 | 76 | <br> |
michael@0 | 77 | <br> |
michael@0 | 78 | |
michael@0 | 79 | <hr width="100%" size="2" align="Left"> |
michael@0 | 80 | <h3><a name="base"></a> |
michael@0 | 81 | <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/base/"> |
michael@0 | 82 | Base</a> |
michael@0 | 83 | </h3> |
michael@0 | 84 | Set of base utilities for Stan implementation. |
michael@0 | 85 | These are all fairly straightforward, except for nssPointerTracker.<br> |
michael@0 | 86 | <br> |
michael@0 | 87 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSError">NSSError</a> |
michael@0 | 88 | <br> |
michael@0 | 89 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSArena">NSSArena</a> |
michael@0 | 90 | <br> |
michael@0 | 91 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSItem">NSSItem</a> |
michael@0 | 92 | <br> |
michael@0 | 93 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSBER">NSSBER</a> |
michael@0 | 94 | <br> |
michael@0 | 95 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSDER">NSSDER</a> |
michael@0 | 96 | <br> |
michael@0 | 97 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSBitString">NSSBitString</a> |
michael@0 | 98 | <br> |
michael@0 | 99 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSUTF8">NSSUTF8</a> |
michael@0 | 100 | <br> |
michael@0 | 101 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSASCII7">NSSASCII7</a> |
michael@0 | 102 | <br> |
michael@0 | 103 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssArenaMark">nssArenaMark</a> |
michael@0 | 104 | <br> |
michael@0 | 105 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssPointerTracker">nssPointerTracker</a> |
michael@0 | 106 | <br> |
michael@0 | 107 | This is intended for debug builds only.<br> |
michael@0 | 108 | |
michael@0 | 109 | <ol> |
michael@0 | 110 | <li>Ignored for now.<br> |
michael@0 | 111 | </li> |
michael@0 | 112 | |
michael@0 | 113 | </ol> |
michael@0 | 114 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssStringType">nssStringType</a> |
michael@0 | 115 | <br> |
michael@0 | 116 | <br> |
michael@0 | 117 | Suggested additions:<br> |
michael@0 | 118 | |
michael@0 | 119 | <ol> |
michael@0 | 120 | <li>nssList - A list that optionally uses a lock. This list would |
michael@0 | 121 | manage the currently loaded modules in a trust domain, etc.</li> |
michael@0 | 122 | |
michael@0 | 123 | <ul> |
michael@0 | 124 | <li>SECMODListLock kept track of the number of waiting threads. Will |
michael@0 | 125 | this be needed in the trust domain?</li> |
michael@0 | 126 | |
michael@0 | 127 | </ul> |
michael@0 | 128 | |
michael@0 | 129 | </ol> |
michael@0 | 130 | <br> |
michael@0 | 131 | |
michael@0 | 132 | <hr width="100%" size="2" align="Left"> |
michael@0 | 133 | <h3><a name="ckfw"></a> |
michael@0 | 134 | <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/"> |
michael@0 | 135 | CKFW</a> |
michael@0 | 136 | </h3> |
michael@0 | 137 | The cryptoki framework, used for building cryptoki tokens. |
michael@0 | 138 | This needs to be described in a separate document showing how |
michael@0 | 139 | to set up a token using CKFW. This code only relates to tokens, |
michael@0 | 140 | so it is not relevant here.<br> |
michael@0 | 141 | <br> |
michael@0 | 142 | <br> |
michael@0 | 143 | |
michael@0 | 144 | <hr width="100%" size="2" align="Left"> |
michael@0 | 145 | <h3><a name="dev"></a> |
michael@0 | 146 | <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/dev/"> |
michael@0 | 147 | Device</a> |
michael@0 | 148 | </h3> |
michael@0 | 149 | Defines cryptoki devices used in NSS. This |
michael@0 | 150 | is not part of the exposed API. It is a low-level API allowing |
michael@0 | 151 | NSS to manage cryptoki devices.<br> |
michael@0 | 152 | <br> |
michael@0 | 153 | The relationship is like this:<br> |
michael@0 | 154 | <br> |
michael@0 | 155 | libpki --> libdev --> cryptoki<br> |
michael@0 | 156 | <br> |
michael@0 | 157 | As an example,<br> |
michael@0 | 158 | <br> |
michael@0 | 159 | NSSTrustDomain_FindCertificate --> NSSToken_FindCertificate --> |
michael@0 | 160 | C_FindObjects<br> |
michael@0 | 161 | <br> |
michael@0 | 162 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSModule">NSSModule</a> |
michael@0 | 163 | <br> |
michael@0 | 164 | Replaces the SECMOD API. The module manages a |
michael@0 | 165 | PRLibrary that holds a cryptoki implementation via a number of slots. |
michael@0 | 166 | The API should provide the ability to Load and Unload a module, |
michael@0 | 167 | Login and Logout to the module (through its slots), and to locate a |
michael@0 | 168 | particular slot/token.<br> |
michael@0 | 169 | <br> |
michael@0 | 170 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSSlot">NSSSlot</a> |
michael@0 | 171 | <br> |
michael@0 | 172 | This and NSSToken combine to replace the PK11 API parts |
michael@0 | 173 | that relate to slot and token management. The slot API should |
michael@0 | 174 | provide the ability to Login/Logout to a slot, check the login status, |
michael@0 | 175 | determine basic configuration information about the slot, and modify |
michael@0 | 176 | the password settings.<br> |
michael@0 | 177 | |
michael@0 | 178 | <ol> |
michael@0 | 179 | <li>Should slots also maintain a default session? This session would |
michael@0 | 180 | be used for slot management calls (sections 9.5 and9.6 of PKCS#11). Or |
michael@0 | 181 | is the token session sufficient (this would not work if C_GetTokenInfo and |
michael@0 | 182 | C_InitToken need to be wrapped in a threadsafe session).<br> |
michael@0 | 183 | </li> |
michael@0 | 184 | |
michael@0 | 185 | </ol> |
michael@0 | 186 | <br> |
michael@0 | 187 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSToken">NSSToken</a> |
michael@0 | 188 | <br> |
michael@0 | 189 | Fills in the gaps left by NSSSlot. Much of the |
michael@0 | 190 | cryptoki API is directed towards slots. However, some functionality |
michael@0 | 191 | clearly belongs with a token type. For example, a certificate |
michael@0 | 192 | lives on a token, not a slot, so one would expect a function NSSToken_FindCertificate. |
michael@0 | 193 | Thus functions that deal with importing/exporting an object |
michael@0 | 194 | and performing actual cryptographic operations belong here.<br> |
michael@0 | 195 | |
michael@0 | 196 | <ol> |
michael@0 | 197 | <li>The distinction between a slot and a token is not clear. Most |
michael@0 | 198 | functions take a slotID as an argument, even though it is obvious that |
michael@0 | 199 | the event is intended to occur on a token. That leaves various |
michael@0 | 200 | possibilities:</li> |
michael@0 | 201 | |
michael@0 | 202 | <ol> |
michael@0 | 203 | <li>Implement the API entirely as NSSToken. If the token is not |
michael@0 | 204 | present, some calls will simply fail.</li> |
michael@0 | 205 | <li>Divide the API between NSSToken and NSSSlot, as described above. |
michael@0 | 206 | NSSSlot would handle cryptoki calls specified as "slot management", |
michael@0 | 207 | while NSSToken handles actual token operations.</li> |
michael@0 | 208 | <li>Others?</li> |
michael@0 | 209 | |
michael@0 | 210 | </ol> |
michael@0 | 211 | <li>Session management. Tokens needs a threadsafe session handle |
michael@0 | 212 | to perform operations. CryptoContexts are meant to provide such sessions, |
michael@0 | 213 | but other objects will need access to token functions as well (examples: |
michael@0 | 214 | the TrustDomain_Find functions, _Login, _Logout, and others that do not exist |
michael@0 | 215 | such as NSSToken_ChangePassword). For those functions, the token could |
michael@0 | 216 | maintain a default session. Thus all NSSToken API functions would take |
michael@0 | 217 | sessionOpt as an argument. If the caller is going to provide a session, |
michael@0 | 218 | it sends an NSSSession there, otherwise it sends NULL and the default session |
michael@0 | 219 | is utilized.<br> |
michael@0 | 220 | </li> |
michael@0 | 221 | |
michael@0 | 222 | </ol> |
michael@0 | 223 | Proposed:<br> |
michael@0 | 224 | NSSSession<br> |
michael@0 | 225 | Wraps a Cryptoki session. Created from a slot. Used to manage |
michael@0 | 226 | sessions for crypto contexts. Has a lock field, which locks the session |
michael@0 | 227 | if the slot is not threadsafe.<br> |
michael@0 | 228 | <br> |
michael@0 | 229 | |
michael@0 | 230 | <hr width="100%" size="2" align="Left"><br> |
michael@0 | 231 | |
michael@0 | 232 | <h3><a name="pki"></a> |
michael@0 | 233 | <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki/"> |
michael@0 | 234 | PKI</a> |
michael@0 | 235 | </h3> |
michael@0 | 236 | The NSS PKI library.<br> |
michael@0 | 237 | <br> |
michael@0 | 238 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCertificate">NSS</a> |
michael@0 | 239 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCertificate">Certificate</a> |
michael@0 | 240 | <br> |
michael@0 | 241 | |
michael@0 | 242 | <ol> |
michael@0 | 243 | <li>The API leaves open the possibility of NSSCertificate meaning various |
michael@0 | 244 | certificate types, not just X.509. The way to keep open this possibility |
michael@0 | 245 | is to keep only generally useful information in the NSSCertificate type. |
michael@0 | 246 | Examples would be the certificate encoding, label, trust (obtained |
michael@0 | 247 | from cryptoki calls), an email address, etc. Some type of generic |
michael@0 | 248 | reference should be kept to the decoded certificate, which would then be |
michael@0 | 249 | accessed by a type-specific API (e.g., NSSX509_GetSubjectName).</li> |
michael@0 | 250 | |
michael@0 | 251 | </ol> |
michael@0 | 252 | <br> |
michael@0 | 253 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSUserCertificate">NSSUserCertificate</a> |
michael@0 | 254 | <br> |
michael@0 | 255 | |
michael@0 | 256 | <ol> |
michael@0 | 257 | <li>Should this be a typedef of NSSCertificate? This implies that |
michael@0 | 258 | any function that requires an NSSUserCertificate would fail when called |
michael@0 | 259 | with a certificate lacking a private key. </li> |
michael@0 | 260 | |
michael@0 | 261 | </ol> |
michael@0 | 262 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSPrivateKey">NSSPrivateKey</a> |
michael@0 | 263 | <br> |
michael@0 | 264 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSPublicKey">NSSPublicKey</a> |
michael@0 | 265 | <br> |
michael@0 | 266 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSSymmetricKey">NSSSymmetricKey</a> |
michael@0 | 267 | <br> |
michael@0 | 268 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSTrustDomain">NSSTrustDomain</a> |
michael@0 | 269 | <br> |
michael@0 | 270 | A trust domain is "the field in which certificates may |
michael@0 | 271 | be validated." It is a collection of modules capable of performing |
michael@0 | 272 | cryptographic operations and storing certs and keys. This collection |
michael@0 | 273 | is managed by NSS in a manner opaque to the consumer. The slots |
michael@0 | 274 | will have various orderings determining which has preference for a |
michael@0 | 275 | given operation. For example, the trust domain may order the storage |
michael@0 | 276 | of user certificates one way, and the storage of email certificates in |
michael@0 | 277 | another way [is that a good example?].<br> |
michael@0 | 278 | <br> |
michael@0 | 279 | |
michael@0 | 280 | <ol> |
michael@0 | 281 | <li> How will ordering work? We already have the suggestion |
michael@0 | 282 | that there be two kinds of ordering: storage and search. How |
michael@0 | 283 | will they be constructed/managed? Do we want to expose access |
michael@0 | 284 | to a token that overrides this ordering (i.e., the download of updated |
michael@0 | 285 | root certs may need to override storage order)</li> |
michael@0 | 286 | <li>How are certs cached? Nelson wonders what it means to Stan |
michael@0 | 287 | when a cert does not live on a token yet. Bob, Terry, and I discussed |
michael@0 | 288 | this. My conclusion is that there should be a type, separate |
michael@0 | 289 | from NSSCertificate, that holds the decoded cert parts (e.g., NSSX509Certificate, |
michael@0 | 290 | or to avoid confusion, NSSX509DecodedParts). NSSCertificate would |
michael@0 | 291 | keep a handle to this type, so that it only needs to decode the cert |
michael@0 | 292 | once. The NSSTrustDomain would keep a hash table of cached certs, |
michael@0 | 293 | some of which may not live on a token yet (i.e., they are only NSSX509DecodedParts). |
michael@0 | 294 | This cache could be accessed in the same way the temp db was, |
michael@0 | 295 | and when the cert is ready to be moved onto a token a call to NSSTrustDomain_ImportCertificate |
michael@0 | 296 | is made. Note that this is essentially the same as CERT_TempCertToPerm.</li> |
michael@0 | 297 | |
michael@0 | 298 | <ul> |
michael@0 | 299 | <li>The hashtable in lib/base (copied from ckfw/hash.c) uses the identity |
michael@0 | 300 | hash. Therefore, in a hash of certificates, the key is the certificate |
michael@0 | 301 | pointer itself. One possibility is to store the decoded cert (NSSX509DecodedParts |
michael@0 | 302 | above) as the value in the {key, value} pair. When a cert is decoded, |
michael@0 | 303 | the cert pointer and decoding pointer are added to the hash. Subsequent |
michael@0 | 304 | lookups have access to one or both of these pointers. This keeps NSSCertificate |
michael@0 | 305 | separate from its decoding, while providing a way to locate it.</li> |
michael@0 | 306 | |
michael@0 | 307 | </ul> |
michael@0 | 308 | <li>The API is designed to keep token details hidden from the user. However, |
michael@0 | 309 | it has already been realized that PSM and CMS may need special access to |
michael@0 | 310 | tokens. Is this part of the TrustDomain API, or should PSM and CMS |
michael@0 | 311 | be allowed to use "friend" headers from the Token API?</li> |
michael@0 | 312 | <li>Do we want to allow traversal via NSSTrustDomain_TraverseXXXX?<br> |
michael@0 | 313 | </li> |
michael@0 | 314 | |
michael@0 | 315 | </ol> |
michael@0 | 316 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCryptoContext"><br> |
michael@0 | 317 | NSSCryptoContext</a> |
michael@0 | 318 | <br> |
michael@0 | 319 | Analgous to a Cryptoki session. Manages session objects only.<br> |
michael@0 | 320 | <br> |
michael@0 | 321 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSTime">NSSTime</a> |
michael@0 | 322 | <br> |
michael@0 | 323 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSUsage">NSSUsage</a> |
michael@0 | 324 | <br> |
michael@0 | 325 | |
michael@0 | 326 | <ol> |
michael@0 | 327 | <li> See Fred's <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki/nsspkit.h#187"> |
michael@0 | 328 | comments</a> |
michael@0 | 329 | .</li> |
michael@0 | 330 | |
michael@0 | 331 | </ol> |
michael@0 | 332 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSPolicies">NSSPolicies</a> |
michael@0 | 333 | <br> |
michael@0 | 334 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSAlgorithmAndParameters"> |
michael@0 | 335 | NSSAlgorithmAndParameters</a> |
michael@0 | 336 | <br> |
michael@0 | 337 | |
michael@0 | 338 | <ol> |
michael@0 | 339 | <li> Again, Fred's <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki/nsspkit.h#215"> |
michael@0 | 340 | comments</a> |
michael@0 | 341 | . The old NSS code had various types related to algorithms |
michael@0 | 342 | running around in it. We had SECOidTag, SECAlgorithmID, SECItem's |
michael@0 | 343 | for parameters, CK_MECHANISM for cryptoki, etc. This type should |
michael@0 | 344 | be able to encapsulate all of those.</li> |
michael@0 | 345 | |
michael@0 | 346 | </ol> |
michael@0 | 347 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCallback">NSSCallback</a> |
michael@0 | 348 | <br> |
michael@0 | 349 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSOperations">NSSOperations</a> |
michael@0 | 350 | <br> |
michael@0 | 351 | <br> |
michael@0 | 352 | <br> |
michael@0 | 353 | |
michael@0 | 354 | <hr width="100%" size="2"><br> |
michael@0 | 355 | <br> |
michael@0 | 356 | A diagram to suggest a possible TrustDomain architecture.<br> |
michael@0 | 357 | <br> |
michael@0 | 358 | <img src="./standiag.png" alt="Trust Domain Diagram" width="748" height="367"> |
michael@0 | 359 | <br> |
michael@0 | 360 | |
michael@0 | 361 | <hr width="100%" size="2" align="Left"><br> |
michael@0 | 362 | |
michael@0 | 363 | <h3><a name="pki1"></a> |
michael@0 | 364 | <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki1/"> |
michael@0 | 365 | PKI1</a> |
michael@0 | 366 | </h3> |
michael@0 | 367 | <br> |
michael@0 | 368 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSOID">NSSOID</a> |
michael@0 | 369 | <br> |
michael@0 | 370 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSATAV">NSSATAV</a> |
michael@0 | 371 | <br> |
michael@0 | 372 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSRDN">NSSRDN</a> |
michael@0 | 373 | <br> |
michael@0 | 374 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSRDNSeq">NSSRDNSeq</a> |
michael@0 | 375 | <br> |
michael@0 | 376 | <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSName">NSSName</a> |
michael@0 | 377 | <br> |
michael@0 | 378 | NSSNameChoice<br> |
michael@0 | 379 | NSSGeneralName<br> |
michael@0 | 380 | NSSGeneralNameChoice<br> |
michael@0 | 381 | NSSOtherName<br> |
michael@0 | 382 | NSSRFC822Name<br> |
michael@0 | 383 | NSSDNSName<br> |
michael@0 | 384 | NSSX400Address<br> |
michael@0 | 385 | NSSEdiParityAddress<br> |
michael@0 | 386 | NSSURI<br> |
michael@0 | 387 | NSSIPAddress<br> |
michael@0 | 388 | NSSRegisteredID<br> |
michael@0 | 389 | NSSGeneralNameSeq<br> |
michael@0 | 390 | <a href="http://lxr.mozilla.org/mozilla/ident?i=nssAttributeTypeAliasTable"> |
michael@0 | 391 | nssAttributeTypeAliasTable</a> |
michael@0 | 392 | <br> |
michael@0 | 393 | <br> |
michael@0 | 394 | <br> |
michael@0 | 395 | |
michael@0 | 396 | <hr width="100%" size="2" align="Left"><br> |
michael@0 | 397 | |
michael@0 | 398 | <h3><a name="pkix"></a> |
michael@0 | 399 | <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pkix/"> |
michael@0 | 400 | PKIX </a> |
michael@0 | 401 | </h3> |
michael@0 | 402 | There is a plethora of PKIX related types here.<br> |
michael@0 | 403 | <br> |
michael@0 | 404 | |
michael@0 | 405 | <hr width="100%" size="2" align="Left"><br> |
michael@0 | 406 | |
michael@0 | 407 | <h3><a name="build"></a> |
michael@0 | 408 | Building Stan</h3> |
michael@0 | 409 | <br> |
michael@0 | 410 | From nss/lib, run "make BUILD_STAN=1"<br> |
michael@0 | 411 | <br> |
michael@0 | 412 | |
michael@0 | 413 | <hr width="100%" size="2" align="Left"><br> |
michael@0 | 414 | |
michael@0 | 415 | <h3><a name="test"></a> |
michael@0 | 416 | Testing Stan</h3> |
michael@0 | 417 | A new command line tool, pkiutil, has been created to use only |
michael@0 | 418 | the Stan API. It depends on a new library, cmdlib, meant to replace |
michael@0 | 419 | the old secutil library. The old library had code used by products |
michael@0 | 420 | that needed to be integrated into the main library codebase somehow. The |
michael@0 | 421 | goal of the new cmdlib is to have functionality needed strictly for NSS |
michael@0 | 422 | tools.<br> |
michael@0 | 423 | <br> |
michael@0 | 424 | How to build:<br> |
michael@0 | 425 | |
michael@0 | 426 | <ol> |
michael@0 | 427 | <li>cd nss/cmd/cmdlib; make</li> |
michael@0 | 428 | <li>cd ../pkiutil; make</li> |
michael@0 | 429 | |
michael@0 | 430 | </ol> |
michael@0 | 431 | pkiutil will give detailed help with either "pkiutil -?" or "pkiutil |
michael@0 | 432 | --help".<br> |
michael@0 | 433 | <br> |
michael@0 | 434 | So far, the only available test is to list certs on the builtins token. |
michael@0 | 435 | Copy "libnssckbi.so" (or whatever it is) to cmd/pkiutil. Then |
michael@0 | 436 | run "pkiutil -L" or "pkiutil --list". The list of certificate nicknames |
michael@0 | 437 | should be displayed.<br> |
michael@0 | 438 | <br> |
michael@0 | 439 | <br> |
michael@0 | 440 | |
michael@0 | 441 | </body> |
michael@0 | 442 | </html> |