gmkitx API - v0.10.1
    正在准备搜索索引...

    类 SM2

    SM2 类,提供面向对象的 API

    SM2 是中国国家密码管理局发布的椭圆曲线密码算法, 支持公钥加密、数字签名和密钥交换功能。

    // 生成密钥对
    const sm2 = SM2.generateKeyPair();

    // 加密/解密
    const message = 'order=GMKIT-DEMO-0001&amount=88.00';
    const encrypted = sm2.encrypt(message);
    const decrypted = sm2.decrypt(encrypted);

    // 签名/验签
    const signature = sm2.sign(message, { userId: 'merchant@gmkit.cn' });
    const isValid = sm2.verify(message, signature, { userId: 'merchant@gmkit.cn' });
    索引
    • 解密数据

      参数

      • encryptedData: BytesLike

        加密的数据(十六进制字符串或 Uint8Array)

      • 可选options: SM2DecryptOptions

        解密选项(密文模式、输入格式等)

      返回 string

      解密后的数据(字符串)

      私钥缺失,或密文格式、曲线点、C3 校验无效时抛出错误

    • 解密任意二进制明文,不经过 UTF-8 解码。

      参数

      • encryptedData: BytesLike

        Hex/Base64 密文字符串或原始密文字节

      • 可选options: SM2DecryptOptions

        密文排列与字符串输入编码;省略时按函数入口的默认规则处理

      返回 Uint8Array

      通过 C3 完整性校验的原始明文字节

      私钥缺失,或密文格式、曲线点、C3 校验无效时抛出错误

    • 加密数据

      参数

      • data: string | Uint8Array<ArrayBufferLike>

        要加密的数据(字符串或 Uint8Array)

      • 可选options: SM2EncryptOptions

        加密选项(密文模式、输出格式等)

      返回 string

      加密后的数据(默认十六进制字符串)

      公钥、明文、随机源或选项无效时抛出错误

    • 获取私钥

      返回 string

      私钥(十六进制字符串,32 字节)

      如果私钥未设置则抛出异常

    • 获取公钥

      返回 string

      公钥(十六进制字符串,04 开头的非压缩格式)

      如果公钥未设置则抛出异常

    • 执行 SM2 密钥交换协议

      参数

      • peerPublicKey: string

        对方公钥(十六进制字符串)

      • peerTempPublicKey: string

        对方临时公钥(十六进制字符串)

      • isInitiator: boolean

        是否为发起方

      • 可选options: {
            keyLength?: number;
            peerUserId?: string;
            tempPrivateKey?: string;
            userId?: string;
        }

        可选参数

      返回 SM2KeyExchangeResult

      密钥交换结果

      任一密钥、身份、角色或派生长度无效,或确认标签不匹配时抛出错误

      const sm2A = SM2.generateKeyPair();
      const sm2B = SM2.generateKeyPair();
      const tempA = SM2.generateKeyPair();
      const tempB = SM2.generateKeyPair();

      const resultA = sm2A.keyExchange(sm2B.getPublicKey(), tempB.getPublicKey(), true, {
      tempPrivateKey: tempA.getPrivateKey()
      });
      const resultB = sm2B.keyExchange(sm2A.getPublicKey(), tempA.getPublicKey(), false, {
      tempPrivateKey: tempB.getPrivateKey()
      });

      if (resultA.sharedKey !== resultB.sharedKey) {
      throw new Error('SM2 密钥交换结果不一致');
      }
    • 设置标准曲线参数兼容声明。传入不同于标准 SM2 曲线的值后,签名或验签会拒绝执行。

      参数

      返回 void

    • 签名数据

      参数

      • data: string | Uint8Array<ArrayBufferLike>

        要签名的数据(字符串或 Uint8Array)

      • 可选options: Omit<SignOptions, "curveParams">

        签名选项(签名格式、用户 ID 等)

      返回 string

      签名(默认十六进制字符串,r || s 格式)

      私钥缺失,或消息、随机源、曲线参数、输出选项无效时抛出错误

    • 验证签名

      参数

      • data: string | Uint8Array<ArrayBufferLike>

        原始数据(字符串或 Uint8Array)

      • signature: string

        签名(十六进制字符串)

      • 可选options: Omit<VerifyOptions, "curveParams">

        验签选项(签名格式、用户 ID 等)

      返回 boolean

      签名数学上有效且身份、消息均匹配时返回 true,否则返回 false

      公钥、签名编码、曲线参数或选项格式无效时抛出错误

    • 从私钥创建 SM2 实例

      参数

      • privateKey: string

        私钥(十六进制字符串)

      • 可选curveParams: SM2CurveParams

        可选的标准曲线兼容声明;不支持自定义曲线

      返回 SM2

      新的 SM2 实例

    • 从公钥创建 SM2 实例

      参数

      • publicKey: string

        公钥(十六进制字符串)

      • 可选curveParams: SM2CurveParams

        可选的标准曲线兼容声明;不支持自定义曲线

      返回 SM2

      新的 SM2 实例

    • 生成新的密钥对

      参数

      • 可选curveParams: SM2CurveParams

        可选的标准曲线兼容声明;不支持自定义曲线

      返回 SM2

      带有生成的密钥对的新 SM2 实例

      当前运行环境无法提供符合策略的随机源时抛出错误