Loading CHANGES +16 −8 Original line number Original line Diff line number Diff line Loading @@ -4,12 +4,20 @@ Changes between 0.9.7 and 0.9.8 [xx XXX 2002] Changes between 0.9.7 and 0.9.8 [xx XXX 2002] *) Add 'nid' and 'asn1_flag' members to EC_GROUP, and functions *) Add 'asn1_flag' and 'asn1_form' member to EC_GROUP with access EC_GROUP_get_nid() functions EC_GROUP_get_set_asn1_flag() EC_GROUP_set_asn1_flag() EC_GROUP_get_get_asn1_flag() EC_GROUP_get_asn1_flag() 'nid' is an optional NID for named curves. 'asn1_flag' EC_GROUP_set_point_conversion_form() determines the encoding to be used for ASN1 purposes. EC_GROUP_get_point_conversion_form() These control ASN1 encoding details: - Curve are encoded explicitly unless asn1_flag has been set to OPENSSL_EC_NAMED_CURVE. - Points are encoded in compressed form by default; options for asn1_for are as for point2oct, namely POINT_CONVERSION_COMPRESSED POINT_CONVERSION_UNCOMPRESSED POINT_CONVERSION_HYBRID [Nils Larsch <nla@trustcenter.de>] [Nils Larsch <nla@trustcenter.de>] *) Add 'field_type' member to EC_METHOD, which holds the NID *) Add 'field_type' member to EC_METHOD, which holds the NID Loading Loading @@ -69,8 +77,8 @@ functions functions EC_GROUP_new_by_nid() EC_GROUP_new_by_nid() EC_GROUP_new_by_name() EC_GROUP_new_by_name() Also add a 'nid' field to EC_GROUP objects, which can be accessed Also add a 'curve_name' member to EC_GROUP objects, which can be via accessed via EC_GROUP_set_nid() EC_GROUP_set_nid() EC_GROUP_get_nid() EC_GROUP_get_nid() [Nils Larsch <nla@trustcenter.de, Bodo Moeller] [Nils Larsch <nla@trustcenter.de, Bodo Moeller] Loading apps/ecdsaparam.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -432,8 +432,7 @@ bad: ecdsa->group = EC_GROUP_new_by_name(curve_type); ecdsa->group = EC_GROUP_new_by_name(curve_type); if (named_curve) if (named_curve) EC_GROUP_set_asn1_flag(ecdsa->group, EC_GROUP_set_asn1_flag(ecdsa->group, OPENSSL_EC_NAMED_CURVE | OPENSSL_EC_NAMED_CURVE); (EC_GROUP_get_asn1_flag(ecdsa->group) & ~0x3)); } } else if (informat == FORMAT_ASN1) else if (informat == FORMAT_ASN1) ecdsa = d2i_ECDSAParameters_bio(in,NULL); ecdsa = d2i_ECDSAParameters_bio(in,NULL); Loading crypto/asn1/x_pubkey.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -145,7 +145,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) goto err; goto err; } } if ((EC_GROUP_get_asn1_flag(ecdsa->group) & OPENSSL_EC_NAMED_CURVE) if (EC_GROUP_get_asn1_flag(ecdsa->group) && (nid = EC_GROUP_get_nid(ecdsa->group))) && (nid = EC_GROUP_get_nid(ecdsa->group))) { { /* just set the OID */ /* just set the OID */ Loading Loading @@ -312,8 +312,8 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) if ((ecdsa->group = EC_GROUP_new_by_name( if ((ecdsa->group = EC_GROUP_new_by_name( OBJ_obj2nid(a->parameter->value.object))) == NULL) OBJ_obj2nid(a->parameter->value.object))) == NULL) goto err; goto err; EC_GROUP_set_asn1_flag(ecdsa->group, OPENSSL_EC_NAMED_CURVE | EC_GROUP_set_asn1_flag(ecdsa->group, (EC_GROUP_get_asn1_flag(ecdsa->group) & ~0x03)); OPENSSL_EC_NAMED_CURVE); } } /* the case implicitlyCA is currently not implemented */ /* the case implicitlyCA is currently not implemented */ ret->save_parameters = 1; ret->save_parameters = 1; Loading crypto/ec/ec.h +4 −5 Original line number Original line Diff line number Diff line Loading @@ -229,11 +229,7 @@ int EC_GROUP_precompute_mult(EC_GROUP *, BN_CTX *); /* ASN1 stuff */ /* ASN1 stuff */ #define OPENSSL_EC_EXPLICIT 0x001 #define OPENSSL_EC_NAMED_CURVE 0x001 #define OPENSSL_EC_NAMED_CURVE 0x002 #define OPENSSL_EC_COMPRESSED 0x010 #define OPENSSL_EC_UNCOMPRESSED 0x020 #define OPENSSL_EC_HYBRID 0x040 typedef struct ec_parameters_st ECPARAMETERS; typedef struct ec_parameters_st ECPARAMETERS; typedef struct ecpk_parameters_st ECPKPARAMETERS; typedef struct ecpk_parameters_st ECPKPARAMETERS; Loading @@ -249,6 +245,9 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *, ECPKPARAMETERS *); void EC_GROUP_set_asn1_flag(EC_GROUP *, int flag); void EC_GROUP_set_asn1_flag(EC_GROUP *, int flag); int EC_GROUP_get_asn1_flag(const EC_GROUP *); int EC_GROUP_get_asn1_flag(const EC_GROUP *); void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); EC_GROUP *d2i_ECParameters(EC_GROUP **, const unsigned char **in, long len); EC_GROUP *d2i_ECParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECParameters(const EC_GROUP *, unsigned char **out); int i2d_ECParameters(const EC_GROUP *, unsigned char **out); Loading crypto/ec/ec_asn1.c +6 −22 Original line number Original line Diff line number Diff line Loading @@ -394,7 +394,7 @@ err : if (!ok) static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group, static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group, ECPARAMETERS *param) ECPARAMETERS *param) { { int ok=0, i; int ok=0; size_t len=0; size_t len=0; ECPARAMETERS *ret=NULL; ECPARAMETERS *ret=NULL; BIGNUM *tmp=NULL; BIGNUM *tmp=NULL; Loading Loading @@ -455,15 +455,7 @@ static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group, goto err; goto err; } } i = EC_GROUP_get_asn1_flag(group); form = EC_GROUP_get_point_conversion_form(group); if (i | OPENSSL_EC_COMPRESSED) form = POINT_CONVERSION_COMPRESSED; else if (i | OPENSSL_EC_UNCOMPRESSED) form = POINT_CONVERSION_UNCOMPRESSED; else if (i | OPENSSL_EC_HYBRID) form = POINT_CONVERSION_HYBRID; else goto err; len = EC_POINT_point2oct(group, point, form, NULL, len, NULL); len = EC_POINT_point2oct(group, point, form, NULL, len, NULL); if (len == 0) if (len == 0) Loading Loading @@ -556,9 +548,7 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *group, ECPARAMETERS_free(ret->value.parameters); ECPARAMETERS_free(ret->value.parameters); } } tmp = EC_GROUP_get_asn1_flag(group); if (EC_GROUP_get_asn1_flag(group)) if (tmp & OPENSSL_EC_NAMED_CURVE) { { /* use the asn1 OID to describe the /* use the asn1 OID to describe the * the elliptic curve parameters * the elliptic curve parameters Loading @@ -581,7 +571,7 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *group, ok = 0; ok = 0; } } } } else if (tmp & OPENSSL_EC_EXPLICIT) else { { /* use the ECPARAMETERS structure */ /* use the ECPARAMETERS structure */ ret->type = 1; ret->type = 1; Loading @@ -589,8 +579,6 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *group, group, NULL)) == NULL) group, NULL)) == NULL) ok = 0; ok = 0; } } else ok = 0; if (!ok) if (!ok) { { Loading Loading @@ -759,9 +747,7 @@ EC_GROUP *EC_ASN1_pkparameters2group(const ECPKPARAMETERS *params) EC_R_EC_GROUP_NEW_BY_NAME_FAILURE); EC_R_EC_GROUP_NEW_BY_NAME_FAILURE); return NULL; return NULL; } } tmp = EC_GROUP_get_asn1_flag(ret); EC_GROUP_set_asn1_flag(ret, OPENSSL_EC_NAMED_CURVE); tmp = (tmp & ~0x03) | OPENSSL_EC_NAMED_CURVE; EC_GROUP_set_asn1_flag(ret, tmp); } } else if (params->type == 1) else if (params->type == 1) { /* the parameters are given by a ECPARAMETERS { /* the parameters are given by a ECPARAMETERS Loading @@ -772,9 +758,7 @@ EC_GROUP *EC_ASN1_pkparameters2group(const ECPKPARAMETERS *params) ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP, ERR_R_EC_LIB); ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP, ERR_R_EC_LIB); return NULL; return NULL; } } tmp = EC_GROUP_get_asn1_flag(ret); EC_GROUP_set_asn1_flag(ret, 0x0); tmp = (tmp & ~0x03) | OPENSSL_EC_EXPLICIT; EC_GROUP_set_asn1_flag(ret, tmp); } } else if (params->type == 2) else if (params->type == 2) { /* implicitlyCA */ { /* implicitlyCA */ Loading Loading
CHANGES +16 −8 Original line number Original line Diff line number Diff line Loading @@ -4,12 +4,20 @@ Changes between 0.9.7 and 0.9.8 [xx XXX 2002] Changes between 0.9.7 and 0.9.8 [xx XXX 2002] *) Add 'nid' and 'asn1_flag' members to EC_GROUP, and functions *) Add 'asn1_flag' and 'asn1_form' member to EC_GROUP with access EC_GROUP_get_nid() functions EC_GROUP_get_set_asn1_flag() EC_GROUP_set_asn1_flag() EC_GROUP_get_get_asn1_flag() EC_GROUP_get_asn1_flag() 'nid' is an optional NID for named curves. 'asn1_flag' EC_GROUP_set_point_conversion_form() determines the encoding to be used for ASN1 purposes. EC_GROUP_get_point_conversion_form() These control ASN1 encoding details: - Curve are encoded explicitly unless asn1_flag has been set to OPENSSL_EC_NAMED_CURVE. - Points are encoded in compressed form by default; options for asn1_for are as for point2oct, namely POINT_CONVERSION_COMPRESSED POINT_CONVERSION_UNCOMPRESSED POINT_CONVERSION_HYBRID [Nils Larsch <nla@trustcenter.de>] [Nils Larsch <nla@trustcenter.de>] *) Add 'field_type' member to EC_METHOD, which holds the NID *) Add 'field_type' member to EC_METHOD, which holds the NID Loading Loading @@ -69,8 +77,8 @@ functions functions EC_GROUP_new_by_nid() EC_GROUP_new_by_nid() EC_GROUP_new_by_name() EC_GROUP_new_by_name() Also add a 'nid' field to EC_GROUP objects, which can be accessed Also add a 'curve_name' member to EC_GROUP objects, which can be via accessed via EC_GROUP_set_nid() EC_GROUP_set_nid() EC_GROUP_get_nid() EC_GROUP_get_nid() [Nils Larsch <nla@trustcenter.de, Bodo Moeller] [Nils Larsch <nla@trustcenter.de, Bodo Moeller] Loading
apps/ecdsaparam.c +1 −2 Original line number Original line Diff line number Diff line Loading @@ -432,8 +432,7 @@ bad: ecdsa->group = EC_GROUP_new_by_name(curve_type); ecdsa->group = EC_GROUP_new_by_name(curve_type); if (named_curve) if (named_curve) EC_GROUP_set_asn1_flag(ecdsa->group, EC_GROUP_set_asn1_flag(ecdsa->group, OPENSSL_EC_NAMED_CURVE | OPENSSL_EC_NAMED_CURVE); (EC_GROUP_get_asn1_flag(ecdsa->group) & ~0x3)); } } else if (informat == FORMAT_ASN1) else if (informat == FORMAT_ASN1) ecdsa = d2i_ECDSAParameters_bio(in,NULL); ecdsa = d2i_ECDSAParameters_bio(in,NULL); Loading
crypto/asn1/x_pubkey.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -145,7 +145,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) goto err; goto err; } } if ((EC_GROUP_get_asn1_flag(ecdsa->group) & OPENSSL_EC_NAMED_CURVE) if (EC_GROUP_get_asn1_flag(ecdsa->group) && (nid = EC_GROUP_get_nid(ecdsa->group))) && (nid = EC_GROUP_get_nid(ecdsa->group))) { { /* just set the OID */ /* just set the OID */ Loading Loading @@ -312,8 +312,8 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) if ((ecdsa->group = EC_GROUP_new_by_name( if ((ecdsa->group = EC_GROUP_new_by_name( OBJ_obj2nid(a->parameter->value.object))) == NULL) OBJ_obj2nid(a->parameter->value.object))) == NULL) goto err; goto err; EC_GROUP_set_asn1_flag(ecdsa->group, OPENSSL_EC_NAMED_CURVE | EC_GROUP_set_asn1_flag(ecdsa->group, (EC_GROUP_get_asn1_flag(ecdsa->group) & ~0x03)); OPENSSL_EC_NAMED_CURVE); } } /* the case implicitlyCA is currently not implemented */ /* the case implicitlyCA is currently not implemented */ ret->save_parameters = 1; ret->save_parameters = 1; Loading
crypto/ec/ec.h +4 −5 Original line number Original line Diff line number Diff line Loading @@ -229,11 +229,7 @@ int EC_GROUP_precompute_mult(EC_GROUP *, BN_CTX *); /* ASN1 stuff */ /* ASN1 stuff */ #define OPENSSL_EC_EXPLICIT 0x001 #define OPENSSL_EC_NAMED_CURVE 0x001 #define OPENSSL_EC_NAMED_CURVE 0x002 #define OPENSSL_EC_COMPRESSED 0x010 #define OPENSSL_EC_UNCOMPRESSED 0x020 #define OPENSSL_EC_HYBRID 0x040 typedef struct ec_parameters_st ECPARAMETERS; typedef struct ec_parameters_st ECPARAMETERS; typedef struct ecpk_parameters_st ECPKPARAMETERS; typedef struct ecpk_parameters_st ECPKPARAMETERS; Loading @@ -249,6 +245,9 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *, ECPKPARAMETERS *); void EC_GROUP_set_asn1_flag(EC_GROUP *, int flag); void EC_GROUP_set_asn1_flag(EC_GROUP *, int flag); int EC_GROUP_get_asn1_flag(const EC_GROUP *); int EC_GROUP_get_asn1_flag(const EC_GROUP *); void EC_GROUP_set_point_conversion_form(EC_GROUP *, point_conversion_form_t); point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); EC_GROUP *d2i_ECParameters(EC_GROUP **, const unsigned char **in, long len); EC_GROUP *d2i_ECParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECParameters(const EC_GROUP *, unsigned char **out); int i2d_ECParameters(const EC_GROUP *, unsigned char **out); Loading
crypto/ec/ec_asn1.c +6 −22 Original line number Original line Diff line number Diff line Loading @@ -394,7 +394,7 @@ err : if (!ok) static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group, static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group, ECPARAMETERS *param) ECPARAMETERS *param) { { int ok=0, i; int ok=0; size_t len=0; size_t len=0; ECPARAMETERS *ret=NULL; ECPARAMETERS *ret=NULL; BIGNUM *tmp=NULL; BIGNUM *tmp=NULL; Loading Loading @@ -455,15 +455,7 @@ static ECPARAMETERS *ec_asn1_group2parameters(const EC_GROUP *group, goto err; goto err; } } i = EC_GROUP_get_asn1_flag(group); form = EC_GROUP_get_point_conversion_form(group); if (i | OPENSSL_EC_COMPRESSED) form = POINT_CONVERSION_COMPRESSED; else if (i | OPENSSL_EC_UNCOMPRESSED) form = POINT_CONVERSION_UNCOMPRESSED; else if (i | OPENSSL_EC_HYBRID) form = POINT_CONVERSION_HYBRID; else goto err; len = EC_POINT_point2oct(group, point, form, NULL, len, NULL); len = EC_POINT_point2oct(group, point, form, NULL, len, NULL); if (len == 0) if (len == 0) Loading Loading @@ -556,9 +548,7 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *group, ECPARAMETERS_free(ret->value.parameters); ECPARAMETERS_free(ret->value.parameters); } } tmp = EC_GROUP_get_asn1_flag(group); if (EC_GROUP_get_asn1_flag(group)) if (tmp & OPENSSL_EC_NAMED_CURVE) { { /* use the asn1 OID to describe the /* use the asn1 OID to describe the * the elliptic curve parameters * the elliptic curve parameters Loading @@ -581,7 +571,7 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *group, ok = 0; ok = 0; } } } } else if (tmp & OPENSSL_EC_EXPLICIT) else { { /* use the ECPARAMETERS structure */ /* use the ECPARAMETERS structure */ ret->type = 1; ret->type = 1; Loading @@ -589,8 +579,6 @@ ECPKPARAMETERS *EC_ASN1_group2pkparameters(const EC_GROUP *group, group, NULL)) == NULL) group, NULL)) == NULL) ok = 0; ok = 0; } } else ok = 0; if (!ok) if (!ok) { { Loading Loading @@ -759,9 +747,7 @@ EC_GROUP *EC_ASN1_pkparameters2group(const ECPKPARAMETERS *params) EC_R_EC_GROUP_NEW_BY_NAME_FAILURE); EC_R_EC_GROUP_NEW_BY_NAME_FAILURE); return NULL; return NULL; } } tmp = EC_GROUP_get_asn1_flag(ret); EC_GROUP_set_asn1_flag(ret, OPENSSL_EC_NAMED_CURVE); tmp = (tmp & ~0x03) | OPENSSL_EC_NAMED_CURVE; EC_GROUP_set_asn1_flag(ret, tmp); } } else if (params->type == 1) else if (params->type == 1) { /* the parameters are given by a ECPARAMETERS { /* the parameters are given by a ECPARAMETERS Loading @@ -772,9 +758,7 @@ EC_GROUP *EC_ASN1_pkparameters2group(const ECPKPARAMETERS *params) ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP, ERR_R_EC_LIB); ECerr(EC_F_EC_ASN1_PKPARAMETERS2GROUP, ERR_R_EC_LIB); return NULL; return NULL; } } tmp = EC_GROUP_get_asn1_flag(ret); EC_GROUP_set_asn1_flag(ret, 0x0); tmp = (tmp & ~0x03) | OPENSSL_EC_EXPLICIT; EC_GROUP_set_asn1_flag(ret, tmp); } } else if (params->type == 2) else if (params->type == 2) { /* implicitlyCA */ { /* implicitlyCA */ Loading