diff --git a/.azure/CredScanSuppressions.json b/.azure/CredScanSuppressions.json
new file mode 100644
index 0000000000..5111bcc542
--- /dev/null
+++ b/.azure/CredScanSuppressions.json
@@ -0,0 +1,873 @@
+
+{
+ "tool": "Credential Scanner",
+ "suppressions": [
+ {
+ "file": [
+ "submodules/openssl/test/testrsa_withattrs.pem",
+ "submodules/openssl/.github/workflows/ci.yml",
+ "submodules/openssl/.github/workflows/run-checker-daily.yml",
+ "submodules/openssl/appveyor.yml",
+ "submodules/googletest/docs/advanced.md",
+ "submodules/googletest/docs/gmock_faq.md",
+ "submodules/googletest/docs/gmock_faq.md",
+ "submodules/openssl/apps/apps.h",
+ "submodules/openssl/apps/ca-key.pem",
+ "submodules/openssl/apps/client.pem",
+ "submodules/openssl/apps/dsa-ca.pem",
+ "submodules/openssl/apps/dsa-pca.pem",
+ "submodules/openssl/apps/pca-key.pem",
+ "submodules/openssl/apps/privkey.pem",
+ "submodules/openssl/apps/rsa8192.pem",
+ "submodules/openssl/apps/s1024key.pem",
+ "submodules/openssl/apps/s512-key.pem",
+ "submodules/openssl/apps/server.pem",
+ "submodules/openssl/apps/server2.pem",
+ "submodules/openssl/crypto/mem_dbg.c",
+ "submodules/openssl/crypto/ppccap.c",
+ "submodules/openssl/engines/e_ossltest.c",
+ "submodules/openssl/engines/e_capi.c",
+ "submodules/openssl/fuzz/oids.txt",
+ "submodules/openssl/fuzz/oids.txt",
+ "submodules/openssl/ssl/s3_lib.c",
+ "submodules/openssl/ssl/s3_lib.c",
+ "submodules/openssl/ssl/ssl_ciph.c",
+ "submodules/openssl/ssl/ssl_ciph.c",
+ "submodules/openssl/ssl/ssl_conf.c",
+ "submodules/openssl/ssl/ssl_local.h",
+ "submodules/openssl/test/shibboleth.pfx",
+ "submodules/openssl/test/testdsa.pem",
+ "submodules/openssl/test/testec-p256.pem",
+ "submodules/openssl/test/tested25519.pem",
+ "submodules/openssl/test/tested448.pem",
+ "submodules/openssl/test/testrsa.pem",
+ "submodules/googletest/googletest/src/gtest-death-test.cc",
+ "submodules/openssl/.github/workflows/ci.yml",
+ "submodules/openssl/crypto/asn1/f_int.c",
+ "submodules/openssl/crypto/asn1/f_string.c",
+ "submodules/openssl/crypto/bio/bss_dgram.c",
+ "submodules/openssl/crypto/bio/bss_dgram.c",
+ "submodules/openssl/crypto/bio/b_sock2.c",
+ "submodules/openssl/crypto/chacha/chacha_enc.c",
+ "submodules/openssl/crypto/chacha/chacha_enc.c",
+ "submodules/openssl/crypto/chacha/chacha_enc.c",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/err/openssl.txt",
+ "submodules/openssl/crypto/evp/e_chacha20_poly1305.c",
+ "submodules/openssl/crypto/objects/objects.txt",
+ "submodules/openssl/crypto/objects/objects.txt",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/drbg_lib.c",
+ "submodules/openssl/crypto/rand/rand_local.h",
+ "submodules/openssl/crypto/rand/rand_local.h",
+ "submodules/openssl/crypto/rc2/rc2_skey.c",
+ "submodules/openssl/demos/bio/server-ec.pem",
+ "submodules/openssl/demos/bio/server.pem",
+ "submodules/openssl/demos/cms/cakey.pem",
+ "submodules/openssl/demos/cms/signer.pem",
+ "submodules/openssl/demos/cms/signer2.pem",
+ "submodules/openssl/demos/smime/cakey.pem",
+ "submodules/openssl/demos/smime/signer.pem",
+ "submodules/openssl/demos/smime/signer2.pem",
+ "submodules/openssl/include/openssl/bio.h",
+ "submodules/openssl/include/openssl/rand_drbg.h",
+ "submodules/openssl/include/openssl/rand_drbg.h",
+ "submodules/openssl/ssl/record/rec_layer_s3.c",
+ "submodules/openssl/ssl/statem/statem_clnt.c",
+ "submodules/openssl/ssl/statem/statem_lib.c",
+ "submodules/openssl/ssl/statem/statem_lib.c",
+ "submodules/openssl/ssl/statem/statem_lib.c",
+ "submodules/openssl/test/certs/alt1-key.pem",
+ "submodules/openssl/test/certs/alt2-key.pem",
+ "submodules/openssl/test/certs/alt3-key.pem",
+ "submodules/openssl/test/certs/bad-pc3-key.pem",
+ "submodules/openssl/test/certs/bad-pc4-key.pem",
+ "submodules/openssl/test/certs/bad-pc6-key.pem",
+ "submodules/openssl/test/certs/bad.key",
+ "submodules/openssl/test/certs/badalt1-key.pem",
+ "submodules/openssl/test/certs/badalt10-key.pem",
+ "submodules/openssl/test/certs/badalt2-key.pem",
+ "submodules/openssl/test/certs/badalt3-key.pem",
+ "submodules/openssl/test/certs/badalt4-key.pem",
+ "submodules/openssl/test/certs/badalt5-key.pem",
+ "submodules/openssl/test/certs/badalt6-key.pem",
+ "submodules/openssl/test/certs/badalt7-key.pem",
+ "submodules/openssl/test/certs/badalt8-key.pem",
+ "submodules/openssl/test/certs/badalt9-key.pem",
+ "submodules/openssl/test/certs/badcn1-key.pem",
+ "submodules/openssl/test/certs/ca-key-768.pem",
+ "submodules/openssl/test/certs/ca-key-ec-named.pem",
+ "submodules/openssl/test/certs/ca-key.pem",
+ "submodules/openssl/test/certs/ca-key2.pem",
+ "submodules/openssl/test/certs/ca-pss-key.pem",
+ "submodules/openssl/test/certs/client-ed25519-key.pem",
+ "submodules/openssl/test/certs/client-ed448-key.pem",
+ "submodules/openssl/test/certs/ee-ecdsa-key.pem",
+ "submodules/openssl/test/certs/ee-key-768.pem",
+ "submodules/openssl/test/certs/ee-key-ec-named-explicit.pem",
+ "submodules/openssl/test/certs/ee-key-ec-named-named.pem",
+ "submodules/openssl/test/certs/ee-key.pem",
+ "submodules/openssl/test/certs/embeddedSCTs1-key.pem",
+ "submodules/openssl/test/certs/goodcn1-key.pem",
+ "submodules/openssl/test/certs/interCA.key",
+ "submodules/openssl/test/certs/leaf.key",
+ "submodules/openssl/test/certs/ncca-key.pem",
+ "submodules/openssl/test/certs/ncca1-key.pem",
+ "submodules/openssl/test/certs/ncca2-key.pem",
+ "submodules/openssl/test/certs/ncca3-key.pem",
+ "submodules/openssl/test/certs/p256-server-key.pem",
+ "submodules/openssl/test/certs/p384-root-key.pem",
+ "submodules/openssl/test/certs/p384-server-key.pem",
+ "submodules/openssl/test/certs/pc1-key.pem",
+ "submodules/openssl/test/certs/pc2-key.pem",
+ "submodules/openssl/test/certs/pc5-key.pem",
+ "submodules/openssl/test/certs/root-ed448-key.pem",
+ "submodules/openssl/test/certs/root-key-768.pem",
+ "submodules/openssl/test/certs/root-key.pem",
+ "submodules/openssl/test/certs/root-key2.pem",
+ "submodules/openssl/test/certs/rootCA.key",
+ "submodules/openssl/test/certs/rootkey.pem",
+ "submodules/openssl/test/certs/server-cecdsa-key.pem",
+ "submodules/openssl/test/certs/server-dsa-key.pem",
+ "submodules/openssl/test/certs/server-ecdsa-brainpoolP256r1-key.pem",
+ "submodules/openssl/test/certs/server-ecdsa-key.pem",
+ "submodules/openssl/test/certs/server-ed25519-key.pem",
+ "submodules/openssl/test/certs/server-ed448-key.pem",
+ "submodules/openssl/test/certs/server-pss-key.pem",
+ "submodules/openssl/test/certs/server-pss-restrict-key.pem",
+ "submodules/openssl/test/certs/serverkey.pem",
+ "submodules/openssl/test/certs/subinterCA.key",
+ "submodules/openssl/test/certs/wrongkey.pem",
+ "submodules/openssl/test/certs/x509-check-key.pem",
+ "submodules/openssl/test/smime-certs/smdh.pem",
+ "submodules/openssl/test/smime-certs/smdsa1.pem",
+ "submodules/openssl/test/smime-certs/smdsa2.pem",
+ "submodules/openssl/test/smime-certs/smdsa3.pem",
+ "submodules/openssl/test/smime-certs/smec1.pem",
+ "submodules/openssl/test/smime-certs/smec2.pem",
+ "submodules/openssl/test/smime-certs/smec3.pem",
+ "submodules/openssl/test/smime-certs/smroot.pem",
+ "submodules/openssl/test/smime-certs/smrsa1.pem",
+ "submodules/openssl/test/smime-certs/smrsa2.pem",
+ "submodules/openssl/test/smime-certs/smrsa3.pem",
+ "submodules/openssl/test/ssl-tests/23-srp.conf",
+ "submodules/googletest/googlemock/include/gmock/gmock-actions.h",
+ "submodules/openssl/demos/certs/apps/ckey.pem",
+ "submodules/openssl/demos/certs/apps/intkey.pem",
+ "submodules/openssl/demos/certs/apps/rootkey.pem",
+ "submodules/openssl/demos/certs/apps/skey.pem",
+ "submodules/openssl/demos/certs/apps/skey2.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/beermug.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-1023line.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-1024line.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-1025line.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-255line.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-256line.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-257line.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-blankline.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-comment.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-corruptiv.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-earlypad.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-extrapad.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-junk.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-longline.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-misalignedpad.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-onecolumn.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-oneline.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-onelineheader.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-shortandlongline.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-shortline.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-threecolumn.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/dsa.pem",
+ "submodules/openssl/test/recipes/04-test_pem_data/key.pem",
+ "submodules/openssl/test/recipes/30-test_evp_data/evpkdf.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evpkdf.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evpkdf.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evpkdf.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppbe.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppbe.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppbe.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppbe.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/30-test_evp_data/evppkey_ecc.txt",
+ "submodules/openssl/test/recipes/80-test_ocsp_data/key.pem",
+ "submodules/openssl/test/recipes/90-test_gost_data/server-key2001.pem",
+ "submodules/openssl/test/recipes/90-test_gost_data/server-key2012.pem",
+ "submodules/openssl/Configurations/00-base-templates.conf",
+ "submodules/openssl/Configurations/00-base-templates.conf",
+ "submodules/openssl/Configurations/00-base-templates.conf",
+ "submodules/openssl/Configurations/00-base-templates.conf",
+ "submodules/openssl/Configurations/00-base-templates.conf",
+ "submodules/openssl/Configurations/00-base-templates.conf",
+ "submodules/openssl/Configurations/10-main.conf",
+ "submodules/openssl/test/certs/cross-key.pem",
+ "submodules/openssl/test/certs/embeddedSCTs1_issuer-key.pem",
+ "submodules/openssl/external/perl/Text-Template-1.46/lib/Text/Template.pm"
+ ],
+ "_justification": "external modules"
+ },
+ {
+ "file": [
+ "src/core/cubic.c",
+ "src/core/cubic.c",
+ "src/core/cubic.c",
+ "src/core/cubic.c",
+ "docs/TSG.md",
+ "docs/TSG.md",
+ "docs/TSG.md",
+ "src/core/congestion_control.c",
+ "src/core/congestion_control.c",
+ "src/platform/crypt_bcrypt.c",
+ "src/platform/tls_schannel.c",
+ "src/platform/tls_schannel.c",
+ "src/platform/tls_schannel.c",
+ "src/platform/tls_schannel.c",
+ "src/generated/linux/crypt_bcrypt.c.clog.h",
+ "src/generated/linux/tls_schannel.c.clog.h",
+ "src/generated/linux/tls_schannel.c.clog.h"
+ ],
+ "_justification": "false positives"
+ }
+ ]
+}
diff --git a/.azure/OneBranch.Docker.Official.yml b/.azure/OneBranch.Docker.Official.yml
index 30ffc2eaa1..002dc7b906 100644
--- a/.azure/OneBranch.Docker.Official.yml
+++ b/.azure/OneBranch.Docker.Official.yml
@@ -106,7 +106,7 @@ extends:
displayName: '🔒 Download artifacts'
inputs:
targetPath: $(Build.SourcesDirectory)\dst\.azure\dockers\ob\windows
- artifact: drop_main_download_external_libs
+ artifact: drop_docker_download_external_libs
- task: onebranch.pipeline.imagebuildinfo@1
inputs:
repositoryName: msquicbuild
diff --git a/.azure/OneBranch.Official.yml b/.azure/OneBranch.Official.yml
index 35c95c5905..0cd2ceedfd 100644
--- a/.azure/OneBranch.Official.yml
+++ b/.azure/OneBranch.Official.yml
@@ -24,6 +24,10 @@ parameters: # parameters are shown up in ADO UI in a build queue time
displayName: 'Enable debug output'
type: boolean
default: false
+- name: 'WindowsContainerImage2DockerTag'
+ displayName: 'WindowsContainerImage2 DockerTag'
+ type: string
+ default: 'latest'
variables:
CDP_DEFINITION_BUILD_COUNT: $[counter('', 0)] # needed for onebranch.pipeline.version task https://aka.ms/obpipelines/versioning
@@ -36,9 +40,9 @@ variables:
NUGET_XMLDOC_MODE: none
ONEBRANCH_AME_ACR_LOGIN: onebranch.azurecr.io, cdpxb7b51c2f738e43e48f7605d9a8e5f6d700.azurecr.io
- WindowsContainerImage: 'cdpxwin1809.azurecr.io/global/vse2019:latest'
- WindowsContainerImage2: 'cdpxb7b51c2f738e43e48f7605d9a8e5f6d700.azurecr.io/b7b51c2f-738e-43e4-8f76-05d9a8e5f6d7/official/msquicbuild:20220812.8'
- LinuxContainerImage: 'cdpxb7b51c2f738e43e48f7605d9a8e5f6d700.azurecr.io/b7b51c2f-738e-43e4-8f76-05d9a8e5f6d7/official/msquicbuild:xcomp1'
+ WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2019/vse2019:latest'
+ WindowsContainerImage2: 'cdpxb7b51c2f738e43e48f7605d9a8e5f6d700.azurecr.io/b7b51c2f-738e-43e4-8f76-05d9a8e5f6d7/official/msquicbuild:${{ parameters.WindowsContainerImage2DockerTag }}'
+ LinuxContainerImage: 'cdpxb7b51c2f738e43e48f7605d9a8e5f6d700.azurecr.io/b7b51c2f-738e-43e4-8f76-05d9a8e5f6d7/official/msquicbuild:xcomp2'
LinuxContainerImage2: 'cdpxlinux.azurecr.io/global/ubuntu-1804:latest'
resources:
@@ -58,8 +62,8 @@ extends:
validate: false
tsa:
enabled: false # onebranch publish all sdl results to TSA. If TSA is disabled all SDL tools will forced into 'break' build mode.
- # credscan:
- # suppressionsFile: $(Build.SourcesDirectory)\.config\CredScanSuppressions.json
+ credscan:
+ suppressionsFile: $(Build.SourcesDirectory)\.azure\CredScanSuppressions.json
binskim:
break: true # always break the build on binskim issues in addition to TSA upload
policheck:
diff --git a/.azure/OneBranch.PullRequest.yml b/.azure/OneBranch.PullRequest.yml
index 5b7cf79e43..e0d4c7eff6 100644
--- a/.azure/OneBranch.PullRequest.yml
+++ b/.azure/OneBranch.PullRequest.yml
@@ -32,7 +32,7 @@ variables:
OUTPUTROOT: $(REPOROOT)\out
NUGET_XMLDOC_MODE: none
- WindowsContainerImage: 'cdpxwin1809.azurecr.io/global/vse2019:latest'
+ WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2019/vse2019:latest'
WindowsContainerImage2: 'cdpxwin1809.azurecr.io/user/corenet/msquic:latest' # Docker image which is used to build the project https://aka.ms/obpipelines/containers
LinuxContainerImage: 'cdpxlinux.azurecr.io/user/corenet/msquic:latest'
diff --git a/.azure/azure-pipelines.ci.yml b/.azure/azure-pipelines.ci.yml
index 4f35e6f65b..14acdc5da3 100644
--- a/.azure/azure-pipelines.ci.yml
+++ b/.azure/azure-pipelines.ci.yml
@@ -327,7 +327,7 @@ stages:
config: Debug
- template: ./templates/build-config-user.yml
parameters:
- image: ubuntu-latest
+ image: ubuntu-20.04
platform: linux
arch: x64
tls: openssl
@@ -405,7 +405,7 @@ stages:
extraName: 'codecheck'
- template: ./templates/build-config-user.yml
parameters:
- image: ubuntu-latest
+ image: ubuntu-20.04
platform: linux
arch: x64
tls: openssl
diff --git a/.azure/dockers/ob/windows/Dockerfile b/.azure/dockers/ob/windows/Dockerfile
index 5f7ee84444..27c001099e 100644
--- a/.azure/dockers/ob/windows/Dockerfile
+++ b/.azure/dockers/ob/windows/Dockerfile
@@ -1,5 +1,5 @@
# escape=`
-FROM cdpxwin1809.azurecr.io/global/vse2019:latest
+FROM onebranch.azurecr.io/windows/ltsc2019/vse2019:latest
# Default .NET FX images switch shell to PS. Switch it back.
SHELL ["cmd", "/S", "/C"]
@@ -7,9 +7,12 @@ SHELL ["cmd", "/S", "/C"]
COPY win-installer-helper.psm1 C:\
COPY install*.* C:\
COPY xgameplatform.lib C:\
+COPY vsconfig.2019 C:\
RUN dir C:\
+RUN C:\install.cmd C:\install-workloads.ps1
+
RUN C:\install.cmd C:\install-ewdk.ps1
RUN C:\install.cmd C:\install-tools.ps1
diff --git a/.azure/dockers/ob/windows/install-workloads.ps1 b/.azure/dockers/ob/windows/install-workloads.ps1
new file mode 100644
index 0000000000..2f94e476f4
--- /dev/null
+++ b/.azure/dockers/ob/windows/install-workloads.ps1
@@ -0,0 +1,34 @@
+
+if (Test-Path "$PSScriptRoot\win-installer-helper.psm1")
+{
+ Import-Module "$PSScriptRoot\win-installer-helper.psm1"
+}
+elseif (Test-Path "C:\win-installer-helper.psm1")
+{
+ Import-Module "C:\win-installer-helper.psm1"
+}
+
+$ProgressPreference = 'SilentlyContinue'
+
+Start-Setup
+
+try {
+
+ Write-Host "Installing additional visual studio workloads"
+
+ $vsInstallerPath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe"
+
+ $installerArgs = "modify --config `"C:\vsconfig.2019`" --installPath `"${env:VS2019}`" --quiet --norestart --nocache"
+ Install-FromEXE -Path $vsInstallerPath -Arguments $installerArgs
+
+ Write-Output "Installed additional visual studio workloads"
+
+} catch {
+ Write-Host "Error during workloads installation"
+ dir $Env:TEMP -Filter *.log | where Length -gt 0 | Get-Content
+ dir $Env:TEMP -Filter *.txt | where Length -gt 0 | Get-Content
+ $_.Exception | Format-List -Force
+ exit 1
+} finally {
+ Stop-Setup
+}
diff --git a/.azure/dockers/ob/windows/vsconfig.2019 b/.azure/dockers/ob/windows/vsconfig.2019
new file mode 100644
index 0000000000..ebc08e0f64
--- /dev/null
+++ b/.azure/dockers/ob/windows/vsconfig.2019
@@ -0,0 +1,8 @@
+{
+ "version": "1.0",
+ "components": [
+ "Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre",
+ "Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre",
+ "Microsoft.VisualStudio.Component.Windows10SDK.20348"
+ ]
+}
\ No newline at end of file
diff --git a/.azure/obtemplates/push-vpack.yml b/.azure/obtemplates/push-vpack.yml
index 94d9a37165..2b0b3f1045 100644
--- a/.azure/obtemplates/push-vpack.yml
+++ b/.azure/obtemplates/push-vpack.yml
@@ -29,7 +29,7 @@ jobs:
vpackToken: $(VPACK_PAT)
majorVer: 2
minorVer: 1
- patchVer: 6
+ patchVer: 7
prereleaseVer: $(Build.BuildId)
- publish: $(XES_VPACKMANIFESTDIRECTORY)
diff --git a/.azure/templates/test-distribution.yml b/.azure/templates/test-distribution.yml
index 945fc9a195..f6ecd4daf5 100644
--- a/.azure/templates/test-distribution.yml
+++ b/.azure/templates/test-distribution.yml
@@ -26,7 +26,7 @@ jobs:
sudo apt-add-repository ppa:lttng/stable-2.12
sudo apt-get update
sudo apt-get install -y lttng-tools
- sudo dpkg -i $(Build.SourcesDirectory)/distribution/libmsquic_2.1.6_amd64.deb
+ sudo dpkg -i $(Build.SourcesDirectory)/distribution/libmsquic_2.1.7_amd64.deb
- pwsh: |
chmod +x $(Build.SourcesDirectory)/artifacts/bin/linux/x64_Release_openssl/msquictest
$(Build.SourcesDirectory)/artifacts/bin/linux/x64_Release_openssl/msquictest --gtest_filter=ParameterValidation.ValidateApi
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1112c2fed0..397e35e9e5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,8 +22,9 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
message(STATUS "Source Dir: ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "Host System name: ${CMAKE_HOST_SYSTEM_NAME}")
if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
- set(CMAKE_SYSTEM_VERSION 10.0.18362.0 CACHE STRING INTERNAL FORCE)
- set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.18362.0 CACHE STRING INTERNAL FORCE)
+ if (NOT DEFINED CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION 10.0.18362 CACHE STRING INTERNAL FORCE)
+ endif()
endif()
if(POLICY CMP0091)
@@ -55,7 +56,7 @@ message(STATUS "Platform version: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
set(QUIC_MAJOR_VERSION 2)
-set(QUIC_FULL_VERSION 2.1.6)
+set(QUIC_FULL_VERSION 2.1.7)
if (WIN32)
set(CX_PLATFORM "windows")
@@ -106,6 +107,12 @@ option(QUIC_OFFICIAL_RELEASE "Configured the build for an official release" OFF)
set(QUIC_FOLDER_PREFIX "" CACHE STRING "Optional prefix for source group folders when using an IDE generator")
set(QUIC_LIBRARY_NAME "msquic" CACHE STRING "Override the output library name")
+if (QUIC_GAMECORE_BUILD)
+ if(${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} VERSION_LESS "10.0.20348.0")
+ message(FATAL_ERROR "gamecore builds require Windows 10 SDK version 20348 or later.")
+ endif()
+endif()
+
if (QUIC_UWP_BUILD OR QUIC_GAMECORE_BUILD)
message(STATUS "UWP And GameCore builds disable all executables, and force shared CRT")
set(QUIC_BUILD_TOOLS OFF)
@@ -641,14 +648,17 @@ if(QUIC_CODE_CHECK)
-altera-*
-android-cloexec-fopen
-android-cloexec-socket
+ -bugprone-assignment-in-if-condition
-bugprone-easily-swappable-parameters
-bugprone-implicit-widening-of-multiplication-result
-bugprone-macro-parentheses
-bugprone-narrowing-conversions
-bugprone-reserved-identifier
-bugprone-sizeof-expression
+ -modernize-macro-to-enum
-cert-dcl37-c
-cert-dcl51-cpp
+ -cert-err33-c
-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling
-clang-diagnostic-microsoft-anon-tag
-concurrency-mt-unsafe
@@ -662,7 +672,9 @@ if(QUIC_CODE_CHECK)
-llvmlibc-restrict-system-libc-headers
-misc-no-recursion # do you really need recursion?
-readability-avoid-const-params-in-decls
+ -readability-duplicate-include
-readability-function-cognitive-complexity
+ -readability-identifier-length
-readability-isolate-declaration
-readability-magic-numbers
-readability-non-const-parameter
diff --git a/Cargo.toml b/Cargo.toml
index 34165414af..5dad73d2c8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "msquic"
-version = "2.1.6-beta"
+version = "2.1.7-beta"
edition = "2018"
authors = ["Microsoft"]
description = "Microsoft implementation of the IETF QUIC protocol"
diff --git a/scripts/build.ps1 b/scripts/build.ps1
index 37c02cb0ab..71d9aba3e1 100644
--- a/scripts/build.ps1
+++ b/scripts/build.ps1
@@ -430,10 +430,10 @@ function CMake-Generate {
$Arguments += " -DQUIC_PGO=on"
}
if ($Platform -eq "uwp") {
- $Arguments += " -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10 -DQUIC_UWP_BUILD=on"
+ $Arguments += " -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -DQUIC_UWP_BUILD=on"
}
if ($Platform -eq "gamecore_console") {
- $Arguments += " -DQUIC_GAMECORE_BUILD=on"
+ $Arguments += " -DCMAKE_SYSTEM_VERSION=10.0 -DQUIC_GAMECORE_BUILD=on"
}
if ($ToolchainFile -ne "") {
$Arguments += " -DCMAKE_TOOLCHAIN_FILE=""$ToolchainFile"""
diff --git a/scripts/package-distribution.ps1 b/scripts/package-distribution.ps1
index 1241725e17..e9fbed42fb 100644
--- a/scripts/package-distribution.ps1
+++ b/scripts/package-distribution.ps1
@@ -19,7 +19,7 @@ $ArtifactsBinDir = Join-Path $BaseArtifactsDir "bin"
# All direct subfolders are OS's
$Platforms = Get-ChildItem -Path $ArtifactsBinDir
-$Version = "2.1.6"
+$Version = "2.1.7"
$WindowsBuilds = @()
$AllBuilds = @()
diff --git a/scripts/package-nuget.ps1 b/scripts/package-nuget.ps1
index 5f12853987..99042c82a1 100644
--- a/scripts/package-nuget.ps1
+++ b/scripts/package-nuget.ps1
@@ -155,7 +155,7 @@ $DistDir = Join-Path $BaseArtifactsDir "dist"
$CurrentCommitHash = Get-GitHash -RepoDir $RootDir
$RepoRemote = Get-GitRemote -RepoDir $RootDir
-$Version = "2.1.6"
+$Version = "2.1.7"
$BuildId = $env:BUILD_BUILDID
if ($null -ne $BuildId) {
diff --git a/scripts/write-versions.ps1 b/scripts/write-versions.ps1
index 2746d6e1eb..df3390faac 100644
--- a/scripts/write-versions.ps1
+++ b/scripts/write-versions.ps1
@@ -26,7 +26,7 @@ $ArtifactsDir = $BuildConfig.ArtifactsDir
$SourceVersion = $env:BUILD_SOURCEVERSION;
$SourceBranch = $env:BUILD_SOURCEBRANCH;
$BuildId = $env:BUILD_BUILDID;
-$VersionNumber = "2.1.6";
+$VersionNumber = "2.1.7";
class BuildData {
[string]$SourceVersion;
diff --git a/src/core/api.c b/src/core/api.c
index 675ecd5f7c..fcabc1419b 100644
--- a/src/core/api.c
+++ b/src/core/api.c
@@ -521,7 +521,7 @@ MsQuicConnectionSendResumptionTicket(
goto Error;
}
- if (Flags > (QUIC_SEND_RESUMPTION_FLAG_FINAL | QUIC_SEND_RESUMPTION_FLAG_NONE)) {
+ if (Flags > QUIC_SEND_RESUMPTION_FLAG_FINAL) {
Status = QUIC_STATUS_INVALID_PARAMETER;
goto Error;
}
diff --git a/src/core/crypto_tls.c b/src/core/crypto_tls.c
index 4ca4dd3cfb..7a5ea0148f 100644
--- a/src/core/crypto_tls.c
+++ b/src/core/crypto_tls.c
@@ -62,7 +62,7 @@ typedef enum eSniNameType {
//
#define QUIC_TP_ID_MAX_DATAGRAM_FRAME_SIZE 32 // varint
#define QUIC_TP_ID_DISABLE_1RTT_ENCRYPTION 0xBAAD // N/A
-#define QUIC_TP_ID_VERSION_NEGOTIATION_EXT 0xFF73DB // Blob
+#define QUIC_TP_ID_VERSION_NEGOTIATION_EXT 0x11 // Blob
#define QUIC_TP_ID_MIN_ACK_DELAY 0xFF03DE1AULL // varint
#define QUIC_TP_ID_CIBIR_ENCODING 0x1000 // {varint, varint}
diff --git a/src/core/frame.h b/src/core/frame.h
index e95feed908..5f34471422 100644
--- a/src/core/frame.h
+++ b/src/core/frame.h
@@ -94,7 +94,7 @@ extern "C" {
#define QUIC_ERROR_CRYPTO_USER_CANCELED QUIC_ERROR_CRYPTO_ERROR(90) // TLS error code for 'user_canceled'
#define QUIC_ERROR_CRYPTO_NO_APPLICATION_PROTOCOL QUIC_ERROR_CRYPTO_ERROR(120) // TLS error code for 'no_application_protocol'
-#define QUIC_ERROR_VERSION_NEGOTIATION_ERROR 0x53F8
+#define QUIC_ERROR_VERSION_NEGOTIATION_ERROR 0x11
//
// Used for determining which errors to count for performance counters.
diff --git a/src/core/packet.c b/src/core/packet.c
index c0b56228a7..2f139ead50 100644
--- a/src/core/packet.c
+++ b/src/core/packet.c
@@ -20,8 +20,8 @@
//
const QUIC_VERSION_INFO QuicSupportedVersionList[] = {
{ QUIC_VERSION_2,
- { 0xa7, 0x07, 0xc2, 0x03, 0xa5, 0x9b, 0x47, 0x18, 0x4a, 0x1d,
- 0x62, 0xca, 0x57, 0x04, 0x06, 0xea, 0x7a, 0xe3, 0xe5, 0xd3 },
+ { 0x0d, 0xed, 0xe3, 0xde, 0xf7, 0x00, 0xa6, 0xdb, 0x81, 0x93,
+ 0x81, 0xbe, 0x6e, 0x26, 0x9d, 0xcb, 0xf9, 0xbd, 0x2e, 0xd9 },
{ 0x34, 0x25, 0xc2, 0x0c, 0xf8, 0x87, 0x79, 0xdf, 0x2f, 0xf7, 0x1e, 0x8a, 0xbf, 0xa7, 0x82, 0x49,
0x89, 0x1e, 0x76, 0x3b, 0xbe, 0xd2, 0xf1, 0x3c, 0x04, 0x83, 0x43, 0xd3, 0x48, 0xc0, 0x60, 0xe2 },
{ "quicv2 key", "quicv2 iv", "quicv2 hp", "quicv2 ku" } },
diff --git a/src/distribution/Info.plist b/src/distribution/Info.plist
index 3d91ffee9e..2dc58084f2 100644
--- a/src/distribution/Info.plist
+++ b/src/distribution/Info.plist
@@ -19,7 +19,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleVersion
- 2.1.6
+ 2.1.7
NSHumanReadableCopyright
MIT
CFBundleGetInfoString
diff --git a/src/inc/msquic.ver b/src/inc/msquic.ver
index e93ecd75b3..3a519024ac 100644
--- a/src/inc/msquic.ver
+++ b/src/inc/msquic.ver
@@ -12,7 +12,7 @@
#endif
#ifndef VER_PATCH
-#define VER_PATCH 6
+#define VER_PATCH 7
#endif
#ifndef VER_BUILD_ID
diff --git a/src/inc/quic_hashtable.h b/src/inc/quic_hashtable.h
index c8aac05771..cbba9c06bf 100644
--- a/src/inc/quic_hashtable.h
+++ b/src/inc/quic_hashtable.h
@@ -132,10 +132,8 @@ typedef struct CXPLAT_HASHTABLE {
// Entries used in bucket computation.
uint32_t TableSize;
-#ifdef CXPLAT_HASHTABLE_RESIZE_SUPPORT
uint32_t Pivot;
uint32_t DivisorMask;
-#endif
// Counters
uint32_t NumEntries;
@@ -229,20 +227,6 @@ CxPlatHashtableEnumerateEnd(
_Inout_ CXPLAT_HASHTABLE_ENUMERATOR* Enumerator
);
-#ifdef CXPLAT_HASHTABLE_RESIZE_SUPPORT
-
-BOOLEAN
-CxPlatHashTableExpand(
- _Inout_ CXPLAT_HASHTABLE* HashTable
- );
-
-BOOLEAN
-CxPlatHashTableContract(
- _Inout_ CXPLAT_HASHTABLE* HashTable
- );
-
-#endif // CXPLAT_HASHTABLE_RESIZE_SUPPORT
-
//
// Simple helper hash function.
//
diff --git a/src/inc/quic_versions.h b/src/inc/quic_versions.h
index d2bda70eb7..2fb86e5504 100644
--- a/src/inc/quic_versions.h
+++ b/src/inc/quic_versions.h
@@ -15,7 +15,7 @@
// The QUIC version numbers, in network byte order.
//
#define QUIC_VERSION_VER_NEG 0x00000000U // Version for 'Version Negotiation'
-#define QUIC_VERSION_2 0xc4509a70U // Second official version
+#define QUIC_VERSION_2 0xcf43336bU // Second official version
#define QUIC_VERSION_1 0x01000000U // First official version
#define QUIC_VERSION_MS_1 0x0000cdabU // First Microsoft version (currently same as latest draft)
#define QUIC_VERSION_DRAFT_29 0x1d0000ffU // IETF draft 29
@@ -24,7 +24,7 @@
// The QUIC version numbers, in host byte order.
//
#define QUIC_VERSION_VER_NEG_H 0x00000000U // Version for 'Version Negotiation'
-#define QUIC_VERSION_2_H 0x709a50c4U // Second official version
+#define QUIC_VERSION_2_H 0x6b3343cfU // Second official version
#define QUIC_VERSION_1_H 0x00000001U // First official version
#define QUIC_VERSION_1_MS_H 0xabcd0000U // First Microsoft version (-1412628480 in decimal)
#define QUIC_VERSION_DRAFT_29_H 0xff00001dU // IETF draft 29
diff --git a/src/platform/datapath_kqueue.c b/src/platform/datapath_kqueue.c
index 786036bccc..facfbfa4d6 100644
--- a/src/platform/datapath_kqueue.c
+++ b/src/platform/datapath_kqueue.c
@@ -1171,14 +1171,14 @@ CxPlatSocketContextRecvComplete(
_In_ ssize_t BytesTransferred
)
{
- QUIC_STATUS Status = QUIC_STATUS_SUCCESS;
+ QUIC_STATUS Status = QUIC_STATUS_SUCCESS; // cppcheck-suppress unreadVariable
CXPLAT_DBG_ASSERT(SocketContext->CurrentRecvBlock != NULL);
CXPLAT_RECV_DATA* RecvPacket = &SocketContext->CurrentRecvBlock->RecvPacket;
SocketContext->CurrentRecvBlock = NULL;
- BOOLEAN FoundLocalAddr = FALSE;
- BOOLEAN FoundTOS = FALSE;
+ BOOLEAN FoundLocalAddr = FALSE; // cppcheck-suppress unreadVariable
+ BOOLEAN FoundTOS = FALSE; // cppcheck-suppress unreadVariable
QUIC_ADDR* LocalAddr = &RecvPacket->Route->LocalAddress;
if (LocalAddr->Ipv6.sin6_family == AF_INET6) {
LocalAddr->Ipv6.sin6_family = QUIC_ADDRESS_FAMILY_INET6;
@@ -1205,10 +1205,10 @@ CxPlatSocketContextRecvComplete(
CxPlatConvertFromMappedV6(LocalAddr, LocalAddr);
LocalAddr->Ipv6.sin6_scope_id = PktInfo6->ipi6_ifindex;
- FoundLocalAddr = TRUE;
+ FoundLocalAddr = TRUE; // cppcheck-suppress unreadVariable
} else if (CMsg->cmsg_type == IPV6_TCLASS) {
RecvPacket->TypeOfService = *(uint8_t *)CMSG_DATA(CMsg);
- FoundTOS = TRUE;
+ FoundTOS = TRUE; // cppcheck-suppress unreadVariable
}
} else if (CMsg->cmsg_level == IPPROTO_IP) {
if (CMsg->cmsg_type == IP_PKTINFO) {
@@ -1220,7 +1220,7 @@ CxPlatSocketContextRecvComplete(
FoundLocalAddr = TRUE;
} else if (CMsg->cmsg_type == IP_TOS || CMsg->cmsg_type == IP_RECVTOS) {
RecvPacket->TypeOfService = *(uint8_t *)CMSG_DATA(CMsg);
- FoundTOS = TRUE;
+ FoundTOS = TRUE; // cppcheck-suppress unreadVariable
}
}
}
diff --git a/src/platform/hashtable.c b/src/platform/hashtable.c
index fac9a62a1e..21037f6cb8 100644
--- a/src/platform/hashtable.c
+++ b/src/platform/hashtable.c
@@ -81,6 +81,45 @@ CXPLAT_STATIC_ASSERT(
CXPLAT_HASH_MIN_SIZE == BASE_HASH_TABLE_SIZE,
"Hash table sizes should match!");
+//
+// The maximum number of hash table resizes allowed at a time. This limits
+// the time spent expanding/contracting a hash table at dispatch.
+//
+#define CXPLAT_HASHTABLE_MAX_RESIZE_ATTEMPTS 1
+
+//
+// The maximum average chain length in a hash table bucket. If a hash table's
+// average chain length goes above this limit, it needs to be expanded.
+//
+#define CXPLAT_HASHTABLE_MAX_CHAIN_LENGTH 4
+
+//
+// The maximum percentage of empty buckets in the hash table. If a hash table
+// has more empty buckets, it needs to be contracted.
+//
+#define CXPLAT_HASHTABLE_MAX_EMPTY_BUCKET_PERCENTAGE 25
+
+#if CXPLAT_HASHTABLE_CONTRACT_SUPPORT
+uint32_t
+CxPlatHashtableGetEmptyBuckets(
+ _In_ const CXPLAT_HASHTABLE* HashTable
+ )
+{
+ CXPLAT_DBG_ASSERT(HashTable->TableSize >= HashTable->NonEmptyBuckets);
+ return HashTable->TableSize - HashTable->NonEmptyBuckets;
+}
+
+BOOLEAN
+CxPlatHashTableContract(
+ _Inout_ CXPLAT_HASHTABLE* HashTable
+ );
+#endif // CXPLAT_HASHTABLE_CONTRACT_SUPPORT
+
+BOOLEAN
+CxPlatHashTableExpand(
+ _Inout_ CXPLAT_HASHTABLE* HashTable
+ );
+
#ifndef BitScanReverse
static
uint8_t
@@ -160,6 +199,7 @@ Routine Description:
CXPLAT_DBG_ASSERT(BucketIndex < MAX_HASH_TABLE_SIZE);
uint32_t AbsoluteIndex = BucketIndex + HT_SECOND_LEVEL_DIR_MIN_SIZE;
+ CXPLAT_DBG_ASSERT(AbsoluteIndex != 0);
//
// Find the most significant set bit. Since AbsoluteIndex is always nonzero,
@@ -350,15 +390,10 @@ Return Value:
--*/
{
-#ifdef CXPLAT_HASHTABLE_RESIZE_SUPPORT
uint32_t BucketIndex = ((uint32_t)Signature) & HashTable->DivisorMask;
if (BucketIndex < HashTable->Pivot) {
BucketIndex = ((uint32_t)Signature) & ((HashTable->DivisorMask << 1) | 1);
}
-#else
- uint32_t BucketIndex = ((uint32_t)Signature) & (HashTable->TableSize - 1);
-#endif
-
return BucketIndex;
}
@@ -498,10 +533,8 @@ Return Value:
CxPlatZeroMemory(Table, sizeof(CXPLAT_HASHTABLE));
Table->Flags = LocalFlags;
Table->TableSize = InitialSize;
-#ifdef CXPLAT_HASHTABLE_RESIZE_SUPPORT
Table->DivisorMask = Table->TableSize - 1;
Table->Pivot = 0;
-#endif
//
// Now we allocate the second level entries.
@@ -707,7 +740,7 @@ Routine Description:
--*/
{
- CXPLAT_HASHTABLE_LOOKUP_CONTEXT LocalContext = {0};
+ CXPLAT_HASHTABLE_LOOKUP_CONTEXT LocalContext;
CXPLAT_HASHTABLE_LOOKUP_CONTEXT* ContextPtr = NULL;
if (Signature == CXPLAT_HASH_RESERVED_SIGNATURE) {
@@ -740,6 +773,22 @@ Routine Description:
}
CxPlatListInsertHead(ContextPtr->PrevLinkage, &Entry->Linkage);
+
+ //
+ // Expand the table if necessary.
+ //
+ if (HashTable->NumEntries > CXPLAT_HASHTABLE_MAX_CHAIN_LENGTH * HashTable->NonEmptyBuckets) {
+ uint32_t RestructAttempts = CXPLAT_HASHTABLE_MAX_RESIZE_ATTEMPTS;
+ do {
+ if (!CxPlatHashTableExpand(HashTable)) {
+ break;
+ }
+
+ RestructAttempts--;
+
+ } while ((RestructAttempts > 0) &&
+ (HashTable->NumEntries > CXPLAT_HASHTABLE_MAX_CHAIN_LENGTH * HashTable->NonEmptyBuckets));
+ }
}
void
@@ -799,6 +848,30 @@ Routine Description:
CXPLAT_DBG_ASSERT(Signature == Context->Signature);
}
}
+
+#if CXPLAT_HASHTABLE_CONTRACT_SUPPORT
+ //
+ // Contract the table if necessary.
+ //
+ uint32_t EmptyBuckets = CxPlatHashtableGetEmptyBuckets(HashTable);
+ if (EmptyBuckets >
+ (CXPLAT_HASHTABLE_MAX_EMPTY_BUCKET_PERCENTAGE * HashTable->TableSize / 100)) {
+
+ uint32_t RestructAttempts = CXPLAT_HASHTABLE_MAX_RESIZE_ATTEMPTS;
+ do {
+ if (!CxPlatHashTableContract(HashTable)) {
+ break;
+ }
+
+ EmptyBuckets = RtlEmptyBucketsHashTable(HashTable);
+ RestructAttempts--;
+
+ } while ((RestructAttempts > 0) &&
+ (EmptyBuckets >
+ (CXPLAT_HASHTABLE_MAX_EMPTY_BUCKET_PERCENTAGE *
+ HashTable->TableSize / 100)));
+ }
+#endif // CXPLAT_HASHTABLE_CONTRACT_SUPPORT
}
_Must_inspect_result_
@@ -843,7 +916,7 @@ Return Value:
CXPLAT_HASHTABLE_LOOKUP_CONTEXT LocalContext;
CXPLAT_HASHTABLE_LOOKUP_CONTEXT* ContextPtr =
- (Context != NULL) ? Context : &LocalContext;
+ (Context != NULL) ? Context : &LocalContext; // cppcheck-suppress uninitvar
CxPlatPopulateContext(HashTable, ContextPtr, Signature);
@@ -1143,8 +1216,6 @@ Routine Description:
Enumerator->ChainHead = FALSE;
}
-#ifdef CXPLAT_HASHTABLE_RESIZE_SUPPORT
-
BOOLEAN
CxPlatHashTableExpand(
_Inout_ CXPLAT_HASHTABLE* HashTable
@@ -1168,7 +1239,7 @@ CxPlatHashTableExpand(
// the hash table is increased by one, the highest bucket index will be the
// current table size, which is what we use in the calculations below
//
- uint32_t FirstLevelIndex, SecondLevelIndex;
+ uint32_t FirstLevelIndex = 0, SecondLevelIndex;
CxPlatComputeDirIndices(
HashTable->TableSize, &FirstLevelIndex, &SecondLevelIndex);
@@ -1181,9 +1252,11 @@ CxPlatHashTableExpand(
CXPLAT_LIST_ENTRY** FirstLevelDir;
if (HT_SECOND_LEVEL_DIR_MIN_SIZE == HashTable->TableSize) {
- SecondLevelDir = (CXPLAT_LIST_ENTRY*)HashTable->SecondLevelDir;
- FirstLevelDir = CXPLAT_ALLOC_NONPAGED(sizeof(CXPLAT_LIST_ENTRY*) * HT_FIRST_LEVEL_DIR_SIZE);
-
+ SecondLevelDir = HashTable->SecondLevelDir;
+ FirstLevelDir =
+ CXPLAT_ALLOC_NONPAGED(
+ sizeof(CXPLAT_LIST_ENTRY*) * HT_FIRST_LEVEL_DIR_SIZE,
+ QUIC_POOL_HASHTABLE_MEMBER);
if (FirstLevelDir == NULL) {
return FALSE;
}
@@ -1207,7 +1280,8 @@ CxPlatHashTableExpand(
//
SecondLevelDir =
CXPLAT_ALLOC_NONPAGED(
- CxPlatComputeSecondLevelDirSize(FirstLevelIndex) * sizeof(CXPLAT_LIST_ENTRY));
+ CxPlatComputeSecondLevelDirSize(FirstLevelIndex) * sizeof(CXPLAT_LIST_ENTRY),
+ QUIC_POOL_HASHTABLE_MEMBER);
if (NULL == SecondLevelDir) {
//
@@ -1220,7 +1294,7 @@ CxPlatHashTableExpand(
CXPLAT_DBG_ASSERT(FirstLevelIndex == 1);
HashTable->SecondLevelDir = FirstLevelDir[0];
- CXPLAT_FREE(FirstLevelDir);
+ CXPLAT_FREE(FirstLevelDir, QUIC_POOL_HASHTABLE_MEMBER);
}
return FALSE;
@@ -1293,6 +1367,8 @@ CxPlatHashTableExpand(
return TRUE;
}
+#ifdef CXPLAT_HASHTABLE_CONTRACT_SUPPORT
+
BOOLEAN
CxPlatHashTableContract(
_Inout_ CXPLAT_HASHTABLE* HashTable
@@ -1371,7 +1447,7 @@ CxPlatHashTableContract(
// Finally free any extra memory if possible.
//
- uint32_t FirstLevelIndex, SecondLevelIndex;
+ uint32_t FirstLevelIndex = 0, SecondLevelIndex;
CxPlatComputeDirIndices(
HashTable->TableSize, &FirstLevelIndex, &SecondLevelIndex);
@@ -1380,7 +1456,7 @@ CxPlatHashTableContract(
CXPLAT_LIST_ENTRY** FirstLevelDir = HashTable->FirstLevelDir;
CXPLAT_LIST_ENTRY* SecondLevelDir = FirstLevelDir[FirstLevelIndex];
- CXPLAT_FREE(SecondLevelDir);
+ CXPLAT_FREE(SecondLevelDir, QUIC_POOL_HASHTABLE_MEMBER);
FirstLevelDir[FirstLevelIndex] = NULL;
//
@@ -1389,11 +1465,11 @@ CxPlatHashTableContract(
if (HT_SECOND_LEVEL_DIR_MIN_SIZE == HashTable->TableSize) {
HashTable->SecondLevelDir = FirstLevelDir[0];
- CXPLAT_FREE(FirstLevelDir);
+ CXPLAT_FREE(FirstLevelDir, QUIC_POOL_HASHTABLE_MEMBER);
}
}
return TRUE;
}
-#endif // CXPLAT_HASHTABLE_RESIZE_SUPPORT
+#endif // CXPLAT_HASHTABLE_CONTRACT_SUPPORT
diff --git a/src/platform/tls_schannel.c b/src/platform/tls_schannel.c
index ceb4b0dc76..5472eac756 100644
--- a/src/platform/tls_schannel.c
+++ b/src/platform/tls_schannel.c
@@ -329,14 +329,12 @@ typedef struct _SecPkgContext_ConnectionInfo
#if (defined(QUIC_GAMECORE_BUILD))
#include
-#ifdef NTDDI_WIN10_CO
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
#endif
-#endif
#include
diff --git a/src/plugins/trace/dll/DataModel/QuicEvents.cs b/src/plugins/trace/dll/DataModel/QuicEvents.cs
index 28ed6cf611..2142ce9511 100644
--- a/src/plugins/trace/dll/DataModel/QuicEvents.cs
+++ b/src/plugins/trace/dll/DataModel/QuicEvents.cs
@@ -94,7 +94,7 @@ public enum QuicErrorCode
TLS_CERTIFICATE_REQUIRED = 0x174,
TLS_NO_APPLICATION_PROTOCOL = 0x178,
- QUIC_VERSION_NEGOTIATION_ERROR = 0x53F8
+ QUIC_VERSION_NEGOTIATION_ERROR = 0x11
}
public enum QuicExecutionType
diff --git a/src/test/lib/ApiTest.cpp b/src/test/lib/ApiTest.cpp
index a31eaf2a90..698c05b22f 100644
--- a/src/test/lib/ApiTest.cpp
+++ b/src/test/lib/ApiTest.cpp
@@ -2171,7 +2171,7 @@ void QuicTestGlobalParam()
// in src/core/packet.h QUIC_VERSION_INFO and QuicSupportedVersionList are defined
// but dependency issue happen when including it.
// sizeof(QUIC_VERSION_INFO[4]) is 88 * 4
- SimpleGetParamTest(nullptr, QUIC_PARAM_GLOBAL_SUPPORTED_VERSIONS, 88 * 4, nullptr);
+ SimpleGetParamTest(nullptr, QUIC_PARAM_GLOBAL_SUPPORTED_VERSIONS, 88 * 4, nullptr, true);
}
//
@@ -2237,7 +2237,7 @@ void QuicTestGlobalParam()
TestScopeLogger LogScope1("GetParam");
{
int64_t Buffer[QUIC_PERF_COUNTER_MAX] = {};
- SimpleGetParamTest(nullptr, QUIC_PARAM_GLOBAL_PERF_COUNTERS, QUIC_PERF_COUNTER_MAX * sizeof(int64_t), &Buffer);
+ SimpleGetParamTest(nullptr, QUIC_PARAM_GLOBAL_PERF_COUNTERS, QUIC_PERF_COUNTER_MAX * sizeof(int64_t), &Buffer, true);
}
//
@@ -2340,7 +2340,7 @@ void QuicTestGlobalParam()
{
TestScopeLogger LogScope1("GetParam");
- SimpleGetParamTest(nullptr, QUIC_PARAM_GLOBAL_SETTINGS, sizeof(QUIC_SETTINGS), nullptr);
+ SimpleGetParamTest(nullptr, QUIC_PARAM_GLOBAL_SETTINGS, sizeof(QUIC_SETTINGS), nullptr, true);
}
}
@@ -2707,6 +2707,9 @@ void QuicTestRegistrationParam()
}
}
+#define SETTINGS_SIZE_THRU_FIELD(SettingsType, Field) \
+ (FIELD_OFFSET(SettingsType, Field) + sizeof(((SettingsType*)0)->Field))
+
void QuicTestConfigurationParam()
{
MsQuicRegistration Registration;
@@ -2760,7 +2763,17 @@ void QuicTestConfigurationParam()
QUIC_PARAM_CONFIGURATION_SETTINGS,
&Length,
nullptr));
- TEST_EQUAL(Length, sizeof(QUIC_SETTINGS));
+ TEST_TRUE(Length >= sizeof(QUIC_SETTINGS));
+
+ Length = 1;
+ TEST_QUIC_STATUS(
+ QUIC_STATUS_BUFFER_TOO_SMALL,
+ MsQuic->GetParam(
+ Configuration.Handle,
+ QUIC_PARAM_CONFIGURATION_SETTINGS,
+ &Length,
+ nullptr));
+ TEST_EQUAL(Length, SETTINGS_SIZE_THRU_FIELD(QUIC_SETTINGS, MtuDiscoveryMissingProbeCount));
QUIC_SETTINGS Settings{0};
TEST_QUIC_SUCCEEDED(
@@ -3517,7 +3530,7 @@ void QuicTestConnectionParam()
TestScopeLogger LogScope1("GetParam");
MsQuicConnection Connection(Registration);
TEST_QUIC_SUCCEEDED(Connection.GetInitStatus());
- SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_SETTINGS, sizeof(QUIC_SETTINGS), nullptr);
+ SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_SETTINGS, sizeof(QUIC_SETTINGS), nullptr, true);
}
}
@@ -3546,7 +3559,7 @@ void QuicTestConnectionParam()
TestScopeLogger LogScope1("GetParam");
MsQuicConnection Connection(Registration);
TEST_QUIC_SUCCEEDED(Connection.GetInitStatus());
- SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS, sizeof(QUIC_STATISTICS), nullptr);
+ SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS, sizeof(QUIC_STATISTICS), nullptr, true);
}
}
@@ -3575,7 +3588,7 @@ void QuicTestConnectionParam()
TestScopeLogger LogScope1("GetParam");
MsQuicConnection Connection(Registration);
TEST_QUIC_SUCCEEDED(Connection.GetInitStatus());
- SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS_PLAT, sizeof(QUIC_STATISTICS), nullptr);
+ SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS_PLAT, sizeof(QUIC_STATISTICS), nullptr, true);
}
}
@@ -4199,7 +4212,7 @@ void QuicTestConnectionParam()
TestScopeLogger LogScope1("GetParam");
MsQuicConnection Connection(Registration);
TEST_QUIC_SUCCEEDED(Connection.GetInitStatus());
- SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS_V2, sizeof(QUIC_STATISTICS_V2), nullptr);
+ SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS_V2, sizeof(QUIC_STATISTICS_V2), nullptr, true);
}
}
@@ -4225,7 +4238,7 @@ void QuicTestConnectionParam()
TestScopeLogger LogScope1("GetParam");
MsQuicConnection Connection(Registration);
TEST_QUIC_SUCCEEDED(Connection.GetInitStatus());
- SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS_V2_PLAT, sizeof(QUIC_STATISTICS_V2), nullptr);
+ SimpleGetParamTest(Connection.Handle, QUIC_PARAM_CONN_STATISTICS_V2_PLAT, sizeof(QUIC_STATISTICS_V2), nullptr, true);
}
}
}
diff --git a/src/test/lib/TestHelpers.h b/src/test/lib/TestHelpers.h
index 25c9db2edb..049e2c394b 100644
--- a/src/test/lib/TestHelpers.h
+++ b/src/test/lib/TestHelpers.h
@@ -146,7 +146,7 @@ void SimulateConnBadStartState(MsQuicConnection& Connection, MsQuicConfiguration
// 3. call again to get actual value in Buffer
//
inline
-void SimpleGetParamTest(HQUIC Handle, uint32_t Param, size_t ExpectedLength, void* ExpectedData) {
+void SimpleGetParamTest(HQUIC Handle, uint32_t Param, size_t ExpectedLength, void* ExpectedData, bool GreaterOrEqualLength = false) {
uint32_t Length = 0;
TEST_QUIC_STATUS(
QUIC_STATUS_BUFFER_TOO_SMALL,
@@ -155,8 +155,19 @@ void SimpleGetParamTest(HQUIC Handle, uint32_t Param, size_t ExpectedLength, voi
Param,
&Length,
nullptr));
- TEST_EQUAL(ExpectedLength, Length);
+ if (GreaterOrEqualLength) {
+ if (Length < ExpectedLength) {
+ TEST_FAILURE("ExpectedLength (%u) > Length (%u)", ExpectedLength, Length);
+ return;
+ }
+ } else {
+ if (ExpectedLength != Length) {
+ TEST_FAILURE("ExpectedLength (%u) != Length (%u)", ExpectedLength, Length);
+ return;
+ }
+ }
+ Length = (uint32_t)ExpectedLength; // Only query the expected size, which might be less.
void* Value = CXPLAT_ALLOC_NONPAGED(Length, QUIC_POOL_TEST);
if (Value == nullptr) {
TEST_FAILURE("Out of memory for testing SetParam for global parameter");