Asim Shankar | ae8d4c5 | 2014-10-08 13:03:31 -0700 | [diff] [blame] | 1 | package security |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 2 | |
| 3 | import ( |
gauthamt | 1e313bc | 2014-11-10 15:45:56 -0800 | [diff] [blame] | 4 | "fmt" |
| 5 | "io" |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 6 | |
Jiri Simsa | 764efb7 | 2014-12-25 20:57:03 -0800 | [diff] [blame] | 7 | "v.io/core/veyron/security/serialization" |
| 8 | "v.io/core/veyron2/security" |
Todd Wang | 3425a90 | 2015-01-21 18:43:59 -0800 | [diff] [blame] | 9 | "v.io/core/veyron2/vom" |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 10 | ) |
| 11 | |
gauthamt | 1e313bc | 2014-11-10 15:45:56 -0800 | [diff] [blame] | 12 | func 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) |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 15 | } |
gauthamt | 1e313bc | 2014-11-10 15:45:56 -0800 | [diff] [blame] | 16 | swc, err := serialization.NewSigningWriteCloser(data, signature, signer, nil) |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 17 | if err != nil { |
| 18 | return err |
| 19 | } |
Todd Wang | 3425a90 | 2015-01-21 18:43:59 -0800 | [diff] [blame] | 20 | enc, err := vom.NewBinaryEncoder(swc) |
Suharsh Sivakumar | 51afaa3 | 2015-01-05 15:36:10 -0800 | [diff] [blame] | 21 | if err != nil { |
| 22 | swc.Close() |
| 23 | return err |
| 24 | } |
| 25 | if err := enc.Encode(obj); err != nil { |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 26 | swc.Close() |
| 27 | return err |
| 28 | } |
gauthamt | 1e313bc | 2014-11-10 15:45:56 -0800 | [diff] [blame] | 29 | return swc.Close() |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 30 | } |
| 31 | |
gauthamt | 1e313bc | 2014-11-10 15:45:56 -0800 | [diff] [blame] | 32 | func 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) |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 35 | } |
gauthamt | 1e313bc | 2014-11-10 15:45:56 -0800 | [diff] [blame] | 36 | defer data.Close() |
| 37 | defer signature.Close() |
| 38 | vr, err := serialization.NewVerifyingReader(data, signature, publicKey) |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 39 | if err != nil { |
| 40 | return err |
| 41 | } |
Todd Wang | 3425a90 | 2015-01-21 18:43:59 -0800 | [diff] [blame] | 42 | dec, err := vom.NewDecoder(vr) |
Suharsh Sivakumar | 51afaa3 | 2015-01-05 15:36:10 -0800 | [diff] [blame] | 43 | if err != nil { |
| 44 | return err |
| 45 | } |
| 46 | return dec.Decode(obj) |
Ankur | 100eb27 | 2014-09-15 16:48:12 -0700 | [diff] [blame] | 47 | } |