@@ -22,24 +22,27 @@ import (
2222 sopsapi "github.com/getsops/sops/v3"
2323 "github.com/getsops/sops/v3/aes"
2424 scommon "github.com/getsops/sops/v3/cmd/sops/common"
25+ "github.com/getsops/sops/v3/config"
2526 "github.com/getsops/sops/v3/decrypt"
2627 "github.com/getsops/sops/v3/gcpkms"
2728 skeys "github.com/getsops/sops/v3/keys"
29+ awskms "github.com/getsops/sops/v3/kms"
2830 jsonstore "github.com/getsops/sops/v3/stores/json"
2931 "github.com/getsops/sops/v3/version"
3032)
3133
3234func Decrypt (data []byte ) ([]byte , error ) {
33- ret , err := decrypt .Data (data , "json " )
35+ ret , err := decrypt .Data (data , "binary " )
3436 if err != nil {
3537 return nil , err
3638 }
3739 return ret , nil
3840}
3941
4042func Encrypt (data []byte ) ([]byte , error ) {
41- input := & jsonstore.Store {}
42- output := & jsonstore.Store {}
43+ storeConfig := & config.JSONBinaryStoreConfig {}
44+ input := jsonstore .NewBinaryStore (storeConfig )
45+ output := jsonstore .NewBinaryStore (storeConfig )
4346
4447 // prevent double encryption
4548 branches , err := input .LoadPlainFile (data )
@@ -56,20 +59,12 @@ func Encrypt(data []byte) ([]byte, error) {
5659
5760 // create tree and encrypt
5861 tree := sopsapi.Tree {Branches : branches }
59-
60- // Configure Google KMS from env to encrypt
61- rid := os .Getenv ("DINGO_GCP_KMS_RESOURCE_ID" )
62- if rid == "" {
63- return nil , errors .New (
64- "DINGO_GCP_KMS_RESOURCE_ID not set: SOPS requires at least one master key to encrypt" ,
65- )
66- }
67- keys := []skeys.MasterKey {}
68- for _ , k := range gcpkms .MasterKeysFromResourceIDString (rid ) {
69- keys = append (keys , k )
62+ keyGroups , err := getMasterKeyGroupsFromEnv ()
63+ if err != nil {
64+ return nil , err
7065 }
7166 tree .Metadata = sopsapi.Metadata {
72- KeyGroups : []sopsapi. KeyGroup { keys } ,
67+ KeyGroups : keyGroups ,
7368 Version : version .Version ,
7469 }
7570
@@ -91,3 +86,38 @@ func Encrypt(data []byte) ([]byte, error) {
9186 }
9287 return encrypted , nil
9388}
89+
90+ func getMasterKeyGroupsFromEnv () ([]sopsapi.KeyGroup , error ) {
91+ keyGroups := []sopsapi.KeyGroup {}
92+
93+ // Configure Google KMS from env to encrypt
94+ if rid := os .Getenv ("DINGO_GCP_KMS_RESOURCE_ID" ); rid != "" {
95+ keys := []skeys.MasterKey {}
96+ for _ , k := range gcpkms .MasterKeysFromResourceIDString (rid ) {
97+ keys = append (keys , k )
98+ }
99+ if len (keys ) > 0 {
100+ keyGroups = append (keyGroups , keys )
101+ }
102+ }
103+
104+ // Configure AWS KMS from env to encrypt
105+ if arns := os .Getenv ("DINGO_AWS_KMS_KEY_ARNS" ); arns != "" {
106+ keys := []skeys.MasterKey {}
107+ profile := os .Getenv ("DINGO_AWS_KMS_PROFILE" )
108+ for _ , k := range awskms .MasterKeysFromArnString (arns , nil , profile ) {
109+ keys = append (keys , k )
110+ }
111+ if len (keys ) > 0 {
112+ keyGroups = append (keyGroups , keys )
113+ }
114+ }
115+
116+ if len (keyGroups ) == 0 {
117+ return nil , errors .New (
118+ "SOPS requires at least one master key to encrypt: set DINGO_GCP_KMS_RESOURCE_ID and/or DINGO_AWS_KMS_KEY_ARNS" ,
119+ )
120+ }
121+
122+ return keyGroups , nil
123+ }
0 commit comments