security/nss/lib/crmf/crmftmpl.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* -*- Mode: C; tab-width: 8 -*- */
michael@0 2 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 3 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 5
michael@0 6 #include "crmf.h"
michael@0 7 #include "crmfi.h"
michael@0 8 #include "secoid.h"
michael@0 9 #include "secasn1.h"
michael@0 10
michael@0 11 SEC_ASN1_MKSUB(SECOID_AlgorithmIDTemplate)
michael@0 12 SEC_ASN1_MKSUB(SEC_AnyTemplate)
michael@0 13 SEC_ASN1_MKSUB(SEC_NullTemplate)
michael@0 14 SEC_ASN1_MKSUB(SEC_BitStringTemplate)
michael@0 15 SEC_ASN1_MKSUB(SEC_IntegerTemplate)
michael@0 16 SEC_ASN1_MKSUB(SEC_OctetStringTemplate)
michael@0 17 SEC_ASN1_MKSUB(CERT_TimeChoiceTemplate)
michael@0 18 SEC_ASN1_MKSUB(CERT_SubjectPublicKeyInfoTemplate)
michael@0 19 SEC_ASN1_MKSUB(CERT_NameTemplate)
michael@0 20
michael@0 21 /*
michael@0 22 * It's all implicit tagging.
michael@0 23 */
michael@0 24
michael@0 25 const SEC_ASN1Template CRMFControlTemplate[] = {
michael@0 26 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CRMFControl)},
michael@0 27 { SEC_ASN1_OBJECT_ID, offsetof(CRMFControl, derTag)},
michael@0 28 { SEC_ASN1_ANY, offsetof(CRMFControl, derValue) },
michael@0 29 { 0 }
michael@0 30 };
michael@0 31
michael@0 32 static const SEC_ASN1Template CRMFCertExtensionTemplate[] = {
michael@0 33 { SEC_ASN1_SEQUENCE,
michael@0 34 0, NULL, sizeof(CRMFCertExtension) },
michael@0 35 { SEC_ASN1_OBJECT_ID,
michael@0 36 offsetof(CRMFCertExtension,id) },
michael@0 37 { SEC_ASN1_OPTIONAL | SEC_ASN1_BOOLEAN,
michael@0 38 offsetof(CRMFCertExtension,critical) },
michael@0 39 { SEC_ASN1_OCTET_STRING,
michael@0 40 offsetof(CRMFCertExtension,value) },
michael@0 41 { 0, }
michael@0 42 };
michael@0 43
michael@0 44 static const SEC_ASN1Template CRMFSequenceOfCertExtensionTemplate[] = {
michael@0 45 { SEC_ASN1_SEQUENCE_OF, 0, CRMFCertExtensionTemplate }
michael@0 46 };
michael@0 47
michael@0 48 static const SEC_ASN1Template CRMFOptionalValidityTemplate[] = {
michael@0 49 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof (CRMFOptionalValidity) },
michael@0 50 { SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED | SEC_ASN1_NO_STREAM |
michael@0 51 SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_OPTIONAL | SEC_ASN1_XTRN | 0,
michael@0 52 offsetof (CRMFOptionalValidity, notBefore),
michael@0 53 SEC_ASN1_SUB(CERT_TimeChoiceTemplate) },
michael@0 54 { SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED | SEC_ASN1_NO_STREAM |
michael@0 55 SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_OPTIONAL | SEC_ASN1_XTRN | 1,
michael@0 56 offsetof (CRMFOptionalValidity, notAfter),
michael@0 57 SEC_ASN1_SUB(CERT_TimeChoiceTemplate) },
michael@0 58 { 0 }
michael@0 59 };
michael@0 60
michael@0 61 static const SEC_ASN1Template crmfPointerToNameTemplate[] = {
michael@0 62 { SEC_ASN1_POINTER | SEC_ASN1_XTRN, 0, SEC_ASN1_SUB(CERT_NameTemplate)},
michael@0 63 { 0 }
michael@0 64 };
michael@0 65
michael@0 66 static const SEC_ASN1Template CRMFCertTemplateTemplate[] = {
michael@0 67 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CRMFCertTemplate) },
michael@0 68 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 0,
michael@0 69 offsetof(CRMFCertTemplate, version),
michael@0 70 SEC_ASN1_SUB(SEC_IntegerTemplate) },
michael@0 71 { SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_OPTIONAL | SEC_ASN1_XTRN | 1 ,
michael@0 72 offsetof (CRMFCertTemplate, serialNumber),
michael@0 73 SEC_ASN1_SUB(SEC_IntegerTemplate) },
michael@0 74 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_POINTER |
michael@0 75 SEC_ASN1_XTRN | 2,
michael@0 76 offsetof (CRMFCertTemplate, signingAlg),
michael@0 77 SEC_ASN1_SUB(SECOID_AlgorithmIDTemplate) },
michael@0 78 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC |
michael@0 79 SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED | 3,
michael@0 80 offsetof (CRMFCertTemplate, issuer), crmfPointerToNameTemplate },
michael@0 81 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_POINTER | 4,
michael@0 82 offsetof (CRMFCertTemplate, validity),
michael@0 83 CRMFOptionalValidityTemplate },
michael@0 84 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC |
michael@0 85 SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED | 5,
michael@0 86 offsetof (CRMFCertTemplate, subject), crmfPointerToNameTemplate },
michael@0 87 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_POINTER |
michael@0 88 SEC_ASN1_XTRN | 6,
michael@0 89 offsetof (CRMFCertTemplate, publicKey),
michael@0 90 SEC_ASN1_SUB(CERT_SubjectPublicKeyInfoTemplate) },
michael@0 91 { SEC_ASN1_NO_STREAM | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_OPTIONAL |
michael@0 92 SEC_ASN1_XTRN | 7,
michael@0 93 offsetof (CRMFCertTemplate, issuerUID),
michael@0 94 SEC_ASN1_SUB(SEC_BitStringTemplate) },
michael@0 95 { SEC_ASN1_NO_STREAM | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_OPTIONAL |
michael@0 96 SEC_ASN1_XTRN | 8,
michael@0 97 offsetof (CRMFCertTemplate, subjectUID),
michael@0 98 SEC_ASN1_SUB(SEC_BitStringTemplate) },
michael@0 99 { SEC_ASN1_CONSTRUCTED | SEC_ASN1_OPTIONAL |
michael@0 100 SEC_ASN1_CONTEXT_SPECIFIC | 9,
michael@0 101 offsetof (CRMFCertTemplate, extensions),
michael@0 102 CRMFSequenceOfCertExtensionTemplate },
michael@0 103 { 0 }
michael@0 104 };
michael@0 105
michael@0 106 static const SEC_ASN1Template CRMFAttributeTemplate[] = {
michael@0 107 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CRMFAttribute)},
michael@0 108 { SEC_ASN1_OBJECT_ID, offsetof(CRMFAttribute, derTag)},
michael@0 109 { SEC_ASN1_ANY, offsetof(CRMFAttribute, derValue) },
michael@0 110 { 0 }
michael@0 111 };
michael@0 112
michael@0 113 const SEC_ASN1Template CRMFCertRequestTemplate[] = {
michael@0 114 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof (CRMFCertRequest) },
michael@0 115 { SEC_ASN1_INTEGER, offsetof(CRMFCertRequest, certReqId)},
michael@0 116 { SEC_ASN1_INLINE, offsetof(CRMFCertRequest, certTemplate),
michael@0 117 CRMFCertTemplateTemplate},
michael@0 118 { SEC_ASN1_OPTIONAL | SEC_ASN1_SEQUENCE_OF,
michael@0 119 offsetof(CRMFCertRequest,controls),
michael@0 120 CRMFControlTemplate}, /* SEQUENCE SIZE (1...MAX)*/
michael@0 121 { 0 }
michael@0 122 };
michael@0 123
michael@0 124 const SEC_ASN1Template CRMFCertReqMsgTemplate[] = {
michael@0 125 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CRMFCertReqMsg) },
michael@0 126 { SEC_ASN1_POINTER, offsetof(CRMFCertReqMsg, certReq),
michael@0 127 CRMFCertRequestTemplate },
michael@0 128 { SEC_ASN1_ANY | SEC_ASN1_OPTIONAL,
michael@0 129 offsetof(CRMFCertReqMsg, derPOP) },
michael@0 130 { SEC_ASN1_OPTIONAL | SEC_ASN1_SEQUENCE_OF,
michael@0 131 offsetof(CRMFCertReqMsg, regInfo),
michael@0 132 CRMFAttributeTemplate}, /* SEQUENCE SIZE (1...MAX)*/
michael@0 133 { 0 }
michael@0 134 };
michael@0 135
michael@0 136 const SEC_ASN1Template CRMFCertReqMessagesTemplate[] = {
michael@0 137 { SEC_ASN1_SEQUENCE_OF, offsetof(CRMFCertReqMessages, messages),
michael@0 138 CRMFCertReqMsgTemplate, sizeof (CRMFCertReqMessages)}
michael@0 139 };
michael@0 140
michael@0 141 static const SEC_ASN1Template CRMFPOPOSigningKeyInputTemplate[] = {
michael@0 142 { SEC_ASN1_SEQUENCE, 0, NULL,sizeof(CRMFPOPOSigningKeyInput) },
michael@0 143 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED |
michael@0 144 SEC_ASN1_CONTEXT_SPECIFIC | 0,
michael@0 145 offsetof(CRMFPOPOSigningKeyInput, authInfo.sender) },
michael@0 146 { SEC_ASN1_BIT_STRING | SEC_ASN1_OPTIONAL | 1,
michael@0 147 offsetof (CRMFPOPOSigningKeyInput, authInfo.publicKeyMAC) },
michael@0 148 { SEC_ASN1_INLINE | SEC_ASN1_XTRN,
michael@0 149 offsetof(CRMFPOPOSigningKeyInput, publicKey),
michael@0 150 SEC_ASN1_SUB(CERT_SubjectPublicKeyInfoTemplate) },
michael@0 151 { 0 }
michael@0 152 };
michael@0 153
michael@0 154 const SEC_ASN1Template CRMFRAVerifiedTemplate[] = {
michael@0 155 { SEC_ASN1_CONTEXT_SPECIFIC | 0 | SEC_ASN1_XTRN,
michael@0 156 0,
michael@0 157 SEC_ASN1_SUB(SEC_NullTemplate) },
michael@0 158 { 0 }
michael@0 159 };
michael@0 160
michael@0 161
michael@0 162 /* This template will need to add POPOSigningKeyInput eventually, maybe*/
michael@0 163 static const SEC_ASN1Template crmfPOPOSigningKeyTemplate[] = {
michael@0 164 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CRMFPOPOSigningKey) },
michael@0 165 { SEC_ASN1_NO_STREAM | SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC |
michael@0 166 SEC_ASN1_XTRN | 0,
michael@0 167 offsetof(CRMFPOPOSigningKey, derInput),
michael@0 168 SEC_ASN1_SUB(SEC_AnyTemplate) },
michael@0 169 { SEC_ASN1_POINTER | SEC_ASN1_XTRN,
michael@0 170 offsetof(CRMFPOPOSigningKey, algorithmIdentifier),
michael@0 171 SEC_ASN1_SUB(SECOID_AlgorithmIDTemplate) },
michael@0 172 { SEC_ASN1_BIT_STRING | SEC_ASN1_XTRN,
michael@0 173 offsetof(CRMFPOPOSigningKey, signature),
michael@0 174 SEC_ASN1_SUB(SEC_BitStringTemplate) },
michael@0 175 { 0 }
michael@0 176 };
michael@0 177
michael@0 178 const SEC_ASN1Template CRMFPOPOSigningKeyTemplate[] = {
michael@0 179 { SEC_ASN1_CONTEXT_SPECIFIC | 1,
michael@0 180 0,
michael@0 181 crmfPOPOSigningKeyTemplate},
michael@0 182 { 0 }
michael@0 183 };
michael@0 184
michael@0 185 const SEC_ASN1Template CRMFThisMessageTemplate[] = {
michael@0 186 { SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 0,
michael@0 187 0,
michael@0 188 SEC_ASN1_SUB(SEC_BitStringTemplate) },
michael@0 189 { 0 }
michael@0 190 };
michael@0 191
michael@0 192 const SEC_ASN1Template CRMFSubsequentMessageTemplate[] = {
michael@0 193 { SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 1,
michael@0 194 0,
michael@0 195 SEC_ASN1_SUB(SEC_IntegerTemplate) },
michael@0 196 { 0 }
michael@0 197 };
michael@0 198
michael@0 199 const SEC_ASN1Template CRMFDHMACTemplate[] = {
michael@0 200 { SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 2,
michael@0 201 0,
michael@0 202 SEC_ASN1_SUB(SEC_BitStringTemplate) },
michael@0 203 { 0 }
michael@0 204 };
michael@0 205
michael@0 206 const SEC_ASN1Template CRMFPOPOKeyEnciphermentTemplate[] = {
michael@0 207 { SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED |
michael@0 208 SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 2,
michael@0 209 0,
michael@0 210 SEC_ASN1_SUB(SEC_AnyTemplate) },
michael@0 211 { 0 }
michael@0 212 };
michael@0 213
michael@0 214 const SEC_ASN1Template CRMFPOPOKeyAgreementTemplate[] = {
michael@0 215 { SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED |
michael@0 216 SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_XTRN | 3,
michael@0 217 0,
michael@0 218 SEC_ASN1_SUB(SEC_AnyTemplate)},
michael@0 219 { 0 }
michael@0 220 };
michael@0 221
michael@0 222 const SEC_ASN1Template CRMFEncryptedValueTemplate[] = {
michael@0 223 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CRMFEncryptedValue)},
michael@0 224 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_POINTER |
michael@0 225 SEC_ASN1_XTRN | 0,
michael@0 226 offsetof(CRMFEncryptedValue, intendedAlg),
michael@0 227 SEC_ASN1_SUB(SECOID_AlgorithmIDTemplate) },
michael@0 228 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_POINTER |
michael@0 229 SEC_ASN1_XTRN | 1,
michael@0 230 offsetof (CRMFEncryptedValue, symmAlg),
michael@0 231 SEC_ASN1_SUB(SECOID_AlgorithmIDTemplate) },
michael@0 232 { SEC_ASN1_NO_STREAM | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_OPTIONAL |
michael@0 233 SEC_ASN1_XTRN | 2,
michael@0 234 offsetof(CRMFEncryptedValue, encSymmKey),
michael@0 235 SEC_ASN1_SUB(SEC_BitStringTemplate) },
michael@0 236 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_POINTER |
michael@0 237 SEC_ASN1_XTRN | 3,
michael@0 238 offsetof(CRMFEncryptedValue, keyAlg),
michael@0 239 SEC_ASN1_SUB(SECOID_AlgorithmIDTemplate) },
michael@0 240 { SEC_ASN1_NO_STREAM | SEC_ASN1_OPTIONAL | SEC_ASN1_CONTEXT_SPECIFIC |
michael@0 241 SEC_ASN1_XTRN | 4,
michael@0 242 offsetof(CRMFEncryptedValue, valueHint),
michael@0 243 SEC_ASN1_SUB(SEC_OctetStringTemplate) },
michael@0 244 { SEC_ASN1_BIT_STRING, offsetof(CRMFEncryptedValue, encValue) },
michael@0 245 { 0 }
michael@0 246 };
michael@0 247
michael@0 248 const SEC_ASN1Template CRMFEncryptedKeyWithEncryptedValueTemplate [] = {
michael@0 249 { SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED |
michael@0 250 SEC_ASN1_CONTEXT_SPECIFIC | 0,
michael@0 251 0,
michael@0 252 CRMFEncryptedValueTemplate},
michael@0 253 { 0 }
michael@0 254 };
michael@0 255
michael@0 256 static const SEC_ASN1Template CRMFSinglePubInfoTemplate[] = {
michael@0 257 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof (CRMFSinglePubInfo)},
michael@0 258 { SEC_ASN1_INTEGER, offsetof(CRMFSinglePubInfo, pubMethod) },
michael@0 259 { SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC,
michael@0 260 offsetof(CRMFSinglePubInfo, pubLocation) },
michael@0 261 { 0 }
michael@0 262 };
michael@0 263
michael@0 264 static const SEC_ASN1Template CRMFPublicationInfoTemplate[] ={
michael@0 265 { SEC_ASN1_SEQUENCE, 0, NULL, sizeof(CRMFPKIPublicationInfo) },
michael@0 266 { SEC_ASN1_INTEGER, offsetof(CRMFPKIPublicationInfo, action) },
michael@0 267 { SEC_ASN1_POINTER, offsetof(CRMFPKIPublicationInfo, pubInfos),
michael@0 268 CRMFSinglePubInfoTemplate},
michael@0 269 { 0 }
michael@0 270 };

mercurial