Files
paillier/bson/encoding_publickey.go
T

65 lines
1.5 KiB
Go

// Package bson provides functions for serialization and deserialization between
// paillier objects and BSON
package bson
import (
"fmt"
"github.com/keep-network/paillier"
"gopkg.in/mgo.v2/bson"
)
type PublicKey paillier.PublicKey
// Serializes PublicKey to BSON
func SerializePublicKey(publicKey *paillier.PublicKey) ([]byte, error) {
return bson.Marshal(toSerializablePublicKey(publicKey))
}
// Deserializes BSON to PublicKey
func DeserializePublicKey(data []byte) (*paillier.PublicKey, error) {
serializable := new(PublicKey)
if err := bson.Unmarshal(data, serializable); err != nil {
return nil, err
}
return toOriginalPublicKey(serializable), nil
}
// Changes original PublicKey to serializable PublicKey
func toSerializablePublicKey(publicKey *paillier.PublicKey) *PublicKey {
serializable := PublicKey(*publicKey)
return &serializable
}
// Changes serializable PublicKey to original PublicKey
func toOriginalPublicKey(serializable *PublicKey) *paillier.PublicKey {
original := paillier.PublicKey(*serializable)
return &original
}
type dbPublicKey struct {
N string `bson:",omitempty"`
}
func (publicKey *PublicKey) GetBSON() (interface{}, error) {
m := make(map[string]string)
m["n"] = fmt.Sprintf("%x", publicKey.N)
return m, nil
}
func (publicKey *PublicKey) SetBSON(raw bson.Raw) error {
var err error = nil
c := new(dbPublicKey)
raw.Unmarshal(c)
if c.N != "" {
publicKey.N, err = fromHex(c.N)
if err != nil {
return err
}
}
return err
}