Loading ssl/t1_lib.c +12 −24 Original line number Original line Diff line number Diff line Loading @@ -221,6 +221,7 @@ typedef struct { unsigned int flags; /* Flags: currently just field type */ unsigned int flags; /* Flags: currently just field type */ } tls_curve_info; } tls_curve_info; # define TLS_CURVE_TYPE 0x1 # define TLS_CURVE_CHAR2 0x1 # define TLS_CURVE_CHAR2 0x1 # define TLS_CURVE_PRIME 0x0 # define TLS_CURVE_PRIME 0x0 Loading Loading @@ -617,46 +618,33 @@ int tls1_set_curves_list(unsigned char **pext, size_t *pextlen, static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id, static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id, EC_KEY *ec) EC_KEY *ec) { { int is_prime, id; int id; const EC_GROUP *grp; const EC_GROUP *grp; const EC_METHOD *meth; if (!ec) if (!ec) return 0; return 0; /* Determine if it is a prime field */ /* Determine if it is a prime field */ grp = EC_KEY_get0_group(ec); grp = EC_KEY_get0_group(ec); if (!grp) if (!grp) return 0; return 0; meth = EC_GROUP_method_of(grp); if (!meth) return 0; if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field) is_prime = 1; else is_prime = 0; /* Determine curve ID */ /* Determine curve ID */ id = EC_GROUP_get_curve_name(grp); id = EC_GROUP_get_curve_name(grp); id = tls1_ec_nid2curve_id(id); id = tls1_ec_nid2curve_id(id); /* If we have an ID set it, otherwise set arbitrary explicit curve */ /* If no id return error: we don't support arbitrary explicit curves */ if (id) { if (id == 0) return 0; curve_id[0] = 0; curve_id[0] = 0; curve_id[1] = (unsigned char)id; curve_id[1] = (unsigned char)id; } else { curve_id[0] = 0xff; if (is_prime) curve_id[1] = 0x01; else curve_id[1] = 0x02; } if (comp_id) { if (comp_id) { if (EC_KEY_get0_public_key(ec) == NULL) if (EC_KEY_get0_public_key(ec) == NULL) return 0; return 0; if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) { if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_UNCOMPRESSED) { if (is_prime) *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed; } else { if ((nid_list[id - 1].flags & TLS_CURVE_TYPE) == TLS_CURVE_PRIME) *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime; *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime; else else *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2; *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2; } else } *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed; } } return 1; return 1; } } Loading Loading
ssl/t1_lib.c +12 −24 Original line number Original line Diff line number Diff line Loading @@ -221,6 +221,7 @@ typedef struct { unsigned int flags; /* Flags: currently just field type */ unsigned int flags; /* Flags: currently just field type */ } tls_curve_info; } tls_curve_info; # define TLS_CURVE_TYPE 0x1 # define TLS_CURVE_CHAR2 0x1 # define TLS_CURVE_CHAR2 0x1 # define TLS_CURVE_PRIME 0x0 # define TLS_CURVE_PRIME 0x0 Loading Loading @@ -617,46 +618,33 @@ int tls1_set_curves_list(unsigned char **pext, size_t *pextlen, static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id, static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id, EC_KEY *ec) EC_KEY *ec) { { int is_prime, id; int id; const EC_GROUP *grp; const EC_GROUP *grp; const EC_METHOD *meth; if (!ec) if (!ec) return 0; return 0; /* Determine if it is a prime field */ /* Determine if it is a prime field */ grp = EC_KEY_get0_group(ec); grp = EC_KEY_get0_group(ec); if (!grp) if (!grp) return 0; return 0; meth = EC_GROUP_method_of(grp); if (!meth) return 0; if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field) is_prime = 1; else is_prime = 0; /* Determine curve ID */ /* Determine curve ID */ id = EC_GROUP_get_curve_name(grp); id = EC_GROUP_get_curve_name(grp); id = tls1_ec_nid2curve_id(id); id = tls1_ec_nid2curve_id(id); /* If we have an ID set it, otherwise set arbitrary explicit curve */ /* If no id return error: we don't support arbitrary explicit curves */ if (id) { if (id == 0) return 0; curve_id[0] = 0; curve_id[0] = 0; curve_id[1] = (unsigned char)id; curve_id[1] = (unsigned char)id; } else { curve_id[0] = 0xff; if (is_prime) curve_id[1] = 0x01; else curve_id[1] = 0x02; } if (comp_id) { if (comp_id) { if (EC_KEY_get0_public_key(ec) == NULL) if (EC_KEY_get0_public_key(ec) == NULL) return 0; return 0; if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) { if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_UNCOMPRESSED) { if (is_prime) *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed; } else { if ((nid_list[id - 1].flags & TLS_CURVE_TYPE) == TLS_CURVE_PRIME) *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime; *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime; else else *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2; *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2; } else } *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed; } } return 1; return 1; } } Loading