123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299 |
- /*
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License").
- * You may not use this file except in compliance with the License.
- * A copy of the License is located at
- *
- * http://aws.amazon.com/apache2.0
- *
- * or in the "license" file accompanying this file. This file is distributed
- * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
- #include "tls/s2n_security_policies.h"
- #include "api/s2n.h"
- #include "tls/s2n_connection.h"
- #include "utils/s2n_safety.h"
- const struct s2n_security_policy security_policy_20170210 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20170210,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_default_tls13 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20210831,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .certificate_signature_preferences = &s2n_certificate_signature_preferences_20201110,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /*
- * This security policy is derived from the following specification:
- * https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r2.pdf
- *
- * Supports TLS1.2
- */
- const struct s2n_security_policy security_policy_default_fips = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_default_fips,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_default_fips,
- .certificate_signature_preferences = &s2n_signature_preferences_default_fips,
- .ecc_preferences = &s2n_ecc_preferences_default_fips,
- };
- const struct s2n_security_policy security_policy_20230317 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_20230317,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20230317,
- .certificate_signature_preferences = &s2n_signature_preferences_20230317,
- .ecc_preferences = &s2n_ecc_preferences_20201021,
- };
- const struct s2n_security_policy security_policy_20190801 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190801,
- .kem_preferences = &kem_preferences_null,
- /* The discrepancy in the date exists because the signature preferences
- * were named when cipher preferences and signature preferences were
- * tracked separately, and we chose to keep the cipher preference
- * name because customers use it.
- */
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_20190802 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190801,
- .kem_preferences = &kem_preferences_null,
- /* The discrepancy in the date exists because the signature preferences
- * were named when cipher preferences and signature preferences were
- * tracked separately, and we chose to keep the cipher preference
- * name because customers use it.
- */
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20170405 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20170405,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20170405_gcm = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20170405_gcm,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_2015_04 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &elb_security_policy_2015_04,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_2016_08 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &elb_security_policy_2016_08,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_tls_1_1_2017_01 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &elb_security_policy_tls_1_1_2017_01,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_tls_1_2_2017_01 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &elb_security_policy_tls_1_2_2017_01,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_tls_1_2_ext_2018_06 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &elb_security_policy_tls_1_2_ext_2018_06,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_fs_2018_06 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &elb_security_policy_fs_2018_06,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_fs_1_2_2019_08 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &elb_security_policy_fs_1_2_2019_08,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_fs_1_1_2019_08 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &elb_security_policy_fs_1_1_2019_08,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_elb_fs_1_2_Res_2019_08 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &elb_security_policy_fs_1_2_Res_2019_08,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- /* CloudFront upstream */
- const struct s2n_security_policy security_policy_cloudfront_upstream = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_cloudfront_upstream,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_upstream_tls10 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_cloudfront_upstream_tls10,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_upstream_tls11 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &cipher_preferences_cloudfront_upstream_tls11,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_upstream_tls12 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_upstream_tls12,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- /* CloudFront viewer facing */
- const struct s2n_security_policy security_policy_cloudfront_ssl_v_3 = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_cloudfront_ssl_v_3,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_0_2014 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_0_2014,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_0_2016 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_0_2016,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_1_2016 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_1_2016,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_2_2017 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_2_2017,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_2_2018 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_2_2018,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_2_2019 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_2_2019,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_2_2021 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_2_2021,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_2_2021_chacha20_boosted = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_2_2021_chacha20_boosted,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* CloudFront viewer facing legacy TLS 1.2 policies */
- const struct s2n_security_policy security_policy_cloudfront_ssl_v_3_legacy = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_cloudfront_ssl_v_3_legacy,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_0_2014_legacy = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_0_2014_legacy,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_0_2016_legacy = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_0_2016_legacy,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_1_2016_legacy = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_1_2016_legacy,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_2_2018_legacy = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_2_2018_legacy,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_cloudfront_tls_1_2_2019_legacy = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_cloudfront_tls_1_2_2019_legacy,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_ssl_v3 = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_ssl_v3,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_10 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_default,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_11 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_default,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_12 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_default,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_13 = {
- .minimum_protocol_version = S2N_TLS13,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_tls_13,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_ssl_v3_06_23 = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_ssl_v3,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20230623,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_10_06_23 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_default,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20230623,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_11_06_23 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_default,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20230623,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_12_06_23 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_default,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20230623,
- };
- const struct s2n_security_policy security_policy_aws_crt_sdk_tls_13_06_23 = {
- .minimum_protocol_version = S2N_TLS13,
- .cipher_preferences = &cipher_preferences_aws_crt_sdk_tls_13,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20230623,
- };
- const struct s2n_security_policy security_policy_kms_tls_1_0_2018_10 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_kms_tls_1_0_2018_10,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_kms_tls_1_0_2021_08 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_kms_tls_1_0_2021_08,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_kms_tls_1_2_2023_06 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_kms_tls_1_0_2021_08,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_kms_pq_tls_1_0_2019_06 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_kms_pq_tls_1_0_2019_06,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_kms_pq_tls_1_0_2020_02 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_kms_pq_tls_1_0_2020_02,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_pq_sike_test_tls_1_0_2019_11 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_sike_test_tls_1_0_2019_11,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_pq_sike_test_tls_1_0_2020_02 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_sike_test_tls_1_0_2020_02,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_kms_pq_tls_1_0_2020_07 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_kms_pq_tls_1_0_2020_07,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2020_12 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2020_12,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_1_2021_05_17 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &cipher_preferences_pq_tls_1_1_2021_05_17,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_18 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_18,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_19 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_19,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_20 = {
- .minimum_protocol_version = S2N_TLS10,
- /* Yes, this is the same cipher_preferences as kms_pq_tls_1_0_2020_07. The difference between these policies is
- * the ecc_preferences, with this one adding support for x25519. */
- .cipher_preferences = &cipher_preferences_kms_pq_tls_1_0_2020_07,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_1_2021_05_21 = {
- .minimum_protocol_version = S2N_TLS11,
- .cipher_preferences = &cipher_preferences_pq_tls_1_1_2021_05_21,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_22 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_22,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_23 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_23,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_24 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_24,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_25 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_25,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2021_05_26 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_26,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_0_2023_01_24 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_24,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2023_01,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* Same as security_policy_pq_tls_1_1_2021_05_21, but with TLS 1.2 as minimum */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_04_07 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_1_2021_05_21,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* Same as security_policy_pq_tls_1_0_2021_05_22, but with TLS 1.2 as minimum */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_04_08 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_22,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* Same as security_policy_pq_tls_1_0_2021_05_24, but with TLS 1.2 as minimum */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_04_09 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_24,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* Same as security_policy_pq_tls_1_0_2021_05_26, but with TLS 1.2 as minimum */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_04_10 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_26,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_pq_tls_1_3_2023_06_01 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_3_2023_06_01,
- .kem_preferences = &kem_preferences_pq_tls_1_3_2023_06,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20201021,
- };
- /* Same as security_policy_pq_tls_1_2_2023_04_07, but with updated KEM prefs */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_10_07 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_1_2021_05_21,
- .kem_preferences = &kem_preferences_pq_tls_1_3_2023_06,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* Same as security_policy_pq_tls_1_2_2023_04_08, but with updated KEM prefs */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_10_08 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_22,
- .kem_preferences = &kem_preferences_pq_tls_1_3_2023_06,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* Same as security_policy_pq_tls_1_2_2023_04_09, but with updated KEM prefs */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_10_09 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_24,
- .kem_preferences = &kem_preferences_pq_tls_1_3_2023_06,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- /* Same as security_policy_pq_tls_1_2_2023_04_10, but with updated KEM prefs */
- const struct s2n_security_policy security_policy_pq_tls_1_2_2023_10_10 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_pq_tls_1_0_2021_05_26,
- .kem_preferences = &kem_preferences_pq_tls_1_3_2023_06,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_kms_fips_tls_1_2_2018_10 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_kms_fips_tls_1_2_2018_10,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_kms_fips_tls_1_2_2021_08 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_kms_fips_tls_1_2_2021_08,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20140601 = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_20140601,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20141001 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20141001,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20150202 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20150202,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20150214 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20150214,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20160411 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20160411,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20150306 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20150306,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20160804 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20160804,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20160824 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20160824,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20190122 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190122,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20190121 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190121,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20190120 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190120,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20190214 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190214,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20190214_gcm = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190214_gcm,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20210825 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20210825,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_20210825_gcm = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20210825_gcm,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20200207,
- .ecc_preferences = &s2n_ecc_preferences_20200310,
- };
- const struct s2n_security_policy security_policy_20170328 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20170328,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20170328_gcm = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20170328_gcm,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20170718 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20170718,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20170718_gcm = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20170718_gcm,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_20201021 = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_20190122,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20201021,
- .ecc_preferences = &s2n_ecc_preferences_20201021,
- };
- const struct s2n_security_policy security_policy_20210816 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_20210816,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20210816,
- .ecc_preferences = &s2n_ecc_preferences_20210816,
- };
- const struct s2n_security_policy security_policy_20210816_gcm = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_20210816_gcm,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20210816,
- .ecc_preferences = &s2n_ecc_preferences_20210816,
- };
- /*
- * This security policy is derived from the following specification:
- * https://datatracker.ietf.org/doc/html/rfc9151
- */
- const struct s2n_security_policy security_policy_rfc9151 = {
- .minimum_protocol_version = S2N_TLS12,
- .cipher_preferences = &cipher_preferences_rfc9151,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_rfc9151,
- .certificate_signature_preferences = &s2n_certificate_signature_preferences_rfc9151,
- .ecc_preferences = &s2n_ecc_preferences_20210816,
- };
- const struct s2n_security_policy security_policy_test_all = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_test_all,
- .kem_preferences = &kem_preferences_all,
- .signature_preferences = &s2n_signature_preferences_20201021,
- .ecc_preferences = &s2n_ecc_preferences_test_all,
- };
- const struct s2n_security_policy security_policy_test_all_tls12 = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_test_all_tls12,
- .kem_preferences = &kem_preferences_pq_tls_1_0_2021_05,
- .signature_preferences = &s2n_signature_preferences_20201021,
- .ecc_preferences = &s2n_ecc_preferences_20201021,
- };
- const struct s2n_security_policy security_policy_test_all_fips = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_test_all_fips,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20201021,
- .ecc_preferences = &s2n_ecc_preferences_20201021,
- };
- const struct s2n_security_policy security_policy_test_all_ecdsa = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_test_all_ecdsa,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20201021,
- .ecc_preferences = &s2n_ecc_preferences_test_all,
- };
- const struct s2n_security_policy security_policy_test_all_rsa_kex = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_test_all_rsa_kex,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20140601,
- .ecc_preferences = &s2n_ecc_preferences_20140601,
- };
- const struct s2n_security_policy security_policy_test_all_tls13 = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_test_all_tls13,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20201021,
- .ecc_preferences = &s2n_ecc_preferences_test_all,
- };
- const struct s2n_security_policy security_policy_test_ecdsa_priority = {
- .minimum_protocol_version = S2N_SSLv3,
- .cipher_preferences = &cipher_preferences_test_ecdsa_priority,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_20201021,
- .ecc_preferences = &s2n_ecc_preferences_test_all,
- };
- const struct s2n_security_policy security_policy_null = {
- .minimum_protocol_version = S2N_TLS10,
- .cipher_preferences = &cipher_preferences_null,
- .kem_preferences = &kem_preferences_null,
- .signature_preferences = &s2n_signature_preferences_null,
- .ecc_preferences = &s2n_ecc_preferences_null,
- };
- struct s2n_security_policy_selection security_policy_selection[] = {
- { .version = "default", .security_policy = &security_policy_20170210, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "default_tls13", .security_policy = &security_policy_default_tls13, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "default_fips", .security_policy = &security_policy_default_fips, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20230317", .security_policy = &security_policy_20230317, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-TLS-1-0-2015-04", .security_policy = &security_policy_elb_2015_04, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- /* Not a mistake. TLS-1-0-2015-05 and 2016-08 are equivalent */
- { .version = "ELBSecurityPolicy-TLS-1-0-2015-05", .security_policy = &security_policy_elb_2016_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-2016-08", .security_policy = &security_policy_elb_2016_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-TLS-1-1-2017-01", .security_policy = &security_policy_elb_tls_1_1_2017_01, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-TLS-1-2-2017-01", .security_policy = &security_policy_elb_tls_1_2_2017_01, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-TLS-1-2-Ext-2018-06", .security_policy = &security_policy_elb_tls_1_2_ext_2018_06, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-FS-2018-06", .security_policy = &security_policy_elb_fs_2018_06, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-FS-1-2-2019-08", .security_policy = &security_policy_elb_fs_1_2_2019_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-FS-1-1-2019-08", .security_policy = &security_policy_elb_fs_1_1_2019_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "ELBSecurityPolicy-FS-1-2-Res-2019-08", .security_policy = &security_policy_elb_fs_1_2_Res_2019_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-Upstream", .security_policy = &security_policy_cloudfront_upstream, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-Upstream-TLS-1-0", .security_policy = &security_policy_cloudfront_upstream_tls10, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-Upstream-TLS-1-1", .security_policy = &security_policy_cloudfront_upstream_tls11, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-Upstream-TLS-1-2", .security_policy = &security_policy_cloudfront_upstream_tls12, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- /* CloudFront Viewer Facing */
- { .version = "CloudFront-SSL-v-3", .security_policy = &security_policy_cloudfront_ssl_v_3, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-0-2014", .security_policy = &security_policy_cloudfront_tls_1_0_2014, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-0-2016", .security_policy = &security_policy_cloudfront_tls_1_0_2016, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-1-2016", .security_policy = &security_policy_cloudfront_tls_1_1_2016, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-2-2017", .security_policy = &security_policy_cloudfront_tls_1_2_2017, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-2-2018", .security_policy = &security_policy_cloudfront_tls_1_2_2018, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-2-2019", .security_policy = &security_policy_cloudfront_tls_1_2_2019, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-2-2021", .security_policy = &security_policy_cloudfront_tls_1_2_2021, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-2-2021-Chacha20-Boosted", .security_policy = &security_policy_cloudfront_tls_1_2_2021_chacha20_boosted, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- /* CloudFront Legacy (TLS 1.2) policies */
- { .version = "CloudFront-SSL-v-3-Legacy", .security_policy = &security_policy_cloudfront_ssl_v_3_legacy, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-0-2014-Legacy", .security_policy = &security_policy_cloudfront_tls_1_0_2014_legacy, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-0-2016-Legacy", .security_policy = &security_policy_cloudfront_tls_1_0_2016_legacy, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-1-2016-Legacy", .security_policy = &security_policy_cloudfront_tls_1_1_2016_legacy, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-2-2018-Legacy", .security_policy = &security_policy_cloudfront_tls_1_2_2018_legacy, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "CloudFront-TLS-1-2-2019-Legacy", .security_policy = &security_policy_cloudfront_tls_1_2_2019_legacy, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- /* CRT allows users to choose the minimal TLS protocol they want to negotiate with. This translates to 5 different security policies in s2n */
- { .version = "AWS-CRT-SDK-SSLv3.0", .security_policy = &security_policy_aws_crt_sdk_ssl_v3, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.0", .security_policy = &security_policy_aws_crt_sdk_tls_10, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.1", .security_policy = &security_policy_aws_crt_sdk_tls_11, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.2", .security_policy = &security_policy_aws_crt_sdk_tls_12, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.3", .security_policy = &security_policy_aws_crt_sdk_tls_13, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-SSLv3.0-2023", .security_policy = &security_policy_aws_crt_sdk_ssl_v3_06_23, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.0-2023", .security_policy = &security_policy_aws_crt_sdk_tls_10_06_23, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.1-2023", .security_policy = &security_policy_aws_crt_sdk_tls_11_06_23, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.2-2023", .security_policy = &security_policy_aws_crt_sdk_tls_12_06_23, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "AWS-CRT-SDK-TLSv1.3-2023", .security_policy = &security_policy_aws_crt_sdk_tls_13_06_23, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- /* KMS TLS Policies*/
- { .version = "KMS-TLS-1-0-2018-10", .security_policy = &security_policy_kms_tls_1_0_2018_10, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "KMS-TLS-1-0-2021-08", .security_policy = &security_policy_kms_tls_1_0_2021_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "KMS-TLS-1-2-2023-06", .security_policy = &security_policy_kms_tls_1_2_2023_06, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "KMS-FIPS-TLS-1-2-2018-10", .security_policy = &security_policy_kms_fips_tls_1_2_2018_10, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "KMS-FIPS-TLS-1-2-2021-08", .security_policy = &security_policy_kms_fips_tls_1_2_2021_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "KMS-PQ-TLS-1-0-2019-06", .security_policy = &security_policy_kms_pq_tls_1_0_2019_06, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "KMS-PQ-TLS-1-0-2020-02", .security_policy = &security_policy_kms_pq_tls_1_0_2020_02, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "KMS-PQ-TLS-1-0-2020-07", .security_policy = &security_policy_kms_pq_tls_1_0_2020_07, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-SIKE-TEST-TLS-1-0-2019-11", .security_policy = &security_policy_pq_sike_test_tls_1_0_2019_11, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-SIKE-TEST-TLS-1-0-2020-02", .security_policy = &security_policy_pq_sike_test_tls_1_0_2020_02, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2020-12", .security_policy = &security_policy_pq_tls_1_0_2020_12, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-1-2021-05-17", .security_policy = &security_policy_pq_tls_1_1_2021_05_17, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-18", .security_policy = &security_policy_pq_tls_1_0_2021_05_18, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-19", .security_policy = &security_policy_pq_tls_1_0_2021_05_19, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-20", .security_policy = &security_policy_pq_tls_1_0_2021_05_20, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-1-2021-05-21", .security_policy = &security_policy_pq_tls_1_1_2021_05_21, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-22", .security_policy = &security_policy_pq_tls_1_0_2021_05_22, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-23", .security_policy = &security_policy_pq_tls_1_0_2021_05_23, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-24", .security_policy = &security_policy_pq_tls_1_0_2021_05_24, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-25", .security_policy = &security_policy_pq_tls_1_0_2021_05_25, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2021-05-26", .security_policy = &security_policy_pq_tls_1_0_2021_05_26, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-0-2023-01-24", .security_policy = &security_policy_pq_tls_1_0_2023_01_24, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-04-07", .security_policy = &security_policy_pq_tls_1_2_2023_04_07, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-04-08", .security_policy = &security_policy_pq_tls_1_2_2023_04_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-04-09", .security_policy = &security_policy_pq_tls_1_2_2023_04_09, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-04-10", .security_policy = &security_policy_pq_tls_1_2_2023_04_10, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-3-2023-06-01", .security_policy = &security_policy_pq_tls_1_3_2023_06_01, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-10-07", .security_policy = &security_policy_pq_tls_1_2_2023_10_07, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-10-08", .security_policy = &security_policy_pq_tls_1_2_2023_10_08, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-10-09", .security_policy = &security_policy_pq_tls_1_2_2023_10_09, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "PQ-TLS-1-2-2023-10-10", .security_policy = &security_policy_pq_tls_1_2_2023_10_10, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20140601", .security_policy = &security_policy_20140601, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20141001", .security_policy = &security_policy_20141001, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20150202", .security_policy = &security_policy_20150202, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20150214", .security_policy = &security_policy_20150214, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20150306", .security_policy = &security_policy_20150306, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20160411", .security_policy = &security_policy_20160411, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20160804", .security_policy = &security_policy_20160804, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20160824", .security_policy = &security_policy_20160824, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20170210", .security_policy = &security_policy_20170210, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20170328", .security_policy = &security_policy_20170328, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20170328_gcm", .security_policy = &security_policy_20170328_gcm, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20190214", .security_policy = &security_policy_20190214, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20190214_gcm", .security_policy = &security_policy_20190214_gcm, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20210825", .security_policy = &security_policy_20210825, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20210825_gcm", .security_policy = &security_policy_20210825_gcm, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20170405", .security_policy = &security_policy_20170405, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20170405_gcm", .security_policy = &security_policy_20170405_gcm, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20170718", .security_policy = &security_policy_20170718, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20170718_gcm", .security_policy = &security_policy_20170718_gcm, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20190120", .security_policy = &security_policy_20190120, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20190121", .security_policy = &security_policy_20190121, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20190122", .security_policy = &security_policy_20190122, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20190801", .security_policy = &security_policy_20190801, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20190802", .security_policy = &security_policy_20190802, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20200207", .security_policy = &security_policy_test_all_tls13, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20201021", .security_policy = &security_policy_20201021, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20210816", .security_policy = &security_policy_20210816, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "20210816_GCM", .security_policy = &security_policy_20210816_gcm, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "rfc9151", .security_policy = &security_policy_rfc9151, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "test_all", .security_policy = &security_policy_test_all, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "test_all_fips", .security_policy = &security_policy_test_all_fips, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "test_all_ecdsa", .security_policy = &security_policy_test_all_ecdsa, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "test_all_rsa_kex", .security_policy = &security_policy_test_all_rsa_kex, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "test_ecdsa_priority", .security_policy = &security_policy_test_ecdsa_priority, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "test_all_tls12", .security_policy = &security_policy_test_all_tls12, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "test_all_tls13", .security_policy = &security_policy_test_all_tls13, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = "null", .security_policy = &security_policy_null, .ecc_extension_required = 0, .pq_kem_extension_required = 0 },
- { .version = NULL, .security_policy = NULL, .ecc_extension_required = 0, .pq_kem_extension_required = 0 }
- };
- int s2n_find_security_policy_from_version(const char *version, const struct s2n_security_policy **security_policy)
- {
- POSIX_ENSURE_REF(version);
- POSIX_ENSURE_REF(security_policy);
- for (int i = 0; security_policy_selection[i].version != NULL; i++) {
- if (!strcasecmp(version, security_policy_selection[i].version)) {
- *security_policy = security_policy_selection[i].security_policy;
- return 0;
- }
- }
- POSIX_BAIL(S2N_ERR_INVALID_SECURITY_POLICY);
- }
- int s2n_config_set_cipher_preferences(struct s2n_config *config, const char *version)
- {
- const struct s2n_security_policy *security_policy = NULL;
- POSIX_GUARD(s2n_find_security_policy_from_version(version, &security_policy));
- POSIX_ENSURE_REF(security_policy);
- POSIX_ENSURE_REF(security_policy->cipher_preferences);
- POSIX_ENSURE_REF(security_policy->kem_preferences);
- POSIX_ENSURE_REF(security_policy->signature_preferences);
- POSIX_ENSURE_REF(security_policy->ecc_preferences);
- /* If the security policy's minimum version is higher than what libcrypto supports, return an error. */
- POSIX_ENSURE((security_policy->minimum_protocol_version <= s2n_get_highest_fully_supported_tls_version()), S2N_ERR_PROTOCOL_VERSION_UNSUPPORTED);
- config->security_policy = security_policy;
- return 0;
- }
- int s2n_connection_set_cipher_preferences(struct s2n_connection *conn, const char *version)
- {
- const struct s2n_security_policy *security_policy = NULL;
- POSIX_GUARD(s2n_find_security_policy_from_version(version, &security_policy));
- POSIX_ENSURE_REF(security_policy);
- POSIX_ENSURE_REF(security_policy->cipher_preferences);
- POSIX_ENSURE_REF(security_policy->kem_preferences);
- POSIX_ENSURE_REF(security_policy->signature_preferences);
- POSIX_ENSURE_REF(security_policy->ecc_preferences);
- /* If the security policy's minimum version is higher than what libcrypto supports, return an error. */
- POSIX_ENSURE((security_policy->minimum_protocol_version <= s2n_get_highest_fully_supported_tls_version()), S2N_ERR_PROTOCOL_VERSION_UNSUPPORTED);
- conn->security_policy_override = security_policy;
- return 0;
- }
- int s2n_security_policies_init()
- {
- for (int i = 0; security_policy_selection[i].version != NULL; i++) {
- const struct s2n_security_policy *security_policy = security_policy_selection[i].security_policy;
- POSIX_ENSURE_REF(security_policy);
- const struct s2n_cipher_preferences *cipher_preference = security_policy->cipher_preferences;
- POSIX_ENSURE_REF(cipher_preference);
- const struct s2n_kem_preferences *kem_preference = security_policy->kem_preferences;
- POSIX_ENSURE_REF(kem_preference);
- const struct s2n_ecc_preferences *ecc_preference = security_policy->ecc_preferences;
- POSIX_ENSURE_REF(ecc_preference);
- POSIX_GUARD(s2n_check_ecc_preferences_curves_list(ecc_preference));
- const struct s2n_signature_preferences *certificate_signature_preference = security_policy->certificate_signature_preferences;
- if (certificate_signature_preference != NULL) {
- POSIX_GUARD_RESULT(s2n_validate_certificate_signature_preferences(certificate_signature_preference));
- }
- if (security_policy != &security_policy_null) {
- /* All policies must have at least one ecc curve configured. */
- S2N_ERROR_IF(ecc_preference->count == 0, S2N_ERR_INVALID_SECURITY_POLICY);
- }
- for (int j = 0; j < cipher_preference->count; j++) {
- struct s2n_cipher_suite *cipher = cipher_preference->suites[j];
- POSIX_ENSURE_REF(cipher);
- const uint8_t *iana = cipher->iana_value;
- if (cipher->minimum_required_tls_version >= S2N_TLS13) {
- security_policy_selection[i].supports_tls13 = 1;
- }
- /* Sanity check that valid tls13 has minimum tls version set correctly */
- S2N_ERROR_IF(s2n_is_valid_tls13_cipher(iana) ^ (cipher->minimum_required_tls_version >= S2N_TLS13),
- S2N_ERR_INVALID_SECURITY_POLICY);
- if (s2n_cipher_suite_requires_ecc_extension(cipher)) {
- security_policy_selection[i].ecc_extension_required = 1;
- }
- if (s2n_cipher_suite_requires_pq_extension(cipher) && kem_preference->kem_count > 0) {
- security_policy_selection[i].pq_kem_extension_required = 1;
- }
- }
- POSIX_GUARD(s2n_validate_kem_preferences(kem_preference, security_policy_selection[i].pq_kem_extension_required));
- }
- return 0;
- }
- bool s2n_ecc_is_extension_required(const struct s2n_security_policy *security_policy)
- {
- if (security_policy == NULL) {
- return false;
- }
- for (int i = 0; security_policy_selection[i].version != NULL; i++) {
- if (security_policy_selection[i].security_policy == security_policy) {
- return 1 == security_policy_selection[i].ecc_extension_required;
- }
- }
- /* If cipher preference is not in the official list, compute the result */
- const struct s2n_cipher_preferences *cipher_preferences = security_policy->cipher_preferences;
- if (cipher_preferences == NULL) {
- return false;
- }
- for (uint8_t i = 0; i < cipher_preferences->count; i++) {
- if (s2n_cipher_suite_requires_ecc_extension(cipher_preferences->suites[i])) {
- return true;
- }
- }
- return false;
- }
- bool s2n_pq_kem_is_extension_required(const struct s2n_security_policy *security_policy)
- {
- if (security_policy == NULL) {
- return false;
- }
- for (int i = 0; security_policy_selection[i].version != NULL; i++) {
- if (security_policy_selection[i].security_policy == security_policy) {
- return 1 == security_policy_selection[i].pq_kem_extension_required;
- }
- }
- /* Preferences with no KEMs for the TLS 1.2 PQ KEM extension do not require that extension. */
- if (security_policy->kem_preferences && security_policy->kem_preferences->kem_count == 0) {
- return false;
- }
- /* If cipher preference is not in the official list, compute the result */
- const struct s2n_cipher_preferences *cipher_preferences = security_policy->cipher_preferences;
- if (cipher_preferences == NULL) {
- return false;
- }
- for (uint8_t i = 0; i < cipher_preferences->count; i++) {
- if (s2n_cipher_suite_requires_pq_extension(cipher_preferences->suites[i])) {
- return true;
- }
- }
- return false;
- }
- /* Checks whether cipher preference supports TLS 1.3 based on whether it is configured
- * with TLS 1.3 ciphers. Returns true or false.
- */
- bool s2n_security_policy_supports_tls13(const struct s2n_security_policy *security_policy)
- {
- if (security_policy == NULL) {
- return false;
- }
- for (uint8_t i = 0; security_policy_selection[i].version != NULL; i++) {
- if (security_policy_selection[i].security_policy == security_policy) {
- return security_policy_selection[i].supports_tls13 == 1;
- }
- }
- /* if cipher preference is not in the official list, compute the result */
- const struct s2n_cipher_preferences *cipher_preferences = security_policy->cipher_preferences;
- if (cipher_preferences == NULL) {
- return false;
- }
- for (uint8_t i = 0; i < cipher_preferences->count; i++) {
- if (cipher_preferences->suites[i]->minimum_required_tls_version >= S2N_TLS13) {
- return true;
- }
- }
- return false;
- }
- int s2n_connection_is_valid_for_cipher_preferences(struct s2n_connection *conn, const char *version)
- {
- POSIX_ENSURE_REF(conn);
- POSIX_ENSURE_REF(version);
- POSIX_ENSURE_REF(conn->secure);
- POSIX_ENSURE_REF(conn->secure->cipher_suite);
- const struct s2n_security_policy *security_policy = NULL;
- POSIX_GUARD(s2n_find_security_policy_from_version(version, &security_policy));
- POSIX_ENSURE_REF(security_policy);
- /* make sure we dont use a tls version lower than that configured by the version */
- if (s2n_connection_get_actual_protocol_version(conn) < security_policy->minimum_protocol_version) {
- return 0;
- }
- struct s2n_cipher_suite *cipher = conn->secure->cipher_suite;
- POSIX_ENSURE_REF(cipher);
- for (int i = 0; i < security_policy->cipher_preferences->count; ++i) {
- if (0 == memcmp(security_policy->cipher_preferences->suites[i]->iana_value, cipher->iana_value, S2N_TLS_CIPHER_SUITE_LEN)) {
- return 1;
- }
- }
- return 0;
- }
- int s2n_validate_kem_preferences(const struct s2n_kem_preferences *kem_preferences, bool pq_kem_extension_required)
- {
- POSIX_ENSURE_REF(kem_preferences);
- /* Basic sanity checks to assert that the count is 0 if and only if the associated list is NULL */
- POSIX_ENSURE(S2N_IFF(kem_preferences->tls13_kem_group_count == 0, kem_preferences->tls13_kem_groups == NULL),
- S2N_ERR_INVALID_SECURITY_POLICY);
- POSIX_ENSURE(S2N_IFF(kem_preferences->kem_count == 0, kem_preferences->kems == NULL),
- S2N_ERR_INVALID_SECURITY_POLICY);
- POSIX_ENSURE(kem_preferences->tls13_kem_group_count <= S2N_SUPPORTED_KEM_GROUPS_COUNT, S2N_ERR_ARRAY_INDEX_OOB);
- /* The PQ KEM extension is applicable only to TLS 1.2 */
- if (pq_kem_extension_required) {
- POSIX_ENSURE(kem_preferences->kem_count > 0, S2N_ERR_INVALID_SECURITY_POLICY);
- POSIX_ENSURE(kem_preferences->kems != NULL, S2N_ERR_INVALID_SECURITY_POLICY);
- } else {
- POSIX_ENSURE(kem_preferences->kem_count == 0, S2N_ERR_INVALID_SECURITY_POLICY);
- POSIX_ENSURE(kem_preferences->kems == NULL, S2N_ERR_INVALID_SECURITY_POLICY);
- }
- return S2N_SUCCESS;
- }
- S2N_RESULT s2n_validate_certificate_signature_preferences(const struct s2n_signature_preferences *certificate_signature_preferences)
- {
- RESULT_ENSURE_REF(certificate_signature_preferences);
- size_t rsa_pss_scheme_count = 0;
- for (size_t i = 0; i < certificate_signature_preferences->count; i++) {
- if (certificate_signature_preferences->signature_schemes[i]->libcrypto_nid == NID_rsassaPss) {
- rsa_pss_scheme_count++;
- }
- }
- /*
- * https://github.com/aws/s2n-tls/issues/3435
- *
- * The Openssl function used to parse signatures off certificates does not differentiate between any rsa pss
- * signature schemes. Therefore a security policy with a certificate signatures preference list must include
- * all rsa_pss signature schemes. */
- RESULT_ENSURE(rsa_pss_scheme_count == NUM_RSA_PSS_SCHEMES || rsa_pss_scheme_count == 0, S2N_ERR_INVALID_SECURITY_POLICY);
- return S2N_RESULT_OK;
- }
|