Skip to content

Commit 6ba552a

Browse files
committed
fix lareger(>57 octets) crlnum
1 parent 350706d commit 6ba552a

5 files changed

Lines changed: 136 additions & 22 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
Certificate Revocation List (CRL):
2+
Version 2 (0x1)
3+
Signature Algorithm: sha256WithRSAEncryption
4+
Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com, emailAddress=info@wolfssl.com
5+
Last Update: Mar 5 05:15:20 2026 GMT
6+
Next Update: Nov 29 05:15:20 2028 GMT
7+
CRL extensions:
8+
X509v3 CRL Number:
9+
0x444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
10+
Revoked Certificates:
11+
Serial Number: 01
12+
Revocation Date: Mar 5 05:15:20 2026 GMT
13+
Signature Algorithm: sha256WithRSAEncryption
14+
Signature Value:
15+
2d:38:2c:0e:27:b8:55:dd:0c:c5:1b:9d:13:b9:6a:c4:05:6d:
16+
43:37:41:ee:d7:e1:5e:7f:2c:3e:72:14:9d:0b:f0:89:f8:06:
17+
3c:75:21:cf:8a:5d:3b:56:3c:c6:a9:b1:56:2e:84:c2:05:60:
18+
8b:86:33:d0:0b:ab:ba:37:9f:13:af:a1:2e:40:c6:35:f0:b3:
19+
e3:ce:40:2f:4a:65:2b:72:ab:54:c2:56:b7:ca:8a:54:22:c9:
20+
ba:d2:fb:ab:f6:e1:cb:05:ae:25:3a:11:ce:bf:9b:0a:9a:37:
21+
1a:05:3e:a2:c4:98:68:71:78:70:58:d6:6b:93:97:36:54:7b:
22+
73:1c:24:5b:19:a8:f4:da:c6:73:f1:58:1a:e6:53:0d:88:d9:
23+
b8:b1:e7:f7:f6:13:4c:8d:86:d7:51:c8:89:93:1f:f0:e5:0a:
24+
4c:01:21:9b:ad:fe:ed:5b:0f:77:71:8e:3b:ec:3c:e0:c9:3e:
25+
ed:a0:20:f8:51:6c:bc:a9:57:27:13:ff:1d:28:70:41:ce:42:
26+
05:9f:f5:1f:d4:73:13:89:c0:9e:34:d1:8f:12:9d:07:2b:2e:
27+
1d:3b:ba:5e:18:72:b7:11:f7:3b:54:59:7d:81:57:1f:25:02:
28+
c5:e1:58:b5:f8:01:e0:62:6d:92:50:bc:c4:f9:26:4e:72:37:
29+
16:42:e0:c1
30+
-----BEGIN X509 CRL-----
31+
MIICPTCCASUCAQEwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVTMRAwDgYD
32+
VQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3plbWFuMREwDwYDVQQKDAhTYXd0b290
33+
aDETMBEGA1UECwwKQ29uc3VsdGluZzEYMBYGA1UEAwwPd3d3LndvbGZzc2wuY29t
34+
MR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tFw0yNjAzMDUwNTE1MjBa
35+
Fw0yODExMjkwNTE1MjBaMBQwEgIBARcNMjYwMzA1MDUxNTIwWqBGMEQwQgYDVR0U
36+
BDsCOURERERERERERERERERERERERERERERERERERERERERERERERERERERERERE
37+
RERERERERERERERERDANBgkqhkiG9w0BAQsFAAOCAQEALTgsDie4Vd0MxRudE7lq
38+
xAVtQzdB7tfhXn8sPnIUnQvwifgGPHUhz4pdO1Y8xqmxVi6EwgVgi4Yz0Aurujef
39+
E6+hLkDGNfCz485AL0plK3KrVMJWt8qKVCLJutL7q/bhywWuJToRzr+bCpo3GgU+
40+
osSYaHF4cFjWa5OXNlR7cxwkWxmo9NrGc/FYGuZTDYjZuLHn9/YTTI2G11HIiZMf
41+
8OUKTAEhm63+7VsPd3GOO+w84Mk+7aAg+FFsvKlXJxP/HShwQc5CBZ/1H9RzE4nA
42+
njTRjxKdBysuHTu6XhhytxH3O1RZfYFXHyUCxeFYtfgB4GJtklC8xPkmTnI3FkLg
43+
wQ==
44+
-----END X509 CRL-----
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
Certificate Revocation List (CRL):
2+
Version 2 (0x1)
3+
Signature Algorithm: sha256WithRSAEncryption
4+
Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com, emailAddress=info@wolfssl.com
5+
Last Update: Mar 5 05:15:20 2026 GMT
6+
Next Update: Nov 29 05:15:20 2028 GMT
7+
CRL extensions:
8+
X509v3 CRL Number:
9+
0x44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
10+
Revoked Certificates:
11+
Serial Number: 01
12+
Revocation Date: Mar 5 05:15:20 2026 GMT
13+
Signature Algorithm: sha256WithRSAEncryption
14+
Signature Value:
15+
24:11:b9:3a:df:b5:07:d0:94:b7:1a:73:10:02:f6:13:c5:57:
16+
e3:48:6e:e7:fc:8c:c6:07:15:0b:21:f4:4b:61:d4:1f:98:79:
17+
8d:02:d6:b5:30:e5:72:85:36:a2:8f:73:32:9b:6c:e1:5b:0f:
18+
9e:e9:e7:ba:0c:a2:f9:4e:87:84:40:dd:4b:5d:26:e5:87:23:
19+
01:3e:87:3b:19:86:a6:25:6a:48:73:1c:d5:a0:56:1a:52:65:
20+
7e:aa:00:b0:2a:6b:ce:95:ce:c0:4f:7c:d7:ef:78:c2:78:b0:
21+
ce:ad:4f:02:e2:ce:56:de:a5:43:5b:ad:78:5a:a7:bc:8d:6e:
22+
ef:86:e1:9e:47:5c:e7:c8:12:81:8d:5a:63:c4:5a:2c:20:54:
23+
da:1e:7f:f0:16:c9:f5:fc:9a:fa:ca:03:73:90:38:11:d1:0e:
24+
98:34:84:fe:62:1e:8a:20:66:ee:40:09:f1:8d:bc:b5:52:af:
25+
22:b8:a7:e5:0c:a7:38:e8:4a:9c:09:99:95:ae:cf:a2:8e:a8:
26+
21:cd:5e:96:a7:ea:4f:bc:a5:be:37:a1:c7:5b:27:3f:b5:99:
27+
08:62:35:7f:98:2a:20:27:3e:c3:1b:9d:c2:51:66:7c:dd:64:
28+
38:89:fc:89:fc:c0:54:f9:0d:16:72:44:3c:25:3c:a3:88:b9:
29+
c7:00:df:81
30+
-----BEGIN X509 CRL-----
31+
MIICRDCCASwCAQEwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVTMRAwDgYD
32+
VQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3plbWFuMREwDwYDVQQKDAhTYXd0b290
33+
aDETMBEGA1UECwwKQ29uc3VsdGluZzEYMBYGA1UEAwwPd3d3LndvbGZzc2wuY29t
34+
MR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tFw0yNjAzMDUwNTE1MjBa
35+
Fw0yODExMjkwNTE1MjBaMBQwEgIBARcNMjYwMzA1MDUxNTIwWqBNMEswSQYDVR0U
36+
BEICQERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE
37+
REREREREREREREREREREREREREQwDQYJKoZIhvcNAQELBQADggEBACQRuTrftQfQ
38+
lLcacxAC9hPFV+NIbuf8jMYHFQsh9Eth1B+YeY0C1rUw5XKFNqKPczKbbOFbD57p
39+
57oMovlOh4RA3UtdJuWHIwE+hzsZhqYlakhzHNWgVhpSZX6qALAqa86VzsBPfNfv
40+
eMJ4sM6tTwLizlbepUNbrXhap7yNbu+G4Z5HXOfIEoGNWmPEWiwgVNoef/AWyfX8
41+
mvrKA3OQOBHRDpg0hP5iHoogZu5ACfGNvLVSryK4p+UMpzjoSpwJmZWuz6KOqCHN
42+
Xpan6k+8pb43ocdbJz+1mQhiNX+YKiAnPsMbncJRZnzdZDiJ/In8wFT5DRZyRDwl
43+
PKOIuccA34E=
44+
-----END X509 CRL-----

