| // Copyright (c) The OpenTofu Authors | |
| // SPDX-License-Identifier: MPL-2.0 | |
| // Copyright (c) 2023 HashiCorp, Inc. | |
| // SPDX-License-Identifier: MPL-2.0 | |
| package static_test | |
| import ( | |
| "context" | |
| "fmt" | |
| "strings" | |
| "github.com/opentofu/opentofu/internal/configs" | |
| "github.com/opentofu/opentofu/internal/encryption" | |
| "github.com/opentofu/opentofu/internal/encryption/config" | |
| "github.com/opentofu/opentofu/internal/encryption/keyprovider/static" | |
| "github.com/opentofu/opentofu/internal/encryption/method/aesgcm" | |
| "github.com/opentofu/opentofu/internal/encryption/registry/lockingencryptionregistry" | |
| ) | |
| var hclConfig = `key_provider "static" "foo" { | |
| key = "6f6f706830656f67686f6834616872756f3751756165686565796f6f72653169" | |
| } | |
| method "aes_gcm" "bar" { | |
| keys = key_provider.static.foo | |
| } | |
| plan { | |
| method = method.aes_gcm.bar | |
| } | |
| ` | |
| // Example is a full end-to-end example of encrypting and decrypting a plan file. | |
| func Example() { | |
| registry := lockingencryptionregistry.New() | |
| if err := registry.RegisterKeyProvider(static.New()); err != nil { | |
| panic(err) | |
| } | |
| if err := registry.RegisterMethod(aesgcm.New()); err != nil { | |
| panic(err) | |
| } | |
| cfg, diags := config.LoadConfigFromString("test.hcl", hclConfig) | |
| if diags.HasErrors() { | |
| panic(diags) | |
| } | |
| staticEvaluator := configs.NewStaticEvaluator(nil, nil, configs.RootModuleCallForTesting()) | |
| enc, diags := encryption.New(context.Background(), registry, cfg, staticEvaluator) | |
| if diags.HasErrors() { | |
| panic(diags) | |
| } | |
| encryptor := enc.Plan() | |
| encryptedPlan, err := encryptor.EncryptPlan([]byte("Hello world!")) | |
| if err != nil { | |
| panic(err) | |
| } | |
| if strings.Contains(string(encryptedPlan), "Hello world!") { | |
| panic("The plan was not encrypted!") | |
| } | |
| decryptedPlan, err := encryptor.DecryptPlan(encryptedPlan) | |
| if err != nil { | |
| panic(err) | |
| } | |
| fmt.Printf("%s", decryptedPlan) | |
| // Output: Hello world! | |
| } |