mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 11:37:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//
 | 
						|
// Copyright Coinbase, Inc. All Rights Reserved.
 | 
						|
//
 | 
						|
// SPDX-License-Identifier: Apache-2.0
 | 
						|
//
 | 
						|
 | 
						|
package camshoup
 | 
						|
 | 
						|
import (
 | 
						|
	"math/big"
 | 
						|
 | 
						|
	"git.sr.ht/~sircmpwn/go-bare"
 | 
						|
)
 | 
						|
 | 
						|
// CipherText represents verifiably encrypted ciphertext
 | 
						|
// as described in section 3.2 in <https://shoup.net/papers/verenc.pdf>.
 | 
						|
type CipherText struct {
 | 
						|
	u, v *big.Int
 | 
						|
	e    []*big.Int
 | 
						|
}
 | 
						|
 | 
						|
type cipherTextMarshal struct {
 | 
						|
	E [][]byte `bare:"e"`
 | 
						|
	U []byte   `bare:"u"`
 | 
						|
	V []byte   `bare:"v"`
 | 
						|
}
 | 
						|
 | 
						|
func (c CipherText) MarshalBinary() ([]byte, error) {
 | 
						|
	tv := new(cipherTextMarshal)
 | 
						|
	tv.U = c.u.Bytes()
 | 
						|
	tv.V = c.v.Bytes()
 | 
						|
	tv.E = make([][]byte, len(c.e))
 | 
						|
	for i, e := range c.e {
 | 
						|
		tv.E[i] = e.Bytes()
 | 
						|
	}
 | 
						|
 | 
						|
	return bare.Marshal(tv)
 | 
						|
}
 | 
						|
 | 
						|
func (c *CipherText) UnmarshalBinary(data []byte) error {
 | 
						|
	tv := new(cipherTextMarshal)
 | 
						|
	err := bare.Unmarshal(data, tv)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	c.u = new(big.Int).SetBytes(tv.U)
 | 
						|
	c.v = new(big.Int).SetBytes(tv.V)
 | 
						|
	c.e = make([]*big.Int, len(tv.E))
 | 
						|
	for i, e := range tv.E {
 | 
						|
		c.e[i] = new(big.Int).SetBytes(e)
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 |