ceremonyclient/verenc/verenc_test.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()
}
}