blob: c37945fff270e3f86928282c2e8aef9830a39e28 [file] [log] [blame]
Asim Shankarae8d4c52014-10-08 13:03:31 -07001package security
Ankur100eb272014-09-15 16:48:12 -07002
3import (
gauthamt1e313bc2014-11-10 15:45:56 -08004 "fmt"
5 "io"
Ankur100eb272014-09-15 16:48:12 -07006
Jiri Simsa764efb72014-12-25 20:57:03 -08007 "v.io/core/veyron/security/serialization"
8 "v.io/core/veyron2/security"
Suharsh Sivakumar51afaa32015-01-05 15:36:10 -08009 "v.io/core/veyron2/vom2"
Ankur100eb272014-09-15 16:48:12 -070010)
11
gauthamt1e313bc2014-11-10 15:45:56 -080012func encodeAndStore(obj interface{}, data, signature io.WriteCloser, signer serialization.Signer) error {
13 if data == nil || signature == nil {
14 return fmt.Errorf("invalid data/signature handles data:%v sig:%v", data, signature)
Ankur100eb272014-09-15 16:48:12 -070015 }
gauthamt1e313bc2014-11-10 15:45:56 -080016 swc, err := serialization.NewSigningWriteCloser(data, signature, signer, nil)
Ankur100eb272014-09-15 16:48:12 -070017 if err != nil {
18 return err
19 }
Suharsh Sivakumar51afaa32015-01-05 15:36:10 -080020 enc, err := vom2.NewBinaryEncoder(swc)
21 if err != nil {
22 swc.Close()
23 return err
24 }
25 if err := enc.Encode(obj); err != nil {
Ankur100eb272014-09-15 16:48:12 -070026 swc.Close()
27 return err
28 }
gauthamt1e313bc2014-11-10 15:45:56 -080029 return swc.Close()
Ankur100eb272014-09-15 16:48:12 -070030}
31
gauthamt1e313bc2014-11-10 15:45:56 -080032func decodeFromStorage(obj interface{}, data, signature io.ReadCloser, publicKey security.PublicKey) error {
33 if data == nil || signature == nil {
34 return fmt.Errorf("invalid data/signature handles data:%v sig:%v", data, signature)
Ankur100eb272014-09-15 16:48:12 -070035 }
gauthamt1e313bc2014-11-10 15:45:56 -080036 defer data.Close()
37 defer signature.Close()
38 vr, err := serialization.NewVerifyingReader(data, signature, publicKey)
Ankur100eb272014-09-15 16:48:12 -070039 if err != nil {
40 return err
41 }
Suharsh Sivakumar51afaa32015-01-05 15:36:10 -080042 dec, err := vom2.NewDecoder(vr)
43 if err != nil {
44 return err
45 }
46 return dec.Decode(obj)
Ankur100eb272014-09-15 16:48:12 -070047}