Skip to content

Commit 582c6ea

Browse files
cursoragentscript3r
andcommitted
Refactor: Expand crypto library API patterns
This commit expands the API patterns for various cryptographic libraries to improve detection accuracy. Co-authored-by: script3r <[email protected]>
1 parent fc74305 commit 582c6ea

File tree

1 file changed

+156
-12
lines changed

1 file changed

+156
-12
lines changed

patterns.toml

Lines changed: 156 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ name = "OpenSSL"
77
languages = ["C", "C++"]
88
[library.patterns]
99
include = ["^\\s*#\\s*include\\s*<openssl/[^>]+>"]
10-
apis = ["\\bEVP_\\w+\\(", "\\bRSA_\\w+\\(", "\\bSSL_\\w+\\("]
10+
apis = [
11+
"\\bEVP_EncryptInit_ex\\(",
12+
"\\bEVP_DecryptInit_ex\\(",
13+
"\\bHMAC_Init_ex\\(",
14+
"\\bEVP_DigestSignInit\\(",
15+
"\\bEVP_DigestVerifyInit\\(",
16+
]
1117

1218
[[library]]
1319
name = "LibreSSL"
@@ -28,47 +34,101 @@ name = "libsodium"
2834
languages = ["C", "C++"]
2935
[library.patterns]
3036
include = ["^\\s*#\\s*include\\s*<sodium(?:/[^>]+)?>"]
31-
apis = ["\\bcrypto_[a-z0-9_]+\\("]
37+
apis = [
38+
"\\bcrypto_secretbox_easy\\(",
39+
"\\bcrypto_secretbox_open_easy\\(",
40+
"\\bcrypto_aead_chacha20poly1305_ietf_encrypt\\(",
41+
"\\bcrypto_aead_chacha20poly1305_ietf_decrypt\\(",
42+
"\\bcrypto_auth\\(",
43+
"\\bcrypto_auth_verify\\(",
44+
"\\bcrypto_sign_detached\\(",
45+
"\\bcrypto_sign_verify_detached\\(",
46+
]
3247

3348
[[library]]
3449
name = "GnuTLS"
3550
languages = ["C", "C++"]
3651
[library.patterns]
3752
include = ["^\\s*#\\s*include\\s*<gnutls/gnutls\\.h>"]
38-
apis = ["\\bgnutls_\\w+\\("]
53+
apis = [
54+
"\\bgnutls_cipher_encrypt2\\(",
55+
"\\bgnutls_cipher_decrypt2\\(",
56+
"\\bgnutls_hmac_init\\(",
57+
"\\bgnutls_hmac\\(",
58+
"\\bgnutls_privkey_sign_data\\(",
59+
"\\bgnutls_pubkey_verify_data2\\(",
60+
]
3961

4062
[[library]]
4163
name = "libgcrypt"
4264
languages = ["C", "C++"]
4365
[library.patterns]
4466
include = ["^\\s*#\\s*include\\s*<gcrypt\\.h>"]
45-
apis = ["\\bgcry_\\w+\\("]
67+
apis = [
68+
"\\bgcry_cipher_encrypt\\(",
69+
"\\bgcry_cipher_decrypt\\(",
70+
"\\bgcry_md_setkey\\(",
71+
"\\bgcry_pk_sign\\(",
72+
"\\bgcry_pk_verify\\(",
73+
]
4674

4775
[[library]]
4876
name = "Crypto++"
4977
languages = ["C", "C++"]
5078
[library.patterns]
5179
include = ["^\\s*#\\s*include\\s*<cryptopp/[^>]+>"]
5280
namespace = ["CryptoPP::"]
81+
apis = [
82+
"CryptoPP::CBC_Mode<.*>::Encryption",
83+
"CryptoPP::CBC_Mode<.*>::Decryption",
84+
"CryptoPP::HMAC<",
85+
"CryptoPP::RSASS<.*>::Signer",
86+
"CryptoPP::RSASS<.*>::Verifier",
87+
"CryptoPP::ECDSA<.*>::Signer",
88+
"CryptoPP::ECDSA<.*>::Verifier",
89+
]
5390

5491
[[library]]
5592
name = "Botan"
5693
languages = ["C", "C++"]
5794
[library.patterns]
5895
include = ["^\\s*#\\s*include\\s*<botan/[^>]+>"]
5996
namespace = ["Botan::"]
97+
apis = [
98+
"Botan::Cipher_Mode::create",
99+
"Botan::AEAD_Mode::create",
100+
"Botan::MessageAuthenticationCode::create",
101+
"Botan::PK_Signer",
102+
"Botan::PK_Verifier",
103+
]
60104

