DecodeSessionState decodes a LZ4 compressed MessagePack into a Session State
(data []byte, c encryption.Cipher, compressed bool)
| 201 | |
| 202 | // DecodeSessionState decodes a LZ4 compressed MessagePack into a Session State |
| 203 | func DecodeSessionState(data []byte, c encryption.Cipher, compressed bool) (*SessionState, error) { |
| 204 | decrypted, err := c.Decrypt(data) |
| 205 | if err != nil { |
| 206 | return nil, fmt.Errorf("error decrypting the session state: %w", err) |
| 207 | } |
| 208 | |
| 209 | packed := decrypted |
| 210 | if compressed { |
| 211 | packed, err = lz4Decompress(decrypted) |
| 212 | if err != nil { |
| 213 | return nil, err |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | var ss SessionState |
| 218 | err = msgpack.Unmarshal(packed, &ss) |
| 219 | if err != nil { |
| 220 | return nil, fmt.Errorf("error unmarshalling data to session state: %w", err) |
| 221 | } |
| 222 | |
| 223 | return &ss, nil |
| 224 | } |
| 225 | |
| 226 | // lz4Compress compresses with LZ4 |
| 227 | // |