in pkg/berglas/berglas.go [167:189]
func envelopeDecrypt(dek, data []byte) ([]byte, error) {
block, err := aes.NewCipher(dek)
if err != nil {
return nil, fmt.Errorf("failed to create cipher from dek: %w", err)
}
aesgcm, err := cipher.NewGCM(block)
if err != nil {
return nil, fmt.Errorf("failed to create gcm from dek: %w", err)
}
size := aesgcm.NonceSize()
if len(data) < size {
return nil, fmt.Errorf("malformed ciphertext")
}
nonce, ciphertext := data[:size], data[size:]
plaintext, err := aesgcm.Open(nil, nonce, ciphertext, nil)
if err != nil {
return nil, fmt.Errorf("failed to decrypt ciphertext with dek: %w", err)
}
return plaintext, nil
}