Skip to content

Commit 9bc3b86

Browse files
authored
Merge pull request wolfSSL#6157 from miyazakh/add_favouriteDrinkNID
2 parents fa8b253 + 05b0796 commit 9bc3b86

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

src/x509.c

+1
Original file line numberDiff line numberDiff line change
@@ -9987,6 +9987,7 @@ static int ConvertNIDToWolfSSL(int nid)
99879987
case NID_businessCategory: return ASN_BUS_CAT;
99889988
case NID_domainComponent: return ASN_DOMAIN_COMPONENT;
99899989
case NID_postalCode: return ASN_POSTAL_CODE;
9990+
case NID_favouriteDrink: return ASN_FAVOURITE_DRINK;
99909991
default:
99919992
WOLFSSL_MSG("Attribute NID not found");
99929993
return -1;

tests/api.c

+10
Original file line numberDiff line numberDiff line change
@@ -41057,15 +41057,25 @@ static int test_wolfSSL_X509_NAME_ENTRY(void)
4105741057
#ifdef WOLFSSL_CERT_REQ
4105841058
{
4105941059
unsigned char srv_pkcs9p[] = "Server";
41060+
unsigned char fvrtDrnk[] = "tequila";
41061+
unsigned char* der = NULL;
4106041062
char* subject;
4106141063
AssertIntEQ(X509_NAME_add_entry_by_NID(nm, NID_pkcs9_contentType,
4106241064
MBSTRING_ASC, srv_pkcs9p, -1, -1, 0), SSL_SUCCESS);
4106341065

41066+
AssertIntEQ(X509_NAME_add_entry_by_NID(nm, NID_favouriteDrink,
41067+
MBSTRING_ASC, fvrtDrnk, -1, -1, 0), SSL_SUCCESS);
41068+
41069+
AssertIntGT(wolfSSL_i2d_X509_NAME(nm, &der), 0);
41070+
AssertNotNull(der);
41071+
4106441072
subject = X509_NAME_oneline(nm, 0, 0);
41073+
AssertNotNull(XSTRSTR(subject, "favouriteDrink=tequila"));
4106541074
#ifdef DEBUG_WOLFSSL
4106641075
fprintf(stderr, "\n\t%s\n", subject);
4106741076
#endif
4106841077
XFREE(subject, 0, DYNAMIC_TYPE_OPENSSL);
41078+
XFREE(der, NULL, DYNAMIC_TYPE_OPENSSL);
4106941079
}
4107041080
#endif
4107141081

wolfcrypt/src/asn.c

+32-1
Original file line numberDiff line numberDiff line change
@@ -4353,7 +4353,9 @@ static const byte dnsSRVOid[] = {43, 6, 1, 5, 5, 7, 8, 7};
43534353
defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || \
43544354
defined(WOLFSSL_ASN_TEMPLATE)
43554355
/* Pilot attribute types (0.9.2342.19200300.100.1.*) */
4356-
static const byte uidOid[] = {9, 146, 38, 137, 147, 242, 44, 100, 1, 1}; /* user id */
4356+
#define PLT_ATTR_TYPE_OID_BASE(num) {9, 146, 38, 137, 147, 242, 44, 100, 1, num}
4357+
static const byte uidOid[] = PLT_ATTR_TYPE_OID_BASE(1); /* user id */
4358+
static const byte fvrtDrk[] = PLT_ATTR_TYPE_OID_BASE(5);/* favourite drink*/
43574359
#endif
43584360

43594361
#if defined(WOLFSSL_CERT_GEN) || \
@@ -12408,6 +12410,15 @@ static int GetRDN(DecodedCert* cert, char* full, word32* idx, int* nid,
1240812410
*nid = NID_domainComponent;
1240912411
#endif
1241012412
}
12413+
else if (oidSz == sizeof(fvrtDrk) && XMEMCMP(oid, fvrtDrk, oidSz) == 0) {
12414+
/* Set the favourite drink, type string, length and NID. */
12415+
id = ASN_FAVOURITE_DRINK;
12416+
typeStr = WOLFSSL_FAVOURITE_DRINK;
12417+
typeStrLen = sizeof(WOLFSSL_FAVOURITE_DRINK) - 1;
12418+
#ifdef WOLFSSL_X509_NAME_AVAILABLE
12419+
*nid = NID_favouriteDrink;
12420+
#endif
12421+
}
1241112422
/* Other OIDs that start with the same values. */
1241212423
else if (oidSz == sizeof(dcOid) && XMEMCMP(oid, dcOid, oidSz-1) == 0) {
1241312424
WOLFSSL_MSG("Unknown pilot attribute type");
@@ -25806,6 +25817,10 @@ static int EncodeName(EncodedName* name, const char* nameStr,
2580625817
thisLen += (int)sizeof(uidOid);
2580725818
firstSz = (int)sizeof(uidOid);
2580825819
break;
25820+
case ASN_FAVOURITE_DRINK:
25821+
thisLen += (int)sizeof(fvrtDrk);
25822+
firstSz = (int)sizeof(fvrtDrk);
25823+
break;
2580925824
#ifdef WOLFSSL_CUSTOM_OID
2581025825
case ASN_CUSTOM_NAME:
2581125826
thisLen += cname->custom.oidSz;
@@ -25861,6 +25876,12 @@ static int EncodeName(EncodedName* name, const char* nameStr,
2586125876
/* str type */
2586225877
name->encoded[idx++] = nameTag;
2586325878
break;
25879+
case ASN_FAVOURITE_DRINK:
25880+
XMEMCPY(name->encoded + idx, fvrtDrk, sizeof(fvrtDrk));
25881+
idx += (int)sizeof(fvrtDrk);
25882+
/* str type */
25883+
name->encoded[idx++] = nameTag;
25884+
break;
2586425885
#ifdef WOLFSSL_CUSTOM_OID
2586525886
case ASN_CUSTOM_NAME:
2586625887
XMEMCPY(name->encoded + idx, cname->custom.oid,
@@ -25931,6 +25952,10 @@ static int EncodeName(EncodedName* name, const char* nameStr,
2593125952
oid = uidOid;
2593225953
oidSz = sizeof(uidOid);
2593325954
break;
25955+
case ASN_FAVOURITE_DRINK:
25956+
oid = fvrtDrk;
25957+
oidSz = sizeof(fvrtDrk);
25958+
break;
2593425959
#ifdef WOLFSSL_CUSTOM_OID
2593525960
case ASN_CUSTOM_NAME:
2593625961
nameSz = cname->custom.valSz;
@@ -26118,6 +26143,12 @@ static int SetNameRdnItems(ASNSetData* dataASN, ASNItem* namesASN,
2611826143
sizeof(uidOid), GetNameType(name, i),
2611926144
(const byte*)GetOneCertName(name, i), nameLen[i]);
2612026145
}
26146+
else if (type == ASN_FAVOURITE_DRINK) {
26147+
/* Copy favourite drink data into dynamic vars. */
26148+
SetRdnItems(namesASN + idx, dataASN + idx, fvrtDrk,
26149+
sizeof(fvrtDrk), GetNameType(name, i),
26150+
(const byte*)GetOneCertName(name, i), nameLen[i]);
26151+
}
2612126152
else if (type == ASN_CUSTOM_NAME) {
2612226153
#ifdef WOLFSSL_CUSTOM_OID
2612326154
SetRdnItems(namesASN + idx, dataASN + idx, name->custom.oid,

0 commit comments

Comments
 (0)