1package s3crypto
2
3import (
4	"encoding/base64"
5	"strconv"
6)
7
8// AESGCMNoPadding is the constant value that is used to specify
9// the cek algorithm consiting of AES GCM with no padding.
10const AESGCMNoPadding = "AES/GCM/NoPadding"
11
12// AESCBC is the string constant that signifies the AES CBC algorithm cipher.
13const AESCBC = "AES/CBC"
14
15func encodeMeta(reader lengthReader, cd CipherData) (Envelope, error) {
16	iv := base64.StdEncoding.EncodeToString(cd.IV)
17	key := base64.StdEncoding.EncodeToString(cd.EncryptedKey)
18
19	contentLength := reader.GetContentLength()
20
21	matdesc, err := cd.MaterialDescription.encodeDescription()
22	if err != nil {
23		return Envelope{}, err
24	}
25
26	return Envelope{
27		CipherKey:             key,
28		IV:                    iv,
29		MatDesc:               string(matdesc),
30		WrapAlg:               cd.WrapAlgorithm,
31		CEKAlg:                cd.CEKAlgorithm,
32		TagLen:                cd.TagLength,
33		UnencryptedContentLen: strconv.FormatInt(contentLength, 10),
34	}, nil
35}
36