61105
[[library]]
62106
name = "wolfSSL"
63107
languages = ["C", "C++"]
64108
[library.patterns]
65109
include = ["^\\s*#\\s*include\\s*<wolfssl/[^>]+>"]
110+
apis = [
111+
"\\bwc_AesGcmEncrypt\\(",
112+
"\\bwc_AesGcmDecrypt\\(",
113+
"\\bwc_HmacSetKey\\(",
114+
"\\bwc_HmacUpdate\\(",
115+
"\\bwc_HmacFinal\\(",
116+
"\\bwc_SignatureGenerate\\(",
117+
"\\bwc_SignatureVerify\\(",
118+
]
66119

67120
[[library]]
68121
name = "mbedTLS"
69122
languages = ["C", "C++"]
70123
[library.patterns]
71124
include = ["^\\s*#\\s*include\\s*<mbedtls/[^>]+>"]
125+
apis = [
126+
"\\bmbedtls_gcm_crypt_and_tag\\(",
127+
"\\bmbedtls_gcm_auth_decrypt\\(",
128+
"\\bmbedtls_md_hmac\\(",
129+
"\\bmbedtls_pk_sign\\(",
130+
"\\bmbedtls_pk_verify\\(",
131+
]
72132

73133
[[library]]
74134
name = "BouncyCastle"
@@ -78,20 +138,38 @@ import = [
78138
"^\\s*import\\s+org\\.bouncycastle\\.",
79139
"^\\s*import\\s+org\\.bouncycastle\\.jce\\.provider\\.BouncyCastleProvider",
80140
]
81-
apis = ["Cipher\\.getInstance\\(.*,\"BC\"\\)", "new\\s+BouncyCastleProvider\\("]
141+
apis = [
142+
"Cipher\\.getInstance\\(.*,?\"BC\"?\\)",
143+
"Mac\\.getInstance\\(",
144+
"Signature\\.getInstance\\(",
145+
"\\.sign\\(",
146+
"\\.verify\\(",
147+
]
82148

83149
[[library]]
84150
name = "Google Tink"
85151
languages = ["Java"]
86152
[library.patterns]
87153
import = ["^\\s*import\\s+com\\.google\\.crypto\\.tink\\."]
88-
apis = ["TinkConfig\\.register\\("]
154+
apis = [
155+
"TinkConfig\\.register\\(",
156+
"\\.encrypt\\(",
157+
"\\.decrypt\\(",
158+
"computeMac\\(",
159+
"verifyMac\\(",
160+
"\\bsign\\(",
161+
"\\bverify\\(",
162+
]
89163

90164
[[library]]
91165
name = "Conscrypt"
92166
languages = ["Java"]
93167
[library.patterns]
94168
import = ["^\\s*import\\s+org\\.conscrypt\\."]
169+
apis = [
170+
"Cipher\\.getInstance\\(",
171+
"Signature\\.getInstance\\(",
172+
]
95173

96174
[[library]]
97175
name = "Go x/crypto"
@@ -124,6 +202,17 @@ apis = [
124202
"rustls::ClientConfig",
125203
"sodiumoxide::crypto::",
126204
"aes_gcm::Aes256Gcm",
205+
"\\bAes256Gcm::new\\(",
206+
"\\baead::Aead\\b",
207+
"\\bencrypt\\(",
208+
"\\bdecrypt\\(",
209+
"\\bhmac::Hmac\\b",
210+
"\\bMac::verify_slice\\(",
211+
"ring::aead::seal_in_place",
212+
"ring::aead::open_in_place",
213+
"ring::hmac::sign",
214+
"ring::signature::.*::sign",
215+
"ring::signature::.*::verify",
127216
]
128217

129218
[[library]]
@@ -134,7 +223,16 @@ import = [
134223
"^\\s*from\\s+cryptography\\b",
135224
"^\\s*import\\s+cryptography\\b",
136225
]
137-
apis = ["Fernet\\(", "AESGCM\\("]
226+
apis = [
227+
"Fernet\\(",
228+
"\\.encrypt\\(",
229+
"\\.decrypt\\(",
230+
"AESGCM\\(",
231+
"hmac\\.HMAC\\(",
232+
"\\.finalize\\(",
233+
"\\.verify\\(",
234+
"\\.sign\\(",
235+
]
138236