certs/crl/gencrls.sh

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,30 @@ openssl ca -config ../renewcerts/wolfssl.cnf -gencrl -crldays 1000 -out extra-cr
236236
check_result $?
237237

238238
# metadata
239-
echo "Step 30"
239+
echo "Step 31"
240240
openssl crl -in extra-crls/large_crlnum2.pem -text > tmp
241241
check_result $?
242242
mv tmp extra-crls/large_crlnum2.pem
243243

244+
echo "Step 32 larger CRL number( 57 octets )"
245+
printf '%0114d' | tr '0' '4' > crlnumber # 0x41 * 57 = 114 hex chars crlnumber
246+
openssl ca -config ../renewcerts/wolfssl.cnf -gencrl -crldays 1000 -out extra-crls/crlnum_57oct.pem -keyfile ../ca-key.pem -cert ../ca-cert.pem
247+
check_result $?
248+
# metadata
249+
echo "Step 33"
250+
openssl crl -in extra-crls/crlnum_57oct.pem -text > tmp
251+
check_result $?
252+
mv tmp extra-crls/crlnum_57oct.pem
253+
254+
echo "Step 34 larger CRL number( 64 octets )"
255+
printf '%0128d' | tr '0' '4' > crlnumber # 0x41 * 64 = 128 hex chars crlnumber
256+
openssl ca -config ../renewcerts/wolfssl.cnf -gencrl -crldays 1000 -out extra-crls/crlnum_64oct.pem -keyfile ../ca-key.pem -cert ../ca-cert.pem
257+
check_result $?
258+
259+
# metadata
260+
echo "Step 35"
261+
openssl crl -in extra-crls/crlnum_64oct.pem -text > tmp
262+
check_result $?
263+
mv tmp extra-crls/crlnum_64oct.pem
264+
244265
exit 0

