blob: c37945fff270e3f86928282c2e8aef9830a39e28 [file] [log] [blame]
package security
import (
"fmt"
"io"
"v.io/core/veyron/security/serialization"
"v.io/core/veyron2/security"
"v.io/core/veyron2/vom2"
)
func encodeAndStore(obj interface{}, data, signature io.WriteCloser, signer serialization.Signer) error {
if data == nil || signature == nil {
return fmt.Errorf("invalid data/signature handles data:%v sig:%v", data, signature)
}
swc, err := serialization.NewSigningWriteCloser(data, signature, signer, nil)
if err != nil {
return err
}
enc, err := vom2.NewBinaryEncoder(swc)
if err != nil {
swc.Close()
return err
}
if err := enc.Encode(obj); err != nil {
swc.Close()
return err
}
return swc.Close()
}
func decodeFromStorage(obj interface{}, data, signature io.ReadCloser, publicKey security.PublicKey) error {
if data == nil || signature == nil {
return fmt.Errorf("invalid data/signature handles data:%v sig:%v", data, signature)
}
defer data.Close()
defer signature.Close()
vr, err := serialization.NewVerifyingReader(data, signature, publicKey)
if err != nil {
return err
}
dec, err := vom2.NewDecoder(vr)
if err != nil {
return err
}
return dec.Decode(obj)
}