init: v1.0.0
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package sm2m
|
||||
|
||||
import (
|
||||
"math/big"
|
||||
|
||||
"xdx.jelly/xgcl/gmath"
|
||||
"xdx.jelly/xgcl/sm/sm2"
|
||||
)
|
||||
|
||||
/*
|
||||
导入加密密钥de,由sm2签名密钥来解密sm2加密密钥保护结构。
|
||||
解密de后拆分也同签名密钥拆分
|
||||
(1+de)^{-1} = de_c*de_s
|
||||
为了加解密函数一致
|
||||
*/
|
||||
|
||||
// ServerDec 服务端计算(serverKey)^(-1)*C1,使用签名密钥解密加密密钥保护结构
|
||||
func ServerImportKey(serverKey *sm2.PrivateKey, in []byte) ([]byte, error) {
|
||||
if len(in) < 2*sm2.ByteSize() {
|
||||
return []byte{}, ErrIndataError
|
||||
}
|
||||
|
||||
x := new(big.Int)
|
||||
x.SetBytes(in[:sm2.ByteSize()])
|
||||
y := new(big.Int)
|
||||
y.SetBytes(in[sm2.ByteSize() : 2*sm2.ByteSize()])
|
||||
|
||||
sInv := new(big.Int)
|
||||
sInv.Set(serverKey.D)
|
||||
sInv.ModInverse(sInv, sm2.OrderN())
|
||||
|
||||
x, y = sm2.Curve256.ScalarMult(x, y, sInv.Bytes())
|
||||
out := make([]byte, 0, 2*sm2.ByteSize())
|
||||
out = append(out, gmath.BigIntToNByte(x, sm2.ByteSize())...)
|
||||
out = append(out, gmath.BigIntToNByte(y, sm2.ByteSize())...)
|
||||
|
||||
return out, nil
|
||||
}
|
||||
Reference in New Issue
Block a user