src/pqc_lint/patterns/c_cpp.py
1.1 KB · 33 lines · python Raw
1 """C / C++ crypto patterns (mostly OpenSSL)."""
2
3 from __future__ import annotations
4
5 from pqc_lint.patterns.base import PatternMatcher, compile_patterns
6
7
8 class CCppMatcher(PatternMatcher):
9 language = "c"
10 file_extensions = (".c", ".cc", ".cpp", ".cxx", ".h", ".hpp")
11 patterns = compile_patterns([
12 # OpenSSL legacy API
13 ("PQC001", r"\bRSA_generate_key\s*\("),
14 ("PQC001", r"\bRSA_sign\s*\("),
15 ("PQC201", r"\bRSA_public_encrypt\s*\("),
16 ("PQC202", r"\bRSA_private_decrypt\s*\("),
17 ("PQC002", r"\bEC_KEY_generate_key\s*\("),
18 ("PQC002", r"\bECDSA_sign\s*\("),
19 ("PQC101", r"\bECDH_compute_key\s*\("),
20 ("PQC102", r"\bDH_generate_key\s*\("),
21 ("PQC102", r"\bDH_compute_key\s*\("),
22 # OpenSSL EVP API
23 ("PQC001", r"""EVP_PKEY_RSA\b"""),
24 ("PQC002", r"""EVP_PKEY_EC\b"""),
25 ("PQC004", r"""EVP_PKEY_DSA\b"""),
26 ("PQC102", r"""EVP_PKEY_DH\b"""),
27 # hashes
28 ("PQC301", r"\bMD5_Init\s*\("),
29 ("PQC301", r"\bEVP_md5\s*\("),
30 ("PQC302", r"\bSHA1_Init\s*\("),
31 ("PQC302", r"\bEVP_sha1\s*\("),
32 ])
33