@@ -483,16 +483,28 @@ static VALUE ossl_ec_key_check_key(VALUE self)
483483#ifdef HAVE_EVP_PKEY_CHECK
484484 EVP_PKEY * pkey ;
485485 EVP_PKEY_CTX * pctx ;
486- int ret ;
486+ EC_KEY * ec ;
487487
488488 GetPKey (self , pkey );
489+ GetEC (self , ec );
489490 pctx = EVP_PKEY_CTX_new (pkey , /* engine */ NULL );
490491 if (!pctx )
491- ossl_raise (eDHError , "EVP_PKEY_CTX_new" );
492- ret = EVP_PKEY_public_check (pctx );
492+ ossl_raise (eECError , "EVP_PKEY_CTX_new" );
493+
494+ if (EC_KEY_get0_private_key (ec ) != NULL ) {
495+ if (EVP_PKEY_check (pctx ) != 1 ) {
496+ EVP_PKEY_CTX_free (pctx );
497+ ossl_raise (eECError , "EVP_PKEY_check" );
498+ }
499+ }
500+ else {
501+ if (EVP_PKEY_public_check (pctx ) != 1 ) {
502+ EVP_PKEY_CTX_free (pctx );
503+ ossl_raise (eECError , "EVP_PKEY_public_check" );
504+ }
505+ }
506+
493507 EVP_PKEY_CTX_free (pctx );
494- if (ret != 1 )
495- ossl_raise (eECError , "EVP_PKEY_public_check" );
496508#else
497509 EC_KEY * ec ;
498510
@@ -668,10 +680,11 @@ static VALUE ossl_ec_group_eql(VALUE a, VALUE b)
668680 GetECGroup (a , group1 );
669681 GetECGroup (b , group2 );
670682
671- if (EC_GROUP_cmp (group1 , group2 , ossl_bn_ctx ) == 1 )
672- return Qfalse ;
673-
674- return Qtrue ;
683+ switch (EC_GROUP_cmp (group1 , group2 , ossl_bn_ctx )) {
684+ case 0 : return Qtrue ;
685+ case 1 : return Qfalse ;
686+ default : ossl_raise (eEC_GROUP , "EC_GROUP_cmp" );
687+ }
675688}
676689
677690/*
@@ -1232,10 +1245,13 @@ static VALUE ossl_ec_point_eql(VALUE a, VALUE b)
12321245 GetECPoint (b , point2 );
12331246 GetECGroup (group_v1 , group );
12341247
1235- if (EC_POINT_cmp (group , point1 , point2 , ossl_bn_ctx ) == 1 )
1236- return Qfalse ;
1248+ switch (EC_POINT_cmp (group , point1 , point2 , ossl_bn_ctx )) {
1249+ case 0 : return Qtrue ;
1250+ case 1 : return Qfalse ;
1251+ default : ossl_raise (eEC_POINT , "EC_POINT_cmp" );
1252+ }
12371253
1238- return Qtrue ;
1254+ UNREACHABLE ;
12391255}
12401256
12411257/*
@@ -1253,7 +1269,7 @@ static VALUE ossl_ec_point_is_at_infinity(VALUE self)
12531269 switch (EC_POINT_is_at_infinity (group , point )) {
12541270 case 1 : return Qtrue ;
12551271 case 0 : return Qfalse ;
1256- default : ossl_raise (cEC_POINT , "EC_POINT_is_at_infinity" );
1272+ default : ossl_raise (eEC_POINT , "EC_POINT_is_at_infinity" );
12571273 }
12581274
12591275 UNREACHABLE ;
@@ -1274,7 +1290,7 @@ static VALUE ossl_ec_point_is_on_curve(VALUE self)
12741290 switch (EC_POINT_is_on_curve (group , point , ossl_bn_ctx )) {
12751291 case 1 : return Qtrue ;
12761292 case 0 : return Qfalse ;
1277- default : ossl_raise (cEC_POINT , "EC_POINT_is_on_curve" );
1293+ default : ossl_raise (eEC_POINT , "EC_POINT_is_on_curve" );
12781294 }
12791295
12801296 UNREACHABLE ;
@@ -1297,7 +1313,7 @@ static VALUE ossl_ec_point_make_affine(VALUE self)
12971313 rb_warn ("OpenSSL::PKey::EC::Point#make_affine! is deprecated" );
12981314#if !OSSL_OPENSSL_PREREQ (3 , 0 , 0 )
12991315 if (EC_POINT_make_affine (group , point , ossl_bn_ctx ) != 1 )
1300- ossl_raise (cEC_POINT , "EC_POINT_make_affine" );
1316+ ossl_raise (eEC_POINT , "EC_POINT_make_affine" );
13011317#endif
13021318
13031319 return self ;
@@ -1316,7 +1332,7 @@ static VALUE ossl_ec_point_invert(VALUE self)
13161332 GetECPointGroup (self , group );
13171333
13181334 if (EC_POINT_invert (group , point , ossl_bn_ctx ) != 1 )
1319- ossl_raise (cEC_POINT , "EC_POINT_invert" );
1335+ ossl_raise (eEC_POINT , "EC_POINT_invert" );
13201336
13211337 return self ;
13221338}
@@ -1334,7 +1350,7 @@ static VALUE ossl_ec_point_set_to_infinity(VALUE self)
13341350 GetECPointGroup (self , group );
13351351
13361352 if (EC_POINT_set_to_infinity (group , point ) != 1 )
1337- ossl_raise (cEC_POINT , "EC_POINT_set_to_infinity" );
1353+ ossl_raise (eEC_POINT , "EC_POINT_set_to_infinity" );
13381354
13391355 return self ;
13401356}
0 commit comments