blob: 7afc1f20afe649e695f10820f62b31cb3ab6328b [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"
Todd Wang3425a902015-01-21 18:43:59 -08009 "v.io/core/veyron2/vom"
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 }
Todd Wang3425a902015-01-21 18:43:59 -080020 enc, err := vom.NewBinaryEncoder(swc)
Suharsh Sivakumar51afaa32015-01-05 15:36:10 -080021 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 }
Todd Wang3425a902015-01-21 18:43:59 -080042 dec, err := vom.NewDecoder(vr)
Suharsh Sivakumar51afaa32015-01-05 15:36:10 -080043 if err != nil {
44 return err
45 }
46 return dec.Decode(obj)
Ankur100eb272014-09-15 16:48:12 -070047}