mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-21 18:37:26 +08:00
103 lines
2.9 KiB
Go
103 lines
2.9 KiB
Go
package verenc_test
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/rand"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"source.quilibrium.com/quilibrium/monorepo/verenc"
|
|
generated "source.quilibrium.com/quilibrium/monorepo/verenc/generated/verenc"
|
|
)
|
|
|
|
func TestVerenc(t *testing.T) {
|
|
data := make([]byte, 56)
|
|
copy(data[1:6], []byte("hello"))
|
|
proof := verenc.NewVerencProof(data)
|
|
if !verenc.VerencVerify(generated.VerencProof{
|
|
BlindingPubkey: proof.BlindingPubkey,
|
|
EncryptionKey: proof.EncryptionKey,
|
|
Statement: proof.Statement,
|
|
Challenge: proof.Challenge,
|
|
Polycom: proof.Polycom,
|
|
Ctexts: proof.Ctexts,
|
|
SharesRands: proof.SharesRands,
|
|
}) {
|
|
t.FailNow()
|
|
}
|
|
compressed := verenc.VerencCompress(generated.VerencProof{
|
|
BlindingPubkey: proof.BlindingPubkey,
|
|
EncryptionKey: proof.EncryptionKey,
|
|
Statement: proof.Statement,
|
|
Challenge: proof.Challenge,
|
|
Polycom: proof.Polycom,
|
|
Ctexts: proof.Ctexts,
|
|
SharesRands: proof.SharesRands,
|
|
})
|
|
recovered := verenc.VerencRecover(generated.VerencDecrypt{
|
|
BlindingPubkey: proof.BlindingPubkey,
|
|
Statement: proof.Statement,
|
|
DecryptionKey: proof.DecryptionKey,
|
|
Ciphertexts: compressed,
|
|
})
|
|
if !bytes.Equal(data, recovered) {
|
|
t.FailNow()
|
|
}
|
|
}
|
|
|
|
func TestDataChunking(t *testing.T) {
|
|
data := make([]byte, 1300)
|
|
rand.Read(data)
|
|
chunks := verenc.ChunkDataForVerenc(data)
|
|
result := verenc.CombineChunkedData(chunks)
|
|
if !bytes.Equal(data, result[:1300]) {
|
|
t.FailNow()
|
|
}
|
|
}
|
|
|
|
func TestVerencWithChunking(t *testing.T) {
|
|
data := make([]byte, 1300)
|
|
rand.Read(data)
|
|
chunks := verenc.ChunkDataForVerenc(data)
|
|
results := [][]byte{}
|
|
for i, chunk := range chunks {
|
|
proof := verenc.NewVerencProof(chunk)
|
|
if !verenc.VerencVerify(generated.VerencProof{
|
|
BlindingPubkey: proof.BlindingPubkey,
|
|
EncryptionKey: proof.EncryptionKey,
|
|
Statement: proof.Statement,
|
|
Challenge: proof.Challenge,
|
|
Polycom: proof.Polycom,
|
|
Ctexts: proof.Ctexts,
|
|
SharesRands: proof.SharesRands,
|
|
}) {
|
|
t.FailNow()
|
|
}
|
|
compressed := verenc.VerencCompress(generated.VerencProof{
|
|
BlindingPubkey: proof.BlindingPubkey,
|
|
EncryptionKey: proof.EncryptionKey,
|
|
Statement: proof.Statement,
|
|
Challenge: proof.Challenge,
|
|
Polycom: proof.Polycom,
|
|
Ctexts: proof.Ctexts,
|
|
SharesRands: proof.SharesRands,
|
|
})
|
|
recovered := verenc.VerencRecover(generated.VerencDecrypt{
|
|
BlindingPubkey: proof.BlindingPubkey,
|
|
Statement: proof.Statement,
|
|
DecryptionKey: proof.DecryptionKey,
|
|
Ciphertexts: compressed,
|
|
})
|
|
if !bytes.Equal(chunk, recovered) {
|
|
fmt.Printf("recovered did not equal chunk %d: %x, %x\n", i, recovered, chunk)
|
|
t.FailNow()
|
|
}
|
|
results = append(results, recovered)
|
|
}
|
|
result := verenc.CombineChunkedData(results)
|
|
if !bytes.Equal(data, result[:1300]) {
|
|
fmt.Printf("result did not equal original data, %x, %x\n", result[:1300], data)
|
|
t.FailNow()
|
|
}
|
|
}
|