mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
ASN.1 template: store issuer common name
Under certain configurations the certificate issuer's common name is kept in a DecodedCert. Wasn't implemented in ASN.1 template code.
This commit is contained in:
@ -12661,6 +12661,17 @@ static int GetHashId(const byte* id, int length, byte* hash, int hashAlg)
|
||||
(((id) - 3) >= 0 && ((id) - 3) < certNameSubjectSz && \
|
||||
(certNameSubject[(id) - 3].strLen > 0))
|
||||
|
||||
/* Set the string for a name component into the issuer name. */
|
||||
#define SetCertNameIssuer(cert, id, val) \
|
||||
*((char**)(((byte *)(cert)) + certNameSubject[(id) - 3].dataI)) = (val)
|
||||
/* Set the string length for a name component into the issuer name. */
|
||||
#define SetCertNameIssuerLen(cert, id, val) \
|
||||
*((int*)(((byte *)(cert)) + certNameSubject[(id) - 3].lenI)) = (int)(val)
|
||||
/* Set the encoding for a name component into the issuer name. */
|
||||
#define SetCertNameIssuerEnc(cert, id, val) \
|
||||
*((byte*)(((byte *)(cert)) + certNameSubject[(id) - 3].encI)) = (val)
|
||||
|
||||
|
||||
/* Mapping of certificate name component to useful information. */
|
||||
typedef struct CertNameData {
|
||||
/* Type string of name component. */
|
||||
@ -12674,6 +12685,14 @@ typedef struct CertNameData {
|
||||
size_t len;
|
||||
/* Offset of encoding in subject name component. */
|
||||
size_t enc;
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
/* Offset of data in subject name component. */
|
||||
size_t dataI;
|
||||
/* Offset of length in subject name component. */
|
||||
size_t lenI;
|
||||
/* Offset of encoding in subject name component. */
|
||||
size_t encI;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
/* NID of type for subject name component. */
|
||||
@ -12690,6 +12709,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectCN),
|
||||
OFFSETOF(DecodedCert, subjectCNLen),
|
||||
OFFSETOF(DecodedCert, subjectCNEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerCN),
|
||||
OFFSETOF(DecodedCert, issuerCNLen),
|
||||
OFFSETOF(DecodedCert, issuerCNEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_commonName
|
||||
@ -12702,6 +12726,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectSN),
|
||||
OFFSETOF(DecodedCert, subjectSNLen),
|
||||
OFFSETOF(DecodedCert, subjectSNEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerSN),
|
||||
OFFSETOF(DecodedCert, issuerSNLen),
|
||||
OFFSETOF(DecodedCert, issuerSNEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_surname
|
||||
@ -12714,6 +12743,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectSND),
|
||||
OFFSETOF(DecodedCert, subjectSNDLen),
|
||||
OFFSETOF(DecodedCert, subjectSNDEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerSND),
|
||||
OFFSETOF(DecodedCert, issuerSNDLen),
|
||||
OFFSETOF(DecodedCert, issuerSNDEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_serialNumber
|
||||
@ -12726,6 +12760,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectC),
|
||||
OFFSETOF(DecodedCert, subjectCLen),
|
||||
OFFSETOF(DecodedCert, subjectCEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerC),
|
||||
OFFSETOF(DecodedCert, issuerCLen),
|
||||
OFFSETOF(DecodedCert, issuerCEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_countryName
|
||||
@ -12738,6 +12777,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectL),
|
||||
OFFSETOF(DecodedCert, subjectLLen),
|
||||
OFFSETOF(DecodedCert, subjectLEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerL),
|
||||
OFFSETOF(DecodedCert, issuerLLen),
|
||||
OFFSETOF(DecodedCert, issuerLEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_localityName
|
||||
@ -12750,6 +12794,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectST),
|
||||
OFFSETOF(DecodedCert, subjectSTLen),
|
||||
OFFSETOF(DecodedCert, subjectSTEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerST),
|
||||
OFFSETOF(DecodedCert, issuerSTLen),
|
||||
OFFSETOF(DecodedCert, issuerSTEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_stateOrProvinceName
|
||||
@ -12762,6 +12811,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectStreet),
|
||||
OFFSETOF(DecodedCert, subjectStreetLen),
|
||||
OFFSETOF(DecodedCert, subjectStreetEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_streetAddress
|
||||
@ -12774,6 +12828,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectO),
|
||||
OFFSETOF(DecodedCert, subjectOLen),
|
||||
OFFSETOF(DecodedCert, subjectOEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerO),
|
||||
OFFSETOF(DecodedCert, issuerOLen),
|
||||
OFFSETOF(DecodedCert, issuerOEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_organizationName
|
||||
@ -12786,6 +12845,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectOU),
|
||||
OFFSETOF(DecodedCert, subjectOULen),
|
||||
OFFSETOF(DecodedCert, subjectOUEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
OFFSETOF(DecodedCert, issuerOU),
|
||||
OFFSETOF(DecodedCert, issuerOULen),
|
||||
OFFSETOF(DecodedCert, issuerOUEnc),
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_organizationalUnitName
|
||||
@ -12798,6 +12862,11 @@ static const CertNameData certNameSubject[] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
0,
|
||||
@ -12810,6 +12879,11 @@ static const CertNameData certNameSubject[] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
0,
|
||||
@ -12822,6 +12896,11 @@ static const CertNameData certNameSubject[] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
0,
|
||||
@ -12834,6 +12913,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectBC),
|
||||
OFFSETOF(DecodedCert, subjectBCLen),
|
||||
OFFSETOF(DecodedCert, subjectBCEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_businessCategory
|
||||
@ -12846,6 +12930,11 @@ static const CertNameData certNameSubject[] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
0,
|
||||
@ -12858,6 +12947,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectPC),
|
||||
OFFSETOF(DecodedCert, subjectPCLen),
|
||||
OFFSETOF(DecodedCert, subjectPCEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_postalCode
|
||||
@ -12870,6 +12964,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectUID),
|
||||
OFFSETOF(DecodedCert, subjectUIDLen),
|
||||
OFFSETOF(DecodedCert, subjectUIDEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_userId
|
||||
@ -12883,6 +12982,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectN),
|
||||
OFFSETOF(DecodedCert, subjectNLen),
|
||||
OFFSETOF(DecodedCert, subjectNEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_name
|
||||
@ -12895,6 +12999,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectGN),
|
||||
OFFSETOF(DecodedCert, subjectGNLen),
|
||||
OFFSETOF(DecodedCert, subjectGNEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_givenName
|
||||
@ -12907,6 +13016,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectI),
|
||||
OFFSETOF(DecodedCert, subjectILen),
|
||||
OFFSETOF(DecodedCert, subjectIEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_initials
|
||||
@ -12919,6 +13033,11 @@ static const CertNameData certNameSubject[] = {
|
||||
OFFSETOF(DecodedCert, subjectDNQ),
|
||||
OFFSETOF(DecodedCert, subjectDNQLen),
|
||||
OFFSETOF(DecodedCert, subjectDNQEnc),
|
||||
#ifdef WOLFSSL_HAVE_ISSUER_NAMES
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_X509_NAME_AVAILABLE
|
||||
NID_dnQualifier
|
||||
@ -12930,6 +13049,7 @@ static const CertNameData certNameSubject[] = {
|
||||
static const int certNameSubjectSz =
|
||||
(int) (sizeof(certNameSubject) / sizeof(CertNameData));
|
||||
|
||||
|
||||
/* ASN.1 template for an RDN.
|
||||
* X.509: RFC 5280, 4.1.2.4 - RelativeDistinguishedName
|
||||
*/
|
||||
@ -13270,6 +13390,43 @@ static int SetSubject(DecodedCert* cert, int id, byte* str, int strLen,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if (defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_CERT_EXT)) && \
|
||||
defined(WOLFSSL_HAVE_ISSUER_NAMES)
|
||||
/* Set the details of an issuer name component into a certificate.
|
||||
*
|
||||
* @param [in, out] cert Certificate object.
|
||||
* @param [in] id Id of component.
|
||||
* @param [in] str String for component.
|
||||
* @param [in] strLen Length of string.
|
||||
* @param [in] tag BER tag representing encoding of string.
|
||||
* @return 0 on success, negative values on failure.
|
||||
*/
|
||||
static int SetIssuer(DecodedCert* cert, int id, byte* str, int strLen,
|
||||
byte tag)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
/* Put string and encoding into certificate. */
|
||||
if (id == ASN_COMMON_NAME) {
|
||||
cert->issuerCN = (char *)str;
|
||||
cert->issuerCNLen = (int)strLen;
|
||||
cert->issuerCNEnc = (char)tag;
|
||||
}
|
||||
else if (id > ASN_COMMON_NAME && id <= ASN_USER_ID) {
|
||||
/* Use table and offsets to put data into appropriate fields. */
|
||||
SetCertNameIssuer(cert, id, (char*)str);
|
||||
SetCertNameIssuerLen(cert, id, strLen);
|
||||
SetCertNameIssuerEnc(cert, id, tag);
|
||||
}
|
||||
else if (id == ASN_EMAIL) {
|
||||
cert->issuerEmail = (char*)str;
|
||||
cert->issuerEmailLen = strLen;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Get a RelativeDistinguishedName from the encoding and put in certificate.
|
||||
*
|
||||
* @param [in, out] cert Certificate object.
|
||||
@ -13402,6 +13559,13 @@ static int GetRDN(DecodedCert* cert, char* full, word32* idx, int* nid,
|
||||
/* Store subject field components. */
|
||||
ret = SetSubject(cert, id, str, (int)strLen, tag);
|
||||
}
|
||||
#if (defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_CERT_EXT)) && \
|
||||
defined(WOLFSSL_HAVE_ISSUER_NAMES)
|
||||
/* Put issuer common name string and encoding into certificate. */
|
||||
else {
|
||||
ret = SetIssuer(cert, id, str, (int)strLen, tag);
|
||||
}
|
||||
#endif
|
||||
if (ret == 0) {
|
||||
/* Check there is space for this in the full name string and
|
||||
* terminating NUL character. */
|
||||
|
Reference in New Issue
Block a user