An implementation of the TLS/SSL protocols
This report summarizes scanner evidence for aws/s2n-tls, a C project with 4,785 GitHub stars. SynthScan examined 332,411 lines of code across 1739 source files, recording 912 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 3.0 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 898 finding(s).
Are imports declared and package/API names verified? 1 finding(s).
Are wrappers, guards, and repeated structures necessary? 42 finding(s).
Which changes need focused human review? 912 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 912 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | codebuild/bin/install_apache2.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/cppcheck_suppressions.txt | 1 | // Cppcheck 2.13 suppressions for s2n-tls | COMMENT |
| LOW | codebuild/bin/install_ctverif.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/utils.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/install_awslc.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/install_openssl_3_0.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/jobs.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/test_libcrypto_interning.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/install_z3_yices.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_default_dependencies.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_openssl_1_0_2_fips.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/install_prlimit.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/s2n_install_test_dependencies.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/fuzz_corpus_download.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/s2n_open_fds_test.py | 1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | COMMENT |
| LOW | codebuild/bin/s2n_set_build_preset.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/clang_format_changed_files.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_al_dependencies.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_sslyze.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_ubuntu_dependencies.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/s2n_codebuild_al.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_clang.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/grep_simple_mistakes.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/coverage_report.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/test_dynamic_load.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/install_openssl_1_1_1.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/fuzz_coverage_report.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_openssl_4_0.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/test_install_shared_and_static.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/run_sidetrail.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_python.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/s2n_codebuild.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_sidetrail.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/run_kwstyle.sh | 1 | #! /bin/bash | COMMENT |
| LOW | codebuild/bin/install_libressl.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/s2n_override_paths.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/run_cppcheck.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/header_mistake_scanner.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_shellcheck.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_openssl_1_0_2.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/test_exec_leak.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/install_boringssl.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/cpp_style_comment_linter.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_s2n_head.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | codebuild/bin/install_sidetrail_dependencies.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/s2n_setup_env.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/s2n_apache2.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_saw.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/start_codebuild.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/install_gnutls37.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/build_aws_crt_cpp.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/fuzz_corpus_upload.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/run_ctverif.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/bin/format.sh | 1 | #!/bin/bash | COMMENT |
| LOW | codebuild/spec/buildspec_musl.yml | 1 | --- | COMMENT |
| LOW | codebuild/spec/buildspec_fuzz_scheduled.yml | 1 | --- | COMMENT |
| LOW | codebuild/spec/buildspec_sidetrail.yml | 1 | --- | COMMENT |
| LOW | codebuild/spec/buildspec_s2n_tls_bench.yml | 1 | --- | COMMENT |
| LOW | codebuild/spec/buildspec_ubuntu.yml | 1 | --- | COMMENT |
| LOW | codebuild/spec/buildspec_fuzz.yml | 1 | --- | COMMENT |
| 761 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/integrationv2/test_key_update.py | 0 | sometimes the hello retry test parameters in combination with the s2n libcrypto results in no test cases existing. in th | STRING |
| HIGH | tests/integrationv2/test_version_negotiation.py | 0 | sometimes the hello retry test parameters in combination with the s2n libcrypto results in no test cases existing. in th | STRING |
| HIGH | tests/integrationv2/test_early_data.py | 0 | sometimes the hello retry test parameters in combination with the s2n libcrypto results in no test cases existing. in th | STRING |
| HIGH | tests/integrationv2/test_record_padding.py | 0 | sometimes the hello retry test parameters in combination with the s2n libcrypto results in no test cases existing. in th | STRING |
| HIGH | tests/integrationv2/test_external_psk.py | 0 | sometimes the hello retry test parameters in combination with the s2n libcrypto results in no test cases existing. in th | STRING |
| HIGH | tests/integrationv2/test_hello_retry_requests.py | 0 | sometimes the hello retry test parameters in combination with the s2n libcrypto results in no test cases existing. in th | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integrationv2/test_renegotiate_apache.py | 46 | def test_apache_endpoints_fail_with_no_reneg(managed_process, protocol, endpoint): # noqa: F811 | CODE |
| LOW | tests/integrationv2/test_renegotiate_apache.py | 82 | def test_change_cipher_suite_endpoint(managed_process, curve, protocol): # noqa: F811 | CODE |
| LOW | tests/integrationv2/test_renegotiate_apache.py | 113 | def test_mutual_auth_endpoint(managed_process, curve, protocol): # noqa: F811 | CODE |
| LOW | tests/integrationv2/conftest.py | 83 | def pytest_collection_modifyitems(config, items): | CODE |
| LOW | tests/integrationv2/test_version_negotiation.py | 35 | def invalid_version_negotiation_test_parameters(*args, **kwargs): | CODE |
| LOW | tests/integrationv2/test_client_authentication.py | 29 | def assert_openssl_handshake_complete(results, is_complete=True): | CODE |
| LOW | tests/integrationv2/test_record_padding.py | 44 | def get_payload_size_from_openssl_trace(record_size_bytes: str) -> int: | CODE |
| LOW | tests/integrationv2/test_record_padding.py | 52 | def assert_openssl_records_are_padded_correctly(openssl_output: str, padding_size: int): | CODE |
| LOW⚡ | tests/integrationv2/test_sslyze.py | 215 | def assert_scan_result_completed(scan_result): | CODE |
| LOW⚡ | tests/integrationv2/test_sslyze.py | 216 | def get_connectivity_error_str(tb): | CODE |
| LOW⚡ | tests/integrationv2/test_sslyze.py | 226 | def assert_scan_attempt_completed(scan_attempt): | CODE |
| LOW | tests/integrationv2/test_sslyze.py | 242 | def invalid_sslyze_scan_parameters(*args, **kwargs): | CODE |
| LOW | tests/integrationv2/test_sslyze.py | 318 | def invalid_certificate_scans_parameters(*args, **kwargs): | CODE |
| LOW | tests/integrationv2/test_sslyze.py | 361 | def test_sslyze_certificate_scans( | CODE |
| LOW | tests/integrationv2/test_external_psk.py | 76 | def get_psk_hash_alg_from_cipher(cipher): | CODE |
| LOW | tests/integrationv2/test_external_psk.py | 109 | def validate_negotiated_psk_openssl(outcome, results): | CODE |
| LOW | tests/integrationv2/utils.py | 32 | def get_expected_openssl_version(protocol): | CODE |
| LOW | tests/integrationv2/utils.py | 41 | def get_expected_gnutls_version(protocol): | CODE |
| LOW | tests/integrationv2/test_fragmentation.py | 27 | def invalid_test_parameters_frag_len(*args, **kwargs): | CODE |
| LOW | tests/integrationv2/test_serialization.py | 61 | def test_server_serialization_backwards_compat( | CODE |
| LOW | tests/integrationv2/test_hello_retry_requests.py | 197 | def test_hrr_with_default_keyshare( | CODE |
| LOW | tests/cbmc/proofs/run-cbmc-proofs.py | 293 | def should_enable_memory_profiling(litani_caps, args): | STRING |
| LOW | tests/cbmc/proofs/lib/summarize.py | 28 | def _get_max_length_per_column_list(data): | CODE |
| LOW | tests/cbmc/proofs/lib/summarize.py | 36 | def _get_table_header_separator(max_length_per_column_list): | CODE |
| LOW | tests/cbmc/proofs/lib/summarize.py | 70 | def _get_status_and_proof_summaries(run_dict): | CODE |
| LOW | tests/sidetrail/bin/ct-verif.rb | 8 | def run_command_with_heartbeat (beat_time, cmd) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …gs/rust-examples/tokio-server-client/src/bin/client.rs | 10 | /// NOTE: this ca is to be used for demonstration purposes only! | COMMENT |
| MEDIUM | …gs/rust-examples/tokio-server-client/src/bin/server.rs | 10 | /// NOTE: this certificate and key are to be used for demonstration purposes only! | COMMENT |
| MEDIUM | …gs/rust-examples/hyper-server-client/src/bin/client.rs | 11 | /// NOTE: this CA is to be used for demonstration purposes only! | COMMENT |
| MEDIUM | …gs/rust-examples/hyper-server-client/src/bin/server.rs | 13 | /// NOTE: this certificate and key are to be used for demonstration purposes only! | COMMENT |
| MEDIUM | bindings/rust-examples/key-logging/src/lib.rs | 84 | /// NOTE: these materials are to be used for demonstration purposes only! | COMMENT |
| MEDIUM | bindings/rust-examples/mutual-tls/src/bin/client.rs | 13 | /// NOTE: this certificate, key, and ca are to be used for demonstration purposes only! | COMMENT |
| MEDIUM | bindings/rust-examples/mutual-tls/src/bin/server.rs | 16 | /// NOTE: this certificate, key, and ca are to be used for demonstration purposes only! | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .clinerules/BINDINGS_RELEASE_STEPS.md | 37 | #### Step 2: Run generate.sh | COMMENT |
| LOW | .clinerules/BINDINGS_RELEASE_STEPS.md | 55 | #### Step 3: Update s2n-tls Crate | COMMENT |
| LOW | .clinerules/BINDINGS_RELEASE_STEPS.md | 83 | #### Step 4: Update s2n-tls-tokio Crate | COMMENT |
| LOW | …/rust/standard/integration/src/record/buffered_send.rs | 77 | // Step 1: if a custom send buffer is configured, s2n checks it against aggressively | COMMENT |
| LOW | …/rust/standard/integration/src/record/buffered_send.rs | 97 | // Step 2: the per-record overhead added on top of the plaintext fragment. | COMMENT |
| LOW | …/rust/standard/integration/src/record/buffered_send.rs | 120 | // Step 3: TLS 1.3 protected records carry one extra inner content type byte. | COMMENT |
| LOW | …andard/integration/src/handshake/session_resumption.rs | 286 | // Step 1: OpenSSL client ↔ OpenSSL server handshake to generate a session | COMMENT |
| LOW | …andard/integration/src/handshake/session_resumption.rs | 382 | // Step 1: Establish session with first server and get ticket | COMMENT |
| LOW | …andard/integration/src/handshake/session_resumption.rs | 397 | // Step 2: Try to resume with second server using ticket from first server | COMMENT |
| LOW | …ndings/rust/extended/s2n-tls/src/testing/resumption.rs | 195 | // Step 1: obtain a genuine server-issued TLS1.3 ticket via a normal handshake. | COMMENT |
| LOW | …ndings/rust/extended/s2n-tls/src/testing/resumption.rs | 231 | // Step 2: craft a TLS1.2 client session that carries this TLS1.3 ticket and a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/integrationv2/providers.py | 910 | except FileNotFoundError: | CODE |
| HIGH | tests/integrationv2/processes.py | 139 | except BrokenPipeError: | CODE |
| HIGH | tests/integrationv2/fixtures.py | 90 | except Exception as _: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/s2n_alerts_protocol_test.c | 184 | *# The implementation SHOULD provide a way to facilitate logging the sending | COMMENT |
| LOW | tests/integrationv2/test_early_data.py | 90 | # but for now we can just use `-sess_in/out` and cover the S2N->S2N case in the S2N client tests. | COMMENT |
| MEDIUM | …specs/www.rfc-editor.org/rfc/rfc5246/appendix-E.2.toml | 46 | # This field, in conjunction with the version field, identifies a | COMMENT |
| MEDIUM | …/specs/www.rfc-editor.org/rfc/rfc8446/section-6.2.toml | 21 | # implementation SHOULD provide a way to facilitate logging the sending | COMMENT |
| MEDIUM | bindings/rust/standard/integration/Cargo.toml | 62 | # tls-harness/Cargo.toml for why it is used instead of `boring`. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/specs/www.rfc-editor.org/rfc/rfc8446/section-7.1.toml | 42 | # In this version of TLS 1.3, the two input secrets are: | COMMENT |
| HIGH | bindings/rust-examples/mutual-tls/README.md | 5 | Note that when client authentication is used, the server MUST implement a host name verification callback to validate th | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/rust/standard/integration/src/record/buffered_send.rs | 77 | // Step 1: if a custom send buffer is configured, s2n checks it against aggressively | COMMENT |
| LOW | …/rust/standard/integration/src/record/buffered_send.rs | 97 | // Step 2: the per-record overhead added on top of the plaintext fragment. | COMMENT |
| LOW | …/rust/standard/integration/src/record/buffered_send.rs | 120 | // Step 3: TLS 1.3 protected records carry one extra inner content type byte. | COMMENT |
| LOW | …andard/integration/src/handshake/session_resumption.rs | 286 | // Step 1: OpenSSL client ↔ OpenSSL server handshake to generate a session | COMMENT |
| LOW | …andard/integration/src/handshake/session_resumption.rs | 382 | // Step 1: Establish session with first server and get ticket | COMMENT |
| LOW | …andard/integration/src/handshake/session_resumption.rs | 397 | // Step 2: Try to resume with second server using ticket from first server | COMMENT |
| LOW | …ndings/rust/extended/s2n-tls/src/testing/resumption.rs | 195 | // Step 1: obtain a genuine server-issued TLS1.3 ticket via a normal handshake. | COMMENT |
| LOW | …ndings/rust/extended/s2n-tls/src/testing/resumption.rs | 231 | // Step 2: craft a TLS1.2 client session that carries this TLS1.3 ticket and a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | codebuild/bin/s2n_open_fds_test.py | 32 | CODE | |
| LOW | tests/integrationv2/test_version_negotiation.py | 129 | CODE | |
| LOW | tests/integrationv2/providers.py | 891 | CODE | |
| LOW | tests/integrationv2/providers.py | 166 | CODE | |
| LOW | tests/integrationv2/providers.py | 426 | CODE | |
| LOW | tests/integrationv2/providers.py | 489 | CODE | |
| LOW | tests/integrationv2/providers.py | 647 | CODE | |
| LOW | tests/integrationv2/providers.py | 669 | CODE | |
| LOW | tests/integrationv2/processes.py | 109 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | codebuild/bin/s2n_setup_env.sh | 148 | # Create a link to the selected libcrypto. This shouldn't be needed when LIBCRYPTO_ROOT is set, but some tests | COMMENT |
| MEDIUM | tests/pems/crl/generate.sh | 70 | # Create a chain with just the root certificate for validating child certificates | COMMENT |
| MEDIUM | tests/pems/crl/generate.sh | 144 | # Create a chain that includes the newly signed certificate and all parent certificates | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scram/aes_scram.py | 154 | # T = GMAC (N, A||C, null) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | codebuild/bin/fuzz_corpus_download.sh | 24 | # Check if corpus.zip exists in the specified S3 location. | COMMENT |
| LOW | tests/sidetrail/count_success.pl | 43 | #Check if the code under test used unexpected functions | COMMENT |
| LOW | tests/ctverif/count_success.pl | 38 | #Check if the code under test used unexpected functions | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integrationv2/processes.py | 437 | except Exception as ex: | CODE |
| LOW | tests/integrationv2/processes.py | 483 | except Exception as ex: | CODE |
| LOW | tests/integrationv2/fixtures.py | 90 | except Exception as _: | CODE |
| LOW | tests/cbmc/proofs/lib/summarize.py | 142 | except Exception as ex: # pylint: disable=broad-except | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integrationv2/processes.py | 364 | CODE | |
| LOW | tests/integrationv2/common.py | 704 | CODE | |
| LOW | .github/gha_monitor/gha_monitor/sns.py | 26 | CODE |