Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: mozilla/security/nss/lib/certdb/xauthkid.c

Issue 14249009: Change the NSS and NSPR source tree to the new directory structure to be (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 /*
6 * X.509 v3 Subject Key Usage Extension
7 *
8 */
9
10 #include "prtypes.h"
11 #include "seccomon.h"
12 #include "secdert.h"
13 #include "secoidt.h"
14 #include "secasn1t.h"
15 #include "secasn1.h"
16 #include "secport.h"
17 #include "certt.h"
18 #include "genname.h"
19 #include "secerr.h"
20
21 SEC_ASN1_MKSUB(SEC_IntegerTemplate)
22 SEC_ASN1_MKSUB(SEC_OctetStringTemplate)
23
24 const SEC_ASN1Template CERTAuthKeyIDTemplate[] = {
25 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CERTAuthKeyID) },
26 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 0,
27 offsetof(CERTAuthKeyID,keyID), SEC_ASN1_SUB(SEC_OctetStringTemplate)},
28 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | 1,
29 offsetof(CERTAuthKeyID, DERAuthCertIssuer), CERT_GeneralNamesTemplate} ,
30 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 2,
31 offsetof(CERTAuthKeyID,authCertSerialNumber),
32 SEC_ASN1_SUB(SEC_IntegerTemplate) },
33 { 0 }
34 };
35
36
37
38 SECStatus CERT_EncodeAuthKeyID (PRArenaPool *arena, CERTAuthKeyID *value, SECIte m *encodedValue)
39 {
40 SECStatus rv = SECFailure;
41
42 PORT_Assert (value);
43 PORT_Assert (arena);
44 PORT_Assert (value->DERAuthCertIssuer == NULL);
45 PORT_Assert (encodedValue);
46
47 do {
48
49 /* If both of the authCertIssuer and the serial number exist, encode
50 the name first. Otherwise, it is an error if one exist and the other
51 is not.
52 */
53 if (value->authCertIssuer) {
54 if (!value->authCertSerialNumber.data) {
55 PORT_SetError (SEC_ERROR_EXTENSION_VALUE_INVALID);
56 break;
57 }
58
59 value->DERAuthCertIssuer = cert_EncodeGeneralNames
60 (arena, value->authCertIssuer);
61 if (!value->DERAuthCertIssuer) {
62 PORT_SetError (SEC_ERROR_EXTENSION_VALUE_INVALID);
63 break;
64 }
65 }
66 else if (value->authCertSerialNumber.data) {
67 PORT_SetError (SEC_ERROR_EXTENSION_VALUE_INVALID);
68 break;
69 }
70
71 if (SEC_ASN1EncodeItem (arena, encodedValue, value,
72 CERTAuthKeyIDTemplate) == NULL)
73 break;
74 rv = SECSuccess;
75
76 } while (0);
77 return(rv);
78 }
79
80 CERTAuthKeyID *
81 CERT_DecodeAuthKeyID (PRArenaPool *arena, SECItem *encodedValue)
82 {
83 CERTAuthKeyID * value = NULL;
84 SECStatus rv = SECFailure;
85 void * mark;
86 SECItem newEncodedValue;
87
88 PORT_Assert (arena);
89
90 do {
91 mark = PORT_ArenaMark (arena);
92 value = (CERTAuthKeyID*)PORT_ArenaZAlloc (arena, sizeof (*value));
93 if (value == NULL)
94 break;
95 value->DERAuthCertIssuer = NULL;
96 /* copy the DER into the arena, since Quick DER returns data that points
97 into the DER input, which may get freed by the caller */
98 rv = SECITEM_CopyItem(arena, &newEncodedValue, encodedValue);
99 if ( rv != SECSuccess ) {
100 break;
101 }
102
103 rv = SEC_QuickDERDecodeItem
104 (arena, value, CERTAuthKeyIDTemplate, &newEncodedValue);
105 if (rv != SECSuccess)
106 break;
107
108 value->authCertIssuer = cert_DecodeGeneralNames (arena, value->DERAuthCe rtIssuer);
109 if (value->authCertIssuer == NULL)
110 break;
111
112 /* what if the general name contains other format but not URI ?
113 hl
114 */
115 if ((value->authCertSerialNumber.data && !value->authCertIssuer) ||
116 (!value->authCertSerialNumber.data && value->authCertIssuer)){
117 PORT_SetError (SEC_ERROR_EXTENSION_VALUE_INVALID);
118 break;
119 }
120 } while (0);
121
122 if (rv != SECSuccess) {
123 PORT_ArenaRelease (arena, mark);
124 return ((CERTAuthKeyID *)NULL);
125 }
126 PORT_ArenaUnmark(arena, mark);
127 return (value);
128 }
OLDNEW
« no previous file with comments | « mozilla/security/nss/lib/certdb/stanpcertdb.c ('k') | mozilla/security/nss/lib/certdb/xbsconst.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698