11package ejsonkms
22
33import (
4+ "bytes"
45 "encoding/json"
56 "errors"
6- "io/ioutil"
77 "os"
88
99 "github.com/Shopify/ejson"
@@ -40,42 +40,33 @@ func Keygen(kmsKeyID, awsRegion string) (EjsonKmsKeys, error) {
4040
4141// Decrypt decrypts an EJSON file
4242func Decrypt (ejsonFilePath , awsRegion string ) ([]byte , error ) {
43- privateKeyEnc , err := findPrivateKeyEnc (ejsonFilePath )
43+ data , err := os . ReadFile (ejsonFilePath )
4444 if err != nil {
4545 return nil , err
4646 }
4747
48- kmsDecryptedPrivateKey , err := decryptPrivateKeyWithKMS ( privateKeyEnc , awsRegion )
48+ privateKeyEnc , err := extractPrivateKeyEnc ( data )
4949 if err != nil {
5050 return nil , err
5151 }
5252
53- decrypted , err := ejson . DecryptFile ( ejsonFilePath , "" , kmsDecryptedPrivateKey )
53+ kmsDecryptedPrivateKey , err := decryptPrivateKeyWithKMS ( privateKeyEnc , awsRegion )
5454 if err != nil {
5555 return nil , err
5656 }
5757
58- return decrypted , nil
59- }
60-
61- func findPrivateKeyEnc (ejsonFilePath string ) (key string , err error ) {
62- var (
63- ejsonKmsKeys EjsonKmsKeys
64- )
65-
66- file , err := os .Open (ejsonFilePath )
67- if err != nil {
68- return "" , err
58+ var output bytes.Buffer
59+ if err := ejson .Decrypt (bytes .NewReader (data ), & output , "" , kmsDecryptedPrivateKey ); err != nil {
60+ return nil , err
6961 }
70- defer file .Close ()
7162
72- data , err := ioutil .ReadAll (file )
73- if err != nil {
74- return "" , err
75- }
63+ return output .Bytes (), nil
64+ }
7665
77- err = json .Unmarshal (data , & ejsonKmsKeys )
78- if err != nil {
66+ func extractPrivateKeyEnc (data []byte ) (string , error ) {
67+ var ejsonKmsKeys EjsonKmsKeys
68+
69+ if err := json .Unmarshal (data , & ejsonKmsKeys ); err != nil {
7970 return "" , err
8071 }
8172
@@ -85,3 +76,12 @@ func findPrivateKeyEnc(ejsonFilePath string) (key string, err error) {
8576
8677 return ejsonKmsKeys .PrivateKeyEnc , nil
8778}
79+
80+ // findPrivateKeyEnc reads a file and extracts the private key
81+ func findPrivateKeyEnc (ejsonFilePath string ) (string , error ) {
82+ data , err := os .ReadFile (ejsonFilePath )
83+ if err != nil {
84+ return "" , err
85+ }
86+ return extractPrivateKeyEnc (data )
87+ }
0 commit comments