mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 11:37:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//
 | 
						|
// Copyright Coinbase, Inc. All Rights Reserved.
 | 
						|
//
 | 
						|
// SPDX-License-Identifier: Apache-2.0
 | 
						|
//
 | 
						|
 | 
						|
package camshoup
 | 
						|
 | 
						|
import (
 | 
						|
	"math/big"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func TestEncryptionKeyEncryptAndProve(t *testing.T) {
 | 
						|
	group, err := NewPaillierGroupWithPrimes(testP, testQ)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	domain := []byte("TestEncryptionKeyEncryptAndProve")
 | 
						|
 | 
						|
	ek, dk, err := NewKeys(1, group)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	testMsgs := []*big.Int{
 | 
						|
		big.NewInt(0),
 | 
						|
		big.NewInt(10),
 | 
						|
		big.NewInt(20),
 | 
						|
		big.NewInt(30),
 | 
						|
		big.NewInt(40),
 | 
						|
		big.NewInt(50),
 | 
						|
		big.NewInt(100),
 | 
						|
		big.NewInt(1000),
 | 
						|
		big.NewInt(10000),
 | 
						|
		big.NewInt(100000),
 | 
						|
		big.NewInt(1000000),
 | 
						|
	}
 | 
						|
	for _, msg := range testMsgs {
 | 
						|
		cs, proof, err := ek.EncryptAndProve(domain, []*big.Int{msg})
 | 
						|
		require.NoError(t, err)
 | 
						|
 | 
						|
		err = ek.VerifyEncryptProof(domain, cs, proof)
 | 
						|
		require.NoError(t, err)
 | 
						|
 | 
						|
		dmsg, err := dk.Decrypt(domain, cs)
 | 
						|
		require.NoError(t, err)
 | 
						|
		require.Equal(t, 0, msg.Cmp(dmsg[0]))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncryptionKeyEncryptAndProveBlindings(t *testing.T) {
 | 
						|
	group, err := NewPaillierGroupWithPrimes(testP, testQ)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	domain := []byte("TestEncryptionKeyEncryptAndProveBlindings")
 | 
						|
 | 
						|
	ek, dk, err := NewKeys(1, group)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	testMsgs := []*struct {
 | 
						|
		test, blinding *big.Int
 | 
						|
	}{
 | 
						|
		{big.NewInt(0), big.NewInt(1)},
 | 
						|
		{big.NewInt(10), big.NewInt(2)},
 | 
						|
		{big.NewInt(20), big.NewInt(3)},
 | 
						|
		{big.NewInt(30), big.NewInt(4)},
 | 
						|
		{big.NewInt(40), big.NewInt(5)},
 | 
						|
		{big.NewInt(50), big.NewInt(6)},
 | 
						|
		{big.NewInt(100), big.NewInt(7)},
 | 
						|
		{big.NewInt(1000), big.NewInt(8)},
 | 
						|
		{big.NewInt(10000), big.NewInt(9)},
 | 
						|
		{big.NewInt(100000), big.NewInt(10)},
 | 
						|
		{big.NewInt(1000000), big.NewInt(11)},
 | 
						|
	}
 | 
						|
	for _, msg := range testMsgs {
 | 
						|
		cs, proof, err := ek.EncryptAndProveBlindings(domain, []*big.Int{msg.test}, []*big.Int{msg.blinding})
 | 
						|
		require.NoError(t, err)
 | 
						|
 | 
						|
		err = ek.VerifyEncryptProof(domain, cs, proof)
 | 
						|
		require.NoError(t, err)
 | 
						|
 | 
						|
		dmsg, err := dk.Decrypt(domain, cs)
 | 
						|
		require.NoError(t, err)
 | 
						|
		require.Equal(t, 0, msg.test.Cmp(dmsg[0]))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncryptionKeyEncryptAndProveInvalidInputs(t *testing.T) {
 | 
						|
	group, err := NewPaillierGroupWithPrimes(testP, testQ)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	domain := []byte("TestEncryptionKeyEncryptAndProveInvalidInputs")
 | 
						|
 | 
						|
	ek, _, err := NewKeys(1, group)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	_, _, err = ek.EncryptAndProve(domain, nil)
 | 
						|
	require.Error(t, err)
 | 
						|
 | 
						|
	_, _, err = ek.EncryptAndProve(domain, []*big.Int{})
 | 
						|
	require.Error(t, err)
 | 
						|
 | 
						|
	_, _, err = ek.EncryptAndProveBlindings(domain, []*big.Int{big.NewInt(1)}, nil)
 | 
						|
	require.Error(t, err)
 | 
						|
 | 
						|
	_, _, err = ek.EncryptAndProveBlindings(domain, []*big.Int{big.NewInt(2)}, []*big.Int{})
 | 
						|
	require.Error(t, err)
 | 
						|
 | 
						|
	_, _, err = ek.EncryptAndProveBlindings(domain, []*big.Int{big.NewInt(2)}, []*big.Int{big.NewInt(0)})
 | 
						|
	require.Error(t, err)
 | 
						|
}
 |