1*b0d17251Schristos /*- 2*b0d17251Schristos * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. 3*b0d17251Schristos * Copyright Nokia 2007-2019 4*b0d17251Schristos * Copyright Siemens AG 2015-2019 5*b0d17251Schristos * 6*b0d17251Schristos * Licensed under the Apache License 2.0 (the "License"). You may not use 7*b0d17251Schristos * this file except in compliance with the License. You can obtain a copy 8*b0d17251Schristos * in the file LICENSE in the source distribution or at 9*b0d17251Schristos * https://www.openssl.org/source/license.html 10*b0d17251Schristos * 11*b0d17251Schristos * CRMF implementation by Martin Peylo, Miikka Viljanen, and David von Oheimb. 12*b0d17251Schristos */ 13*b0d17251Schristos 14*b0d17251Schristos #include <openssl/asn1t.h> 15*b0d17251Schristos 16*b0d17251Schristos #include "crmf_local.h" 17*b0d17251Schristos 18*b0d17251Schristos /* explicit #includes not strictly needed since implied by the above: */ 19*b0d17251Schristos #include <openssl/crmf.h> 20*b0d17251Schristos 21*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_PRIVATEKEYINFO) = { 22*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PRIVATEKEYINFO, version, ASN1_INTEGER), 23*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PRIVATEKEYINFO, privateKeyAlgorithm, X509_ALGOR), 24*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PRIVATEKEYINFO, privateKey, ASN1_OCTET_STRING), 25*b0d17251Schristos ASN1_IMP_SET_OF_OPT(OSSL_CRMF_PRIVATEKEYINFO, attributes, X509_ATTRIBUTE, 0) 26*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_PRIVATEKEYINFO) 27*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_PRIVATEKEYINFO) 28*b0d17251Schristos 29*b0d17251Schristos 30*b0d17251Schristos ASN1_CHOICE(OSSL_CRMF_ENCKEYWITHID_IDENTIFIER) = { 31*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ENCKEYWITHID_IDENTIFIER, value.string, ASN1_UTF8STRING), 32*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ENCKEYWITHID_IDENTIFIER, value.generalName, GENERAL_NAME) 33*b0d17251Schristos } ASN1_CHOICE_END(OSSL_CRMF_ENCKEYWITHID_IDENTIFIER) 34*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_ENCKEYWITHID_IDENTIFIER) 35*b0d17251Schristos 36*b0d17251Schristos 37*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_ENCKEYWITHID) = { 38*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ENCKEYWITHID, privateKey, OSSL_CRMF_PRIVATEKEYINFO), 39*b0d17251Schristos ASN1_OPT(OSSL_CRMF_ENCKEYWITHID, identifier, 40*b0d17251Schristos OSSL_CRMF_ENCKEYWITHID_IDENTIFIER) 41*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_ENCKEYWITHID) 42*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_ENCKEYWITHID) 43*b0d17251Schristos 44*b0d17251Schristos 45*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_CERTID) = { 46*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_CERTID, issuer, GENERAL_NAME), 47*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_CERTID, serialNumber, ASN1_INTEGER) 48*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_CERTID) 49*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) 50*b0d17251Schristos IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) 51*b0d17251Schristos 52*b0d17251Schristos 53*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_ENCRYPTEDVALUE) = { 54*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_ENCRYPTEDVALUE, intendedAlg, X509_ALGOR, 0), 55*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_ENCRYPTEDVALUE, symmAlg, X509_ALGOR, 1), 56*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_ENCRYPTEDVALUE, encSymmKey, ASN1_BIT_STRING, 2), 57*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_ENCRYPTEDVALUE, keyAlg, X509_ALGOR, 3), 58*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_ENCRYPTEDVALUE, valueHint, ASN1_OCTET_STRING, 4), 59*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ENCRYPTEDVALUE, encValue, ASN1_BIT_STRING) 60*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_ENCRYPTEDVALUE) 61*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) 62*b0d17251Schristos 63*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_SINGLEPUBINFO) = { 64*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_SINGLEPUBINFO, pubMethod, ASN1_INTEGER), 65*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_SINGLEPUBINFO, pubLocation, GENERAL_NAME) 66*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_SINGLEPUBINFO) 67*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) 68*b0d17251Schristos 69*b0d17251Schristos 70*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_PKIPUBLICATIONINFO) = { 71*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PKIPUBLICATIONINFO, action, ASN1_INTEGER), 72*b0d17251Schristos ASN1_SEQUENCE_OF_OPT(OSSL_CRMF_PKIPUBLICATIONINFO, pubInfos, 73*b0d17251Schristos OSSL_CRMF_SINGLEPUBINFO) 74*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_PKIPUBLICATIONINFO) 75*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) 76*b0d17251Schristos IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CRMF_PKIPUBLICATIONINFO) 77*b0d17251Schristos 78*b0d17251Schristos 79*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_PKMACVALUE) = { 80*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PKMACVALUE, algId, X509_ALGOR), 81*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PKMACVALUE, value, ASN1_BIT_STRING) 82*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_PKMACVALUE) 83*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_PKMACVALUE) 84*b0d17251Schristos 85*b0d17251Schristos 86*b0d17251Schristos ASN1_CHOICE(OSSL_CRMF_POPOPRIVKEY) = { 87*b0d17251Schristos ASN1_IMP(OSSL_CRMF_POPOPRIVKEY, value.thisMessage, ASN1_BIT_STRING, 0), 88*b0d17251Schristos ASN1_IMP(OSSL_CRMF_POPOPRIVKEY, value.subsequentMessage, ASN1_INTEGER, 1), 89*b0d17251Schristos ASN1_IMP(OSSL_CRMF_POPOPRIVKEY, value.dhMAC, ASN1_BIT_STRING, 2), 90*b0d17251Schristos ASN1_IMP(OSSL_CRMF_POPOPRIVKEY, value.agreeMAC, OSSL_CRMF_PKMACVALUE, 3), 91*b0d17251Schristos ASN1_IMP(OSSL_CRMF_POPOPRIVKEY, value.encryptedKey, ASN1_NULL, 4), 92*b0d17251Schristos } ASN1_CHOICE_END(OSSL_CRMF_POPOPRIVKEY) 93*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_POPOPRIVKEY) 94*b0d17251Schristos 95*b0d17251Schristos 96*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_PBMPARAMETER) = { 97*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PBMPARAMETER, salt, ASN1_OCTET_STRING), 98*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PBMPARAMETER, owf, X509_ALGOR), 99*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PBMPARAMETER, iterationCount, ASN1_INTEGER), 100*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_PBMPARAMETER, mac, X509_ALGOR) 101*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_PBMPARAMETER) 102*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) 103*b0d17251Schristos 104*b0d17251Schristos 105*b0d17251Schristos ASN1_CHOICE(OSSL_CRMF_POPOSIGNINGKEYINPUT_AUTHINFO) = { 106*b0d17251Schristos ASN1_EXP(OSSL_CRMF_POPOSIGNINGKEYINPUT_AUTHINFO, value.sender, 107*b0d17251Schristos GENERAL_NAME, 0), 108*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_POPOSIGNINGKEYINPUT_AUTHINFO, value.publicKeyMAC, 109*b0d17251Schristos OSSL_CRMF_PKMACVALUE) 110*b0d17251Schristos } ASN1_CHOICE_END(OSSL_CRMF_POPOSIGNINGKEYINPUT_AUTHINFO) 111*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_POPOSIGNINGKEYINPUT_AUTHINFO) 112*b0d17251Schristos 113*b0d17251Schristos 114*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_POPOSIGNINGKEYINPUT) = { 115*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_POPOSIGNINGKEYINPUT, authInfo, 116*b0d17251Schristos OSSL_CRMF_POPOSIGNINGKEYINPUT_AUTHINFO), 117*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_POPOSIGNINGKEYINPUT, publicKey, X509_PUBKEY) 118*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_POPOSIGNINGKEYINPUT) 119*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_POPOSIGNINGKEYINPUT) 120*b0d17251Schristos 121*b0d17251Schristos 122*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_POPOSIGNINGKEY) = { 123*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_POPOSIGNINGKEY, poposkInput, 124*b0d17251Schristos OSSL_CRMF_POPOSIGNINGKEYINPUT, 0), 125*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_POPOSIGNINGKEY, algorithmIdentifier, X509_ALGOR), 126*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_POPOSIGNINGKEY, signature, ASN1_BIT_STRING) 127*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_POPOSIGNINGKEY) 128*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_POPOSIGNINGKEY) 129*b0d17251Schristos 130*b0d17251Schristos 131*b0d17251Schristos ASN1_CHOICE(OSSL_CRMF_POPO) = { 132*b0d17251Schristos ASN1_IMP(OSSL_CRMF_POPO, value.raVerified, ASN1_NULL, 0), 133*b0d17251Schristos ASN1_IMP(OSSL_CRMF_POPO, value.signature, OSSL_CRMF_POPOSIGNINGKEY, 1), 134*b0d17251Schristos ASN1_EXP(OSSL_CRMF_POPO, value.keyEncipherment, OSSL_CRMF_POPOPRIVKEY, 2), 135*b0d17251Schristos ASN1_EXP(OSSL_CRMF_POPO, value.keyAgreement, OSSL_CRMF_POPOPRIVKEY, 3) 136*b0d17251Schristos } ASN1_CHOICE_END(OSSL_CRMF_POPO) 137*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_POPO) 138*b0d17251Schristos 139*b0d17251Schristos 140*b0d17251Schristos ASN1_ADB_TEMPLATE(attributetypeandvalue_default) = 141*b0d17251Schristos ASN1_OPT(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, value.other, ASN1_ANY); 142*b0d17251Schristos ASN1_ADB(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) = { 143*b0d17251Schristos ADB_ENTRY(NID_id_regCtrl_regToken, 144*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 145*b0d17251Schristos value.regToken, ASN1_UTF8STRING)), 146*b0d17251Schristos ADB_ENTRY(NID_id_regCtrl_authenticator, 147*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 148*b0d17251Schristos value.authenticator, ASN1_UTF8STRING)), 149*b0d17251Schristos ADB_ENTRY(NID_id_regCtrl_pkiPublicationInfo, 150*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 151*b0d17251Schristos value.pkiPublicationInfo, 152*b0d17251Schristos OSSL_CRMF_PKIPUBLICATIONINFO)), 153*b0d17251Schristos ADB_ENTRY(NID_id_regCtrl_oldCertID, 154*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 155*b0d17251Schristos value.oldCertID, OSSL_CRMF_CERTID)), 156*b0d17251Schristos ADB_ENTRY(NID_id_regCtrl_protocolEncrKey, 157*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 158*b0d17251Schristos value.protocolEncrKey, X509_PUBKEY)), 159*b0d17251Schristos ADB_ENTRY(NID_id_regInfo_utf8Pairs, 160*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 161*b0d17251Schristos value.utf8Pairs, ASN1_UTF8STRING)), 162*b0d17251Schristos ADB_ENTRY(NID_id_regInfo_certReq, 163*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 164*b0d17251Schristos value.certReq, OSSL_CRMF_CERTREQUEST)), 165*b0d17251Schristos } ASN1_ADB_END(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, 0, type, 0, 166*b0d17251Schristos &attributetypeandvalue_default_tt, NULL); 167*b0d17251Schristos 168*b0d17251Schristos 169*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) = { 170*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, type, ASN1_OBJECT), 171*b0d17251Schristos ASN1_ADB_OBJECT(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) 172*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) 173*b0d17251Schristos 174*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) 175*b0d17251Schristos IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) 176*b0d17251Schristos 177*b0d17251Schristos 178*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_OPTIONALVALIDITY) = { 179*b0d17251Schristos ASN1_EXP_OPT(OSSL_CRMF_OPTIONALVALIDITY, notBefore, ASN1_TIME, 0), 180*b0d17251Schristos ASN1_EXP_OPT(OSSL_CRMF_OPTIONALVALIDITY, notAfter, ASN1_TIME, 1) 181*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_OPTIONALVALIDITY) 182*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_OPTIONALVALIDITY) 183*b0d17251Schristos 184*b0d17251Schristos 185*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_CERTTEMPLATE) = { 186*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, version, ASN1_INTEGER, 0), 187*b0d17251Schristos /* 188*b0d17251Schristos * serialNumber MUST be omitted. This field is assigned by the CA 189*b0d17251Schristos * during certificate creation. 190*b0d17251Schristos */ 191*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, serialNumber, ASN1_INTEGER, 1), 192*b0d17251Schristos /* 193*b0d17251Schristos * signingAlg MUST be omitted. This field is assigned by the CA 194*b0d17251Schristos * during certificate creation. 195*b0d17251Schristos */ 196*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, signingAlg, X509_ALGOR, 2), 197*b0d17251Schristos ASN1_EXP_OPT(OSSL_CRMF_CERTTEMPLATE, issuer, X509_NAME, 3), 198*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, validity, 199*b0d17251Schristos OSSL_CRMF_OPTIONALVALIDITY, 4), 200*b0d17251Schristos ASN1_EXP_OPT(OSSL_CRMF_CERTTEMPLATE, subject, X509_NAME, 5), 201*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, publicKey, X509_PUBKEY, 6), 202*b0d17251Schristos /* issuerUID is deprecated in version 2 */ 203*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, issuerUID, ASN1_BIT_STRING, 7), 204*b0d17251Schristos /* subjectUID is deprecated in version 2 */ 205*b0d17251Schristos ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, subjectUID, ASN1_BIT_STRING, 8), 206*b0d17251Schristos ASN1_IMP_SEQUENCE_OF_OPT(OSSL_CRMF_CERTTEMPLATE, extensions, 207*b0d17251Schristos X509_EXTENSION, 9), 208*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_CERTTEMPLATE) 209*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) 210*b0d17251Schristos 211*b0d17251Schristos 212*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_CERTREQUEST) = { 213*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_CERTREQUEST, certReqId, ASN1_INTEGER), 214*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_CERTREQUEST, certTemplate, OSSL_CRMF_CERTTEMPLATE), 215*b0d17251Schristos ASN1_SEQUENCE_OF_OPT(OSSL_CRMF_CERTREQUEST, controls, 216*b0d17251Schristos OSSL_CRMF_ATTRIBUTETYPEANDVALUE) 217*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_CERTREQUEST) 218*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_CERTREQUEST) 219*b0d17251Schristos IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTREQUEST) 220*b0d17251Schristos 221*b0d17251Schristos 222*b0d17251Schristos ASN1_SEQUENCE(OSSL_CRMF_MSG) = { 223*b0d17251Schristos ASN1_SIMPLE(OSSL_CRMF_MSG, certReq, OSSL_CRMF_CERTREQUEST), 224*b0d17251Schristos ASN1_OPT(OSSL_CRMF_MSG, popo, OSSL_CRMF_POPO), 225*b0d17251Schristos ASN1_SEQUENCE_OF_OPT(OSSL_CRMF_MSG, regInfo, 226*b0d17251Schristos OSSL_CRMF_ATTRIBUTETYPEANDVALUE) 227*b0d17251Schristos } ASN1_SEQUENCE_END(OSSL_CRMF_MSG) 228*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_MSG) 229*b0d17251Schristos IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) 230*b0d17251Schristos 231*b0d17251Schristos ASN1_ITEM_TEMPLATE(OSSL_CRMF_MSGS) = 232*b0d17251Schristos ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, 233*b0d17251Schristos OSSL_CRMF_MSGS, OSSL_CRMF_MSG) 234*b0d17251Schristos ASN1_ITEM_TEMPLATE_END(OSSL_CRMF_MSGS) 235*b0d17251Schristos IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) 236