tests/api.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23045,6 +23045,8 @@ static int test_wolfSSL_CTX_LoadCRL_largeCRLnum(void)
2304523045
const char* caCert = "./certs/ca-cert.pem";
2304623046
const char* crl_lrgcrlnum = "./certs/crl/extra-crls/large_crlnum.pem";
2304723047
const char* crl_lrgcrlnum2 = "./certs/crl/extra-crls/large_crlnum2.pem";
23048+
const char* crl_57oct = "./certs/crl/extra-crls/crlnum_57oct.pem";
23049+
const char* crl_64oct = "./certs/crl/extra-crls/crlnum_64oct.pem";
2304823050
const char* exp_crlnum = "D8AFADA7F08B38E6178BD0E5CD7B0DF80071BA74";
2304923051
byte *crlLrgCrlNumBuff = NULL;
2305023052
word32 crlLrgCrlNumSz;
@@ -23081,6 +23083,15 @@ static int test_wolfSSL_CTX_LoadCRL_largeCRLnum(void)
2308123083
WOLFSSL_FILETYPE_PEM),
2308223084
ASN_PARSE_E);
2308323085

23086+
/* Expect to fail loading CRL because of >57 octets CRL number */
23087+
ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, crl_57oct,
23088+
WOLFSSL_FILETYPE_PEM),
23089+
ASN_PARSE_E);
23090+
/* Expect to fail loading CRL because of >64 octets CRL number */
23091+
ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, crl_64oct,
23092+
WOLFSSL_FILETYPE_PEM),
23093+
ASN_PARSE_E);
23094+
2308423095
XFREE(crlLrgCrlNumBuff, NULL, DYNAMIC_TYPE_FILE);
2308523096
wolfSSL_CertManagerFree(cm);
2308623097
#endif

wolfcrypt/src/asn.c

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -41590,7 +41590,7 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf,
4159041590
WOLFSSL_MSG("\tcouldn't parse CRL number extension");
4159141591
return ret;
4159241592
}
41593-
else {
41593+
else if (length <= CRL_MAX_NUM_SZ) {
4159441594
DECL_MP_INT_SIZE_DYN(m, CRL_MAX_NUM_SZ_BITS,
4159541595
CRL_MAX_NUM_SZ_BITS);
4159641596
NEW_MP_INT_SIZE(m, CRL_MAX_NUM_SZ_BITS, NULL,
@@ -41611,15 +41611,7 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf,
4161141611

4161241612
if (ret != MP_OKAY)
4161341613
ret = BUFFER_E;
41614-
/* Check CRL number size
41615-
* if it exceeds CRL_MAX_NUM_SZ(octets)
41616-
* and CRL_MAX_NUM_HEX_STR_SZ(hex string)
41617-
*/
41618-
if (((needed = mp_unsigned_bin_size(m)) > CRL_MAX_NUM_SZ) ||
41619-
((needed * 2 + 1) > CRL_MAX_NUM_HEX_STR_SZ)) {
41620-
WOLFSSL_MSG("CRL number exceeds limitation.");
41621-
ret = BUFFER_E;
41622-
}
41614+
4162341615
if (ret == MP_OKAY && mp_toradix(m, (char*)dcrl->crlNumber,
4162441616
MP_RADIX_HEX) != MP_OKAY)
4162541617
ret = BUFFER_E;
@@ -41632,6 +41624,9 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf,
4163241624

4163341625
if (ret != MP_OKAY)
4163441626
return ret;
41627+
} else {
41628+
WOLFSSL_MSG("CRL number exceeds limitation");
41629+
ret = BUFFER_E;
4163541630
}
4163641631
}
4163741632
}
@@ -41657,7 +41652,6 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf, word32 idx,
4165741652
word32 maxIdx)
4165841653
{
4165941654
DECL_ASNGETDATA(dataASN, certExtASN_Length);
41660-
int needed;
4166141655
int ret = 0;
4166241656
/* Track if we've seen these extensions already */
4166341657
word32 seenAuthKey = 0;
@@ -41735,16 +41729,16 @@ static int ParseCRL_Extensions(DecodedCRL* dcrl, const byte* buf, word32 idx,
4173541729
}
4173641730

4173741731
if (ret == 0) {
41738-
ret = GetInt(m, buf, &localIdx, maxIdx);
41739-
}
41740-
/* Check CRL number size
41741-
* if it exceeds CRL_MAX_NUM_SZ(octets)
41742-
* and CRL_MAX_NUM_HEX_STR_SZ(hex string)
41743-
*/
41744-
if (((needed = mp_unsigned_bin_size(m)) > CRL_MAX_NUM_SZ) ||
41745-
((needed * 2 + 1) > CRL_MAX_NUM_HEX_STR_SZ)) {
41746-
WOLFSSL_MSG("CRL number exceeds limitation.");
41747-
ret = BUFFER_E;
41732+
int crlNumLen = 0;
41733+
word32 tmpIdx = localIdx;
41734+
ret = GetASNInt(buf, &tmpIdx, &crlNumLen, maxIdx);
41735+
if (ret == 0 && (crlNumLen > CRL_MAX_NUM_SZ)) {
41736+
WOLFSSL_MSG("CRL number exceeds limitation");
41737+
ret = BUFFER_E;
41738+
}
41739+
if (ret == 0) {
41740+
ret = GetInt(m, buf, &localIdx, maxIdx);
41741+
}
4174841742
}
4174941743
if (ret == 0 && mp_toradix(m, (char*)dcrl->crlNumber,
4175041744
MP_RADIX_HEX) != MP_OKAY)

0 commit comments

Comments
 (0)