Skip to content

适用虚谷数据库版本

v12.10.8



适用虚谷数据库版本

v12.10.8


SM2_VERIFY

📄字数 1.6K
👁️阅读量 加载中...

功能描述

使用 SM2 公钥进行验签。

版本支持

在OpenSSL 1.1.1版本及以上、Tongsuo任意版本支持。

语法格式

sql
SM2_VERIFY(expr1, expr2, expr3)
SM2_VERIFY(expr1, expr2, expr3, expr4)

输入参数

  • 格式1
    • expr1:SM2 公钥数据,必须为64字节,BINARY 类型或者能隐式转换为 BINARY 类型的其他类型的值。
    • expr2:SM2 预处理 2 结果数据 H 值,必须为32字节,BINARY 类型或者能隐式转换为 BINARY 类型的其他类型的值。
    • expr3:签名数据,必须为64字节,BINARY 类型或者能隐式转换为 BINARY 类型的其他类型的值。
  • 格式2
    • expr1:SM2 公钥数据,必须为64字节,BINARY 类型或者能隐式转换为 BINARY 类型的其他类型的值。
    • expr2:用户身份标识,BINARY 类型或者能隐式转换为 BINARY 类型的其他类型的值,可以为 NULL,代表使用默认值。
    • expr3:明文数据,BINARY 类型或者能隐式转换为 BINARY 类型的其他类型的值。
    • expr4:签名数据,BINARY 类型或者能隐式转换为 BINARY 类型的其他类型的值。

输出结果

验签是否通过,BOOL 类型,true 代表验签通过,false 代表验签不通过。

执行类型

TYPEVALUE说明
NATIVE1函数只能在本地计算
VOLATI0函数的每次计算值不同
STABLE1函数的每次计算值相同
COMPUTE0函数支持预计算取值
NOT_CONST0函数不支持转常数
HAVE_DEF0函数参数有默认值

示例

sql
SQL> DECLARE
         key raw;
         pubkey raw;
         prikey raw;
         src VARCHAR := '48656C6C6F';
         sm2_z raw;
         sm2_h raw;
         sign_data raw;
         verify_result boolean := false;
     BEGIN
         select sm2_key_gen() into key;
         select substring(key, 1, 64) into prikey;
         select substring(key, 65) into pubkey;
         select sm2_z_digest(pubkey, null) into sm2_z;
         select sm2_h_digest(sm2_z, src) into sm2_h;
         select sm2_sign(prikey, pubkey, null, src) into sign_data;
         select sm2_verify(pubkey, sm2_h, sign_data) into verify_result;
         dbms_output.put_line('verify_result: ' || CASE WHEN verify_result THEN 'TRUE' ELSE 'FALSE' END);
     END;
     /
verify_result: TRUE

Execute successful.
Use time:8 ms.

SQL> DECLARE
         key raw;
         pubkey raw;
         prikey raw;
         src VARCHAR := '48656C6C6F';
         sm2_z raw;
         sm2_h raw;
         sign_data raw;
         verify_result boolean := false;
     BEGIN
         select sm2_key_gen() into key;
         select substring(key, 1, 64) into prikey;
         select substring(key, 65) into pubkey;
         select sm2_z_digest(pubkey, null) into sm2_z;
         select sm2_h_digest(sm2_z, src) into sm2_h;
         select sm2_sign(prikey, pubkey, null, src) into sign_data;
         select sm2_verify(pubkey, null, src, sign_data) into verify_result;
         dbms_output.put_line('verify_result: ' || CASE WHEN verify_result THEN 'TRUE' ELSE 'FALSE' END);
     END;
     /
verify_result: TRUE

Execute successful.
Use time:8 ms.