OPENSSL_KEYTYPE_EC, "curve_name" => "sm2p256v1")); openssl_pkey_export($prikey, $prikeypem); echo $prikeypem; $pubkeypem = openssl_pkey_get_details($prikey)["key"]; echo $pubkeypem; $pubkey = openssl_pkey_get_public($pubkeypem); $point = openssl_pkey_get_details($pubkey)["ec"]; printf("SM2 Public Key: (%s, %s)\n", bin2hex($point["x"]), bin2hex($point["y"])); $ec = openssl_pkey_get_details($prikey)["ec"]; printf("SM2 Private Key: %s\n", bin2hex($ec["d"])); openssl_sign($msg, $signature, $prikey, "sm3"); $ok = openssl_verify($msg, $signature, $pubkey, OPENSSL_ALGO_SM3); printf("sm2sign(\"%s\") = %s\n", $msg, bin2hex($signature)); printf("sm2verify(\"%s\", %s) = %s\n", $msg, bin2hex($signature), $ok ? "OK" : "Failure"); openssl_seal($plaintext, $sealed, $ekeys, array($pubkey), "sms4", $iv); openssl_open($sealed, $opened, $ekeys[0], $prikey, "sms4", $iv); printf("sm2seal(\"%s\") = %s\n", $plaintext, bin2hex($sealed)); printf("sm2open(%s) = \"%s\"\n", bin2hex($sealed), $opened); ?>