Branch data Line data Source code
1 : : /* 2 : : * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 : : * 4 : : * Licensed under the Apache License, Version 2.0 (the "License"). 5 : : * You may not use this file except in compliance with the License. 6 : : * A copy of the License is located at 7 : : * 8 : : * http://aws.amazon.com/apache2.0 9 : : * 10 : : * or in the "license" file accompanying this file. This file is distributed 11 : : * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 : : * express or implied. See the License for the specific language governing 13 : : * permissions and limitations under the License. 14 : : */ 15 : : 16 : : #include "tls/extensions/s2n_key_share.h" 17 : : 18 : : #include "tls/s2n_tls.h" 19 : : #include "utils/s2n_safety.h" 20 : : 21 : : /* Generate and write an ecc point. 22 : : * This is used to write the ecc portion of PQ hybrid keyshares, which does NOT include the curve id. 23 : : */ 24 : : S2N_RESULT s2n_ecdhe_send_public_key(struct s2n_ecc_evp_params *ecc_evp_params, struct s2n_stuffer *out, bool len_prefixed) 25 : 9603 : { 26 [ - + ][ # # ]: 9603 : RESULT_ENSURE_REF(ecc_evp_params); 27 [ - + ][ # # ]: 9603 : RESULT_ENSURE_REF(ecc_evp_params->negotiated_curve); 28 : : 29 [ + - ]: 9603 : if (len_prefixed) { 30 [ - + ]: 9603 : RESULT_GUARD_POSIX(s2n_stuffer_write_uint16(out, ecc_evp_params->negotiated_curve->share_size)); 31 : 9603 : } 32 : : 33 [ + + ]: 9603 : if (ecc_evp_params->evp_pkey == NULL) { 34 [ + + ]: 9602 : RESULT_GUARD_POSIX(s2n_ecc_evp_generate_ephemeral_key(ecc_evp_params)); 35 : 9602 : } 36 [ + + ]: 9602 : RESULT_GUARD_POSIX(s2n_ecc_evp_write_params_point(ecc_evp_params, out)); 37 : : 38 : 9601 : return S2N_RESULT_OK; 39 : 9602 : } 40 : : 41 : : /* Generate and write an ecc point and its corresponding curve id. 42 : : * This is used to write ecc keyshares for the client and server key_share extensions. 43 : : */ 44 : : int s2n_ecdhe_parameters_send(struct s2n_ecc_evp_params *ecc_evp_params, struct s2n_stuffer *out) 45 : 9603 : { 46 [ - + ][ # # ]: 9603 : POSIX_ENSURE_REF(ecc_evp_params); 47 [ # # ][ - + ]: 9603 : POSIX_ENSURE_REF(ecc_evp_params->negotiated_curve); 48 : : 49 [ - + ]: 9603 : POSIX_GUARD(s2n_stuffer_write_uint16(out, ecc_evp_params->negotiated_curve->iana_id)); 50 [ + + ]: 9603 : POSIX_GUARD_RESULT(s2n_ecdhe_send_public_key(ecc_evp_params, out, true)); 51 : : 52 : 9601 : return S2N_SUCCESS; 53 : 9603 : }