![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
github.com/blocktree/go-owcrypt
1. 移除C语言依赖
2. 移除部分接口的入参长度描述
- 签名接口 Signature 的 IDlen 和 message_len
- 验签接口 Verify 的 IDlen 和 message_len
- 加解密接口对明文和密文长度的描述
- 协商类接口的 IDinitiator_len 和 IDresponder_len
3. 签名接口添加一个输出用于存放v,签名结果目前输出为满足Canical编码规则且S序列化之后的结果。
4. 不再支持
- PreprocessRandomNum
- GetCurveOrder
go-owcrypt 提供目前区块链技术中使用的椭圆曲线算法与哈希算法。 目前支持的算法包括:
公钥计算算法:
ECDSA类 : secp256k1、secp256r1、primv1、NIST-P256、sm2-std
EDDSA类 : curve25519、ed25519、x25519
签名算法:
ECDSA类 : secp256k1、secp256r1、primv1、NIST-P256、sm2-std
EDDSA类 : curve25519、ed25519、x25519
验签算法:
ECDSA类 : secp256k1、secp256r1、primv1、NIST-P256、sm2-std
EDDSA类 : curve25519、ed25519、x25519
加密算法:
ECDSA类 : sm2-std
密钥协商算法:
ECDSA类 : sm2-std-DH、 sm2-std-ElGamal
G点相乘算法:
ECDSA类 : secp256k1、secp256r1、primv1、NIST-P256、sm2-std
EDDSA类 : ed25519、x25519
G点的乘加算法:
ECDSA类 : secp256k1、secp256r1、primv1、NIST-P256、sm2-std
EDDSA类 : ed25519
点的压缩与解压缩算法:
ECDSA类 : secp256k1、secp256r1、primv1、NIST-P256、sm2-std
从签名恢复公钥算法:
ECDSA类 : secp256k1、secp256r1、primv1、NIST-P256、sm2-std
点的域转换算法:
x25519-to-ed25519、ed25519-to-x25519
哈希算法:
sha1,sha256,double-sha256,sha512,sha3-256,sha3-512
md4,md5,
ripemd160
blake256,blake512,blake2b,blake2s
sm3,hash160
keccak256,keccak512,keccak256-ripemd160
HMAC算法:
sha256,sha512,sm3
func GenPubkey(prikey []byte, pubkey []byte, typeChoose uint32) uint16
入参:
prikey : 私钥
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
ECC_CURVE_ED25519_NORMAL(0xECC00003)
ECC_CURVE_ED25519(0xECC00004)
ECC_CURVE_X25519 (0xECC00005)
出参:
pubkey : 公钥
返回值: uint16类型,如下:
SUCCESS(0x0001) : 生成成功
ECC_PRIKEY_ILLEGAL(0xE000) : 传入了非法私钥
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
Tips:
对于ECDSA类曲线算法,接口返回的公钥为未压缩的坐标点形式,X坐标在前,Y坐标在后,无前缀(0x04)
对于EDDSA类曲线算法,接口接受的私钥为私钥本身,不是私钥+公钥拼接后的数组
func Signature(prikey []byte, ID []byte, message []byte, signature []byte,v byte, typeChoose uint32) uint16
入参:
prikey : 私钥
ID : 签名方标识符,仅SM2签名时需要传入
message : 待签名的消息
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
ECC_CURVE_ED25519_NORMAL(0xECC00003)
ECC_CURVE_ED25519(0xECC00004)
ECC_CURVE_X25519 (0xECC00005)
出参:
signature : 签名值
v : rsv格式签名的v
返回值:
uint16类型,如下:
SUCCESS(0x0001) : 生成成功
ECC_PRIKEY_ILLEGAL(0xE000) : 传入了非法私钥
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
ECC_MISS_ID(0xE003) : SM2签名时未传入签名方标识符
[1.1.0版本移除]func PreprocessRandomNum(rand []byte) (ret uint16)
入参:
rand:随机数
返回值:
uint16类型,如下:
SUCCESS(0x0001) : 成功
其他 : 失败
Tips:
该接口主要用于签名算法采用固定随机数的情况,使用时应配合Signature接口使用,顺序为:
1,PreprocessRandomNum - 写入随机数
2. Signature调用签名 - 签名
签名时,应该将传入的typeChose或上 NOUNCE_OUTSIDE_FLAG 以使随机数生效
func Verify(pubkey []byte, ID []byte, message []byte, signature []byte, typeChoose uint32) uint16
入参:
pubkey : 公钥
ID : 待验证方标识符,仅SM2签名时需要传入
message : 待验证的消息
signature : 签名值
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
ECC_CURVE_ED25519_NORMAL(0xECC00003)
ECC_CURVE_ED25519(0xECC00004)
ECC_CURVE_X25519 (0xECC00005)
出参: 无
返回值:
uint16类型, 如下:
SUCCESS(0x0001) : 签名验证通过
FAILURE(0x0000) : 签名验证不通过
ECC_PUBKEY_ILLEGAL(0xE001) : 传入了非法公钥
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
ECC_MISS_ID(0xE002) : SM2验签时未传入被验证方标识符
func Encryption(pubkey []byte, plain []byte, typeChoose uint32) (cipher []byte, ret uint16)
入参:
pubkey :公钥
plain :明文
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
cipher : 密文
返回值:
ret: 结果返回码,如下:
SUCCESS(0x0001) : 加密成功
ECC_PUBKEY_ILLEGAL(0xE001) : 传入了非法公钥
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
Tips:
目前仅支持国密居推荐sm2参数的加密
func Decryption(prikey []byte, cipher []byte, typeChoose uint32) (plain []byte, ret uint16)
入参:
prikey : 私钥
cipher : 密文
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
plain : 明文
返回值:
ret: 结果如下:
SUCCESS(0x0001) : 解密成功
FAILURE(0x0000) : 解密失败,密文非法
ECC_PRIKEY_ILLEGAL(0xE000) : 传入了非法私钥
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
Tips:
目前仅支持国密居推荐sm2参数的解密
Diffi-Hellman模式协商流程:
1. KeyAgreement_initiator_step1
2. KeyAgreement_responder_step1
3. KeyAgreement_initiator_step2
4. KeyAgreement_responder_step2
ElGamal模式协商流程:
1. KeyAgreement_initiator_step1
2. KeyAgreement_responder_ElGamal_step1
3. KeyAgreement_initiator_step2
4. KeyAgreement_responder_step2
func KeyAgreement_initiator_step1(tmpPrikeyInitiator []byte, tmpPubkeyInitiator []byte, typeChoose uint32)
入参:
typeChoose : 算法类型选择,目前仅支持sm2p256v1
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
tmpPrikeyInitiator : 发起方临时私钥
tmpPubkeyInitiator : 发起方临时公钥
返回值:
无
func KeyAgreement_initiator_step2(IDinitiator []byte, IDinitiator_len uint16, IDresponder []byte, IDresponder_len uint16, prikeyInitiator []byte, pubkeyInitiator []byte, pubkeyResponder []byte, tmpPrikeyInitiator []byte, tmpPubkeyInitiator []byte, tmpPubkeyResponder []byte, Sin []byte, Sout []byte, keylen uint16, key []byte, typeChoose uint32) uint16
入参:
IDinitiator : 发起方标识符
IDinitiator_len : 发起方标识符长度
IDresponder : 响应方标识符
IDresponder_len : 响应方标识符长度
prikeyInitiator : 发起方私钥
pubkeyInitiator : 发起方公钥
pubkeyResponder : 响应方公钥
tmpPrikeyInitiator : 发起方临时私钥
tmpPubkeyInitiator : 发起方临时公钥
tmpPubkeyResponder : 响应方临时公钥
Sin : 响应方发来的校验值
keylen : 期待的协商结果长度
typeChoose : 算法类型选择,目前仅支持sm2p256v1
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
Sout : 发送给响应方的校验值
key : 协商结果
返回值:
uint16类型, 结果如下:
SUCCESS(0x0001) : 发起方协商成功
FAILURE(0x0000) : 发起方协商失败
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
func KeyAgreement_responder_step1(IDinitiator []byte, IDinitiator_len uint16, IDresponder []byte, IDresponder_len uint16, prikeyResponder []byte, pubkeyResponder []byte, pubkeyInitiator []byte, tmpPubkeyResponder []byte, tmpPubkeyInitiator []byte, Sinner []byte, Souter []byte, keylen uint16, key []byte, typeChoose uint32) uint16
入参:
IDinitiator : 发起方标识符
IDinitiator_len : 发起方标识符长度
IDresponder : 响应方标识符
IDresponder_len : 响应方标识符长度
prikeyResponder : 响应方私钥
pubkeyResponder : 响应方公钥
pubkeyInitiator : 发起方公钥
tmpPubkeyResponder : 响应方临时公钥
tmpPubkeyInitiator : 发起方临时公钥
keylen : 期待的协商结果长度
typeChoose : 算法类型选择,目前仅支持sm2p256v1
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
Sinner : 本地暂存的校验值
Souter : 发送给发起方的校验值
key : 协商结果
返回值:
uint16类型, 结果如下:
SUCCESS(0x0001) : 响应方产生成功
FAILURE(0x0000) : 响应方协商失败
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
func KeyAgreement_responder_ElGamal_step1(IDinitiator []byte,IDinitiator_len uint16,IDresponder []byte,IDresponder_len uint16,prikeyResponder []byte,pubkeyResponder []byte,pubkeyInitiator []byte,tmpPubkeyInitiator []byte,keylen uint16,random []byte,typeChoose uint32) (key, tmpPubkeyResponder, Sinner, Souter []byte, ret uint16)
入参:
IDinitiator : 发起方标识符
IDinitiator_len : 发起方标识符长度
IDresponder : 响应方标识符
IDresponder_len : 响应方标识符长度
prikeyResponder : 响应方私钥
pubkeyResponder : 响应方公钥
pubkeyInitiator : 发起方公钥
tmpPubkeyResponder : 响应方临时公钥
keylen : 期待的协商结果长度
random : 固定临时私钥
typeChoose : 算法类型选择,目前仅支持sm2p256v1
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
Sinner : 本地暂存的校验值
Souter : 发送给发起方的校验值
key : 协商结果
返回值:
uint16类型, 结果如下:
SUCCESS(0x0001) : 响应方产生成功
FAILURE(0x0000) : 响应方协商失败
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
func KeyAgreement_responder_step2(Sinitiator []byte, Sresponder []byte, typeChoose uint32) uint16
入参:
Sinitiator : 发起方发来的校验值
Sresponder : 响应方暂存的校验值
typeChoose : 算法类型选择,目前仅支持sm2p256v1
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
无
返回值:
uint16类型, 结果如下:
SUCCESS(0x0001) : 响应方协商成功
FAILURE(0x0000) : 响应方协商失败
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
func Point_mulBaseG(scalar []byte, typeChoose uint32) []byte
入参:
scalar : 乘子
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
ECC_CURVE_ED25519(0xECC00004)
ECC_CURVE_X25519 (0xECC00005)
出参:
pubkey : 公钥
返回值: uint16类型,如下:
SUCCESS(0x0001) : 生成成功
ECC_PRIKEY_ILLEGAL(0xE000) : 传入了非法私钥
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
Tips:
对于ECDSA类曲线算法,接口返回的公钥为压缩的坐标点形式
对于EDDSA类曲线算法,由于curve25519的特殊性,此处可用ED25519进行计算,但与其私钥到公钥的计算流程并不一致
func Point_mulBaseG_add(pointin, scalar []byte, typeChoose uint32) (point []byte, isinfinity bool)
入参:
pointin : 用于相加的点
scalar : 乘子
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
ECC_CURVE_ED25519(0xECC00004)
ECC_CURVE_X25519 (0xECC00005)
出参:
pubkey : 公钥
返回值: uint16类型,如下:
SUCCESS(0x0001) : 生成成功
ECC_PRIKEY_ILLEGAL(0xE000) : 传入了非法私钥
ECC_WRONG_TYPE(0xE002) : 传入了错误的type
Tips:
对于ECDSA类曲线算法,接口返回的公钥为未压缩的坐标点形式,X坐标在前,Y坐标在后,无前缀(0x04)
对于EDDSA类曲线算法,由于curve25519的特殊性,此处可用ED25519进行计算,但与其私钥到公钥的计算流程并不一致
[1.1.0版本移除]func GetCurveOrder(typeChoose uint32) []byte
入参:
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
[]byte : 基域特征
func PointCompress(point []byte, typeChoose uint32) []byte
入参:
point : 待压缩的点
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
[]byte : 压缩后的点
Tips:
入参的待压缩点可以是X+Y的形式,也可以是0x04+X+Y的形式,均可以识别
func PointDecompress(point []byte, typeChoose uint32) []byte
入参:
point : 待解压缩的点
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
[]byte : 解压缩后的点
Tips:
解压缩后的点是0x04+X+Y的形式
func RecoverPubkey(sig []byte, msg []byte, typeChoose uint32) ([]byte, uint16)
入参:
sig : 签名
msg : 签名对应的消息
typeChoose : 算法类型选择,可选参数如下
ECC_CURVE_SECP256K1(0xECC00000)
ECC_CURVE_SECP256R1(0xECC00001)
ECC_CURVE_PRIMEV1(0xECC00001)
ECC_CURVE_NIST_P256(0xECC00001)
ECC_CURVE_SM2_STANDARD(0xECC00002)
出参:
[]byte : 解压缩后的点
Tips:
签名采用 R || S || V 的形式顺序排放
func CURVE25519_convert_X_to_Ed(x []byte) ([]byte, error)
入参:
x : x25519坐标点
出参:
[]byte : ed25519坐标点
返回值:
error : nil时为转换正确
func CURVE25519_convert_Ed_to_X(ed []byte) ([]byte, error)
入参:
x : ed25519坐标点
出参:
[]byte : x25519坐标点
返回值:
error : nil时为转换正确
func Hash(data []byte, digestLen uint16, typeChoose uint32)
入参:
data : 原始数据
digestLen : blake2b类似的哈希算法需要指定的摘要长度,其他类型时无效
typeChoose : 类型选择,可选参数如下:
HASH_ALG_SHA1(0xA0000000)
HASH_ALG_SHA3_256(0xA0000001)
HASH_ALG_SHA256(0xA0000002)
HASH_ALG_SHA512(0xA0000003)
HASH_ALG_MD4(0xA0000004)
HASH_ALG_MD5(0xA0000005)
HASH_ALG_RIPEMD160(0xA0000006)
HASH_ALG_BLAKE2B(0xA0000007)
HASH_ALG_BLAKE2S(0xA0000008)
HASH_ALG_SM3(0xA0000009)
HASh_ALG_DOUBLE_SHA256(0xA000000A)
HASH_ALG_HASH160(0xA000000B)
HASH_ALG_BLAKE256(0xA000000C)
HASH_ALG_BLAKE512(0xA000000D)
HASH_ALG_KECCAK256(0xA000000E)
HASH_ALG_KECCAK256_RIPEMD160(0xA000000F)
HASH_ALG_SHA3_256_RIPEMD160(0xA0000010)
HASH_ALG_KECCAK512(0xA0000011)
HASH_ALG_SHA3_512(0xA0000012)
出参:
[]byte : 哈希值
Tips:
对于需要传入key的哈希算法,目前还不支持,按照默认方式进行计算。
func Hmac(key []byte, data []byte, typeChoose uint32) []byte
入参:
data : 原始数据
key : 密钥
typeChoose : 类型选择,可选参数如下:
HMAC_SHA256_ALG(0x50505050)
HMAC_SHA512_ALG(0x50505051)
HMAC_SM3_ALGuint32(0x50505052)
出参:
[]byte : HMAC值
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.