summaryrefslogtreecommitdiffstats
path: root/katzenpost/dispatcher/codec.go
blob: 3053dde60b56656bed9c803330356a247e8c2993 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package dispatcher

import (
	"fmt"

	"github.com/fxamacker/cbor/v2"
)

func EncodeEnvelope(envelope Envelope) ([]byte, error) {
	encoded, err := cbor.Marshal(envelope)
	if err != nil {
		return nil, fmt.Errorf("encode envelope: %w", err)
	}
	if len(encoded) > MaxEnvelopeBytes {
		return nil, fmt.Errorf("encoded envelope is too large")
	}
	return encoded, nil
}

func DecodeEnvelope(encoded []byte) (Envelope, error) {
	if len(encoded) == 0 || len(encoded) > MaxEnvelopeBytes {
		return Envelope{}, fmt.Errorf("invalid encoded envelope size")
	}
	var envelope Envelope
	if err := cbor.Unmarshal(encoded, &envelope); err != nil {
		return Envelope{}, fmt.Errorf("decode envelope: %w", err)
	}
	return envelope, nil
}