1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "asn1_mutators.h"
8 const std::vector
<const SEC_ASN1Template
*> templates
= {
9 CERT_AttributeTemplate
,
10 CERT_CertExtensionTemplate
,
11 CERT_CertificateRequestTemplate
,
12 CERT_CertificateTemplate
,
14 CERT_IssuerAndSNTemplate
,
16 CERT_PublicKeyAndChallengeTemplate
,
18 CERT_SequenceOfCertExtensionTemplate
,
19 CERT_SetOfAttributeTemplate
,
20 CERT_SetOfSignedCrlTemplate
,
21 CERT_SignedCrlTemplate
,
22 CERT_SignedDataTemplate
,
23 CERT_SubjectPublicKeyInfoTemplate
,
24 CERT_TimeChoiceTemplate
,
25 CERT_ValidityTemplate
,
27 SEC_BitStringTemplate
,
28 SEC_BMPStringTemplate
,
30 SEC_CertSequenceTemplate
,
31 SEC_EnumeratedTemplate
,
32 SEC_GeneralizedTimeTemplate
,
33 SEC_IA5StringTemplate
,
37 SEC_OctetStringTemplate
,
38 SEC_PointerToAnyTemplate
,
39 SEC_PointerToEnumeratedTemplate
,
40 SEC_PointerToGeneralizedTimeTemplate
,
41 SEC_PointerToOctetStringTemplate
,
42 SEC_PrintableStringTemplate
,
44 SEC_SetOfEnumeratedTemplate
,
45 SEC_SequenceOfAnyTemplate
,
46 SEC_SequenceOfObjectIDTemplate
,
47 SEC_SignedCertificateTemplate
,
49 SEC_T61StringTemplate
,
50 SEC_UniversalStringTemplate
,
52 SEC_UTF8StringTemplate
,
53 SEC_VisibleStringTemplate
,
54 SECKEY_DHParamKeyTemplate
,
55 SECKEY_DHPublicKeyTemplate
,
56 SECKEY_DSAPrivateKeyExportTemplate
,
57 SECKEY_DSAPublicKeyTemplate
,
58 SECKEY_PQGParamsTemplate
,
59 SECKEY_PrivateKeyInfoTemplate
,
60 SECKEY_RSAPSSParamsTemplate
,
61 SECKEY_RSAPublicKeyTemplate
,
62 SECOID_AlgorithmIDTemplate
};
64 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data
, size_t Size
) {
67 for (auto tpl
: templates
) {
68 PORTCheapArenaPool pool
;
69 SECItem buf
= {siBuffer
, const_cast<unsigned char *>(Data
),
70 static_cast<unsigned int>(Size
)};
72 PORT_InitCheapArena(&pool
, DER_DEFAULT_CHUNKSIZE
);
73 (void)SEC_QuickDERDecodeItem(&pool
.arena
, dest
, tpl
, &buf
);
74 PORT_DestroyCheapArena(&pool
);
80 extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *data
, size_t size
,
81 size_t max_size
, unsigned int seed
) {
83 Mutators({ASN1MutatorFlipConstructed
, ASN1MutatorChangeType
}), data
, size
,