139237
[[library]]
140238
name = "PyCryptodome"
@@ -144,27 +242,49 @@ import = [
144242
"^\\s*from\\s+Crypto\\b",
145243
"^\\s*import\\s+Crypto\\b",
146244
]
147-
apis = ["Crypto\\.Cipher\\.AES"]
245+
apis = [
246+
"Crypto\\.Cipher\\.AES\\.new\\(",
247+
"\\.encrypt\\(",
248+
"\\.decrypt\\(",
249+
"Crypto\\.Hash\\.HMAC\\.new\\(",
250+
"Crypto\\.Signature\\.pkcs1_15\\.new\\(.*\\)\\.sign\\(",
251+
"Crypto\\.Signature\\.pkcs1_15\\.new\\(.*\\)\\.verify\\(",
252+
]
148253

149254
[[library]]
150255
name = "PyNaCl"
151256
languages = ["Python"]
152257
[library.patterns]
153258
import = ["^\\s*from\\s+nacl\\b", "^\\s*import\\s+nacl\\b"]
154-
apis = ["nacl\\.secret"]
259+
apis = [
260+
"nacl\\.secret\\.SecretBox",
261+
"\\.encrypt\\(",
262+
"\\.decrypt\\(",
263+
"SigningKey\\.sign\\(",
264+
"VerifyKey\\.verify\\(",
265+
]
155266

156267
[[library]]
157268
name = "pyOpenSSL"
158269
languages = ["Python"]
159270
[library.patterns]
160271
import = ["^\\s*import\\s+OpenSSL\\b"]
161-
apis = ["OpenSSL\\.crypto"]
272+
apis = [
273+
"OpenSSL\\.crypto\\.sign\\(",
274+
"OpenSSL\\.crypto\\.verify\\(",
275+
]
162276

163277
[[library]]
164278
name = "M2Crypto"
165279
languages = ["Python"]
166280
[library.patterns]
167281
import = ["^\\s*import\\s+M2Crypto\\b"]
282+
apis = [
283+
"EVP\\.Cipher\\(",
284+
"EVP\\.HMAC\\(",
285+
"RSA\\.sign\\(",
286+
"RSA\\.verify\\(",
287+
]
168288

169289
[[library]]
170290
name = "phpseclib"
@@ -174,22 +294,46 @@ import = [
174294
"^\\s*use\\s+phpseclib",
175295
"^\\s*use\\s+phpseclib\\\\Crypt\\\\",
176296
]
297+
apis = [
298+
"->encrypt\\(",
299+
"->decrypt\\(",
300+
"->sign\\(",
301+
"->verify\\(",
302+
]
177303

178304
[[library]]
179305
name = "Defuse PHP Crypto"
180306
languages = ["PHP"]
181307
[library.patterns]
182308
import = ["^\\s*use\\s+Defuse\\\\Crypto\\\\"]
309+
apis = [
310+
"Defuse\\\\Crypto\\\\Crypto::encrypt\\(",
311+
"Defuse\\\\Crypto\\\\Crypto::decrypt\\(",
312+
]
183313

184314
[[library]]
185315
name = "PHP sodium"
186316
languages = ["PHP"]
187317
[library.patterns]
188-
apis = ["\\bsodium_[a-z0-9_]+\\("]
318+
apis = [
319+
"\\bsodium_crypto_secretbox\\(",
320+
"\\bsodium_crypto_secretbox_open\\(",
321+
"\\bsodium_crypto_aead_.*_encrypt\\(",
322+
"\\bsodium_crypto_aead_.*_decrypt\\(",
323+
"\\bsodium_crypto_auth\\(",
324+
"\\bsodium_crypto_auth_verify\\(",
325+
"\\bsodium_crypto_sign_detached\\(",
326+
"\\bsodium_crypto_sign_verify_detached\\(",
327+
]
189328

190329
[[library]]
191330
name = "PHP OpenSSL"
192331
languages = ["PHP"]
193332
[library.patterns]
194-
apis = ["\\bopenssl_(encrypt|decrypt|sign|verify)\\("]
333+
apis = [
334+
"\\bopenssl_encrypt\\(",
335+
"\\bopenssl_decrypt\\(",
336+
"\\bopenssl_sign\\(",
337+
"\\bopenssl_verify\\(",
338+
]
195339

0 commit comments

Comments
 (0)