53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package outsource
|
||
|
||
import (
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/assert"
|
||
"xdx.jelly/xgcl/grand"
|
||
"xdx.jelly/xgcl/sm/sm2"
|
||
"xdx.jelly/xgcl/tpc/sm2/sm2m"
|
||
)
|
||
|
||
// 外包盲签名流程示例
|
||
func TestOSBlindSign(t *testing.T) {
|
||
//O、客户端生成paillier密钥
|
||
var err error
|
||
rnd := grand.Reader
|
||
paiPrivKey, paiPubKey, encryptedClientKey1, _, serverKey, publicKey := osGenerateKey(t)
|
||
|
||
e := make([]byte, 32)
|
||
rnd.Read(e)
|
||
|
||
clientCtx := NewClientBlindSignContext(paiPrivKey, rnd)
|
||
// 1) client -> os
|
||
|
||
// 2)os -> client
|
||
osServerCtx := NewOSBlindSignContext()
|
||
pp, err := osServerCtx.Step1(rnd) // P'
|
||
assert.Nil(t, err)
|
||
|
||
// 3) client -> hfserver
|
||
ecipher, p, err := clientCtx.Step1(e, pp)
|
||
assert.Nil(t, err)
|
||
|
||
// 4) hfserver -> client
|
||
rcipher, s1, s2cipher, err := sm2m.ServerBlindSign(serverKey, ecipher, p, paiPubKey, rnd)
|
||
assert.Nil(t, err)
|
||
|
||
// 5) clinet -> os
|
||
s1p, s2p, err := clientCtx.Step2(rcipher, s1, s2cipher)
|
||
assert.Nil(t, err)
|
||
|
||
// 6) 外包服务器解析data并计算c,把c发送给客户端
|
||
w, err := osServerCtx.Step2(s1p, s2p, encryptedClientKey1, paiPubKey)
|
||
assert.Nil(t, err)
|
||
|
||
// 7) 客户端计算签名值
|
||
sig, err := clientCtx.Step3(w)
|
||
assert.Nil(t, err)
|
||
|
||
// 8) 客户端验证签名
|
||
assert.True(t, sm2.Verify(e, publicKey, sig))
|
||
}
|