Splited encoding per object type, added public methods for serialization
This commit is contained in:
12 files changed
+637
-365
No files matched your search
@@ -0,0 +1,133 @@
|
||||
// Package bson provides functions for serialization and deserialization between
|
||||
// paillier objects and BSON
|
||||
package bson
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
||||
"github.com/keep-network/paillier"
|
||||
"gopkg.in/mgo.v2/bson"
|
||||
)
|
||||
|
||||
type PartialDecryptionZKP paillier.PartialDecryptionZKP
|
||||
|
||||
// Serializes PartialDecryptionZKP to BSON
|
||||
func SerializePartialDecryptionZKP(pdzkp *paillier.PartialDecryptionZKP) ([]byte, error) {
|
||||
return bson.Marshal(toSerializablePartialDecryptionZKP(pdzkp))
|
||||
}
|
||||
|
||||
// Deserializes BSON to PartialDecryptionZKP
|
||||
func DeserializePartialDecryptionZKP(data []byte) (*paillier.PartialDecryptionZKP, error) {
|
||||
serializable := new(PartialDecryptionZKP)
|
||||
if err := bson.Unmarshal(data, serializable); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return toOriginalPartialDecryptionZKP(serializable), nil
|
||||
}
|
||||
|
||||
// Serializes PartialDecryptionZKP to JSON
|
||||
func JsonSerializePartialDecryptionZKP(pdzkp *paillier.PartialDecryptionZKP) ([]byte, error) {
|
||||
return json.Marshal(toSerializablePartialDecryptionZKP(pdzkp))
|
||||
}
|
||||
|
||||
// Deserializes JSON to PartialDecryptionZKP
|
||||
func JsonDeserializePartialDecryptionZKP(data []byte) (*paillier.PartialDecryptionZKP, error) {
|
||||
serializable := new(PartialDecryptionZKP)
|
||||
if err := json.Unmarshal(data, serializable); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return toOriginalPartialDecryptionZKP(serializable), nil
|
||||
}
|
||||
|
||||
// Changes original PartialDecryptionZKP to serializable PartialDecryptionZKP
|
||||
func toSerializablePartialDecryptionZKP(pdzkp *paillier.PartialDecryptionZKP) *PartialDecryptionZKP {
|
||||
serializable := PartialDecryptionZKP(*pdzkp)
|
||||
return &serializable
|
||||
}
|
||||
|
||||
// Changes serializable PartialDecryptionZKP to original PartialDecryptionZKP
|
||||
func toOriginalPartialDecryptionZKP(serializable *PartialDecryptionZKP) *paillier.PartialDecryptionZKP {
|
||||
original := paillier.PartialDecryptionZKP(*serializable)
|
||||
return &original
|
||||
}
|
||||
|
||||
type dbPartialDecryptionZKP struct {
|
||||
Z string `json:"z"`
|
||||
E string `json:"e"`
|
||||
C string `json:"c"`
|
||||
V string `json:"v"`
|
||||
N string `json:"n"`
|
||||
Vi []string `json:"vi"`
|
||||
Decryption string `json:"decryption"`
|
||||
Id int `json:"id"`
|
||||
TotalNumberOfDecryptionServers int `json:"total_number_of_decryption_servers"`
|
||||
Threshold int `json:"threshold"`
|
||||
}
|
||||
|
||||
func (pdzkp *PartialDecryptionZKP) GetBSON() (interface{}, error) {
|
||||
db := new(dbPartialDecryptionZKP)
|
||||
db.fromPartialDecryptionZKP(pdzkp)
|
||||
return db, nil
|
||||
}
|
||||
|
||||
func (pdzkp *PartialDecryptionZKP) SetBSON(raw bson.Raw) error {
|
||||
db := new(dbPartialDecryptionZKP)
|
||||
if err := raw.Unmarshal(db); err != nil {
|
||||
return err
|
||||
}
|
||||
return db.toPartialDecryptionZKP(pdzkp)
|
||||
}
|
||||
|
||||
func (dbPDZKP *dbPartialDecryptionZKP) fromPartialDecryptionZKP(pdzkp *PartialDecryptionZKP) {
|
||||
dbPDZKP.Id = pdzkp.Id
|
||||
dbPDZKP.TotalNumberOfDecryptionServers = pdzkp.Key.TotalNumberOfDecryptionServers
|
||||
dbPDZKP.Threshold = pdzkp.Key.Threshold
|
||||
dbPDZKP.Z = fmt.Sprintf("%x", pdzkp.Z)
|
||||
dbPDZKP.E = fmt.Sprintf("%x", pdzkp.E)
|
||||
dbPDZKP.N = fmt.Sprintf("%x", pdzkp.Key.N)
|
||||
dbPDZKP.C = fmt.Sprintf("%x", pdzkp.C)
|
||||
dbPDZKP.V = fmt.Sprintf("%x", pdzkp.Key.V)
|
||||
dbPDZKP.Decryption = fmt.Sprintf("%x", pdzkp.Decryption)
|
||||
dbPDZKP.Vi = make([]string, len(pdzkp.Key.Vi))
|
||||
for i, vi := range pdzkp.Key.Vi {
|
||||
dbPDZKP.Vi[i] = fmt.Sprintf("%x", vi)
|
||||
}
|
||||
}
|
||||
|
||||
func (dbPDZKP *dbPartialDecryptionZKP) toPartialDecryptionZKP(pdzkp *PartialDecryptionZKP) error {
|
||||
pdzkp.Key = new(paillier.ThresholdPublicKey)
|
||||
|
||||
var oks = make([]bool, 6)
|
||||
|
||||
pdzkp.Id = dbPDZKP.Id
|
||||
pdzkp.Key.TotalNumberOfDecryptionServers = dbPDZKP.TotalNumberOfDecryptionServers
|
||||
pdzkp.Key.Threshold = dbPDZKP.Threshold
|
||||
pdzkp.Z, oks[0] = new(big.Int).SetString(dbPDZKP.Z, 16)
|
||||
pdzkp.E, oks[1] = new(big.Int).SetString(dbPDZKP.E, 16)
|
||||
pdzkp.C, oks[2] = new(big.Int).SetString(dbPDZKP.C, 16)
|
||||
pdzkp.Key.V, oks[3] = new(big.Int).SetString(dbPDZKP.V, 16)
|
||||
pdzkp.Key.N, oks[4] = new(big.Int).SetString(dbPDZKP.N, 16)
|
||||
pdzkp.Decryption, oks[5] = new(big.Int).SetString(dbPDZKP.Decryption, 16)
|
||||
|
||||
if !all(oks) {
|
||||
fmt.Println(oks)
|
||||
fmt.Println(dbPDZKP.E, "|", dbPDZKP.Z, "|", dbPDZKP.C, "|", dbPDZKP.V, "|", dbPDZKP.Decryption)
|
||||
return errors.New("numbers not in hexadecimal format")
|
||||
}
|
||||
|
||||
pdzkp.Key.Vi = make([]*big.Int, len(dbPDZKP.Vi))
|
||||
var ok bool
|
||||
for i, vi := range dbPDZKP.Vi {
|
||||
pdzkp.Key.Vi[i], ok = new(big.Int).SetString(vi, 16)
|
||||
if !ok {
|
||||
return errors.New("numbers not in hexadecimal format")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user