Files
2026-05-27 23:03:00 +08:00

61 lines
1.2 KiB
Go

//go:build ignore
// +build ignore
package paillier
import (
"testing"
"github.com/stretchr/testify/assert"
"xdx.jelly/xgcl/grand"
"xdx.jelly/xgcl/sm/sm4"
)
func TestEnv(t *testing.T) {
sk, pk, err := GenerateKey(2048)
assert.Nil(t, err)
for i := 0; i < 1000; i++ {
kek := grand.GetRandom(16) //[]byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
mykey := grand.GetRandom(16)
mykeyPaillierCipher, err := EncryptKey(mykey, pk)
assert.Nil(t, err)
iv, mykeyEnvelopeCipher, err := GenEnvelope(mykeyPaillierCipher, kek, pk)
assert.Nil(t, err)
mykeyEnvelope, err := DecryptEnvelope(mykeyEnvelopeCipher, sk) // mykeyEnvelope = SM4CTREnc(kek, mykey) = sm4.Enc(kek, iv) ^ key
assert.Nil(t, err)
// recover mykey from mykeyEnvelope
mykey2 := DecryptKey(iv []byte, keyEnvelope []byte, pk *PublicKey)
// check
key2, err := sm4.EncryptECB(nil, kek, iv)
assert.Nil(t, err)
for i := range key2 {
key2[i] ^= ctrEncKey[i]
}
assert.Equal(t, key, key2)
}
}
func TestEncKey(t *testing.T) {
key := grand.GetRandom(128)
sk, pk, err := GenerateKey(2048)
assert.Nil(t, err)
c, err := EncryptKey(key, pk)
assert.Nil(t, err)
key2, err := DecryptKey(c, 128, sk)
assert.Nil(t, err)
assert.Equal(t, key, key2)
}