From 29668238181b1676888191bfb7d7d16f3a0fe06c Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Mon, 26 Apr 2021 16:01:52 -0700 Subject: [PATCH] use jsoniter for json marshal/unmarshal in KMS (#12146) Signed-off-by: Harshavardhana --- cmd/erasure-object.go | 1 - pkg/kms/kms.go | 3 +++ pkg/kms/single-key.go | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/cmd/erasure-object.go b/cmd/erasure-object.go index efda431fa..eab7a2e00 100644 --- a/cmd/erasure-object.go +++ b/cmd/erasure-object.go @@ -1499,7 +1499,6 @@ func (er erasureObjects) restoreTransitionedObject(ctx context.Context, bucket s } _, err = er.CompleteMultipartUpload(ctx, bucket, object, uploadID, uploadedParts, ObjectOptions{ - VersionID: oi.VersionID, MTime: oi.ModTime, Versioned: globalBucketVersioningSys.Enabled(bucket), VersionSuspended: globalBucketVersioningSys.Suspended(bucket), diff --git a/pkg/kms/kms.go b/pkg/kms/kms.go index b47107739..92d645f0f 100644 --- a/pkg/kms/kms.go +++ b/pkg/kms/kms.go @@ -20,6 +20,8 @@ package kms import ( "encoding" "encoding/json" + + jsoniter "github.com/json-iterator/go" ) // KMS is the generic interface that abstracts over @@ -106,6 +108,7 @@ func (d *DEK) UnmarshalText(text []byte) error { Ciphertext []byte `json:"ciphertext"` } var v JSON + var json = jsoniter.ConfigCompatibleWithStandardLibrary if err := json.Unmarshal(text, &v); err != nil { return err } diff --git a/pkg/kms/single-key.go b/pkg/kms/single-key.go index 4ede66a82..d03de45f1 100644 --- a/pkg/kms/single-key.go +++ b/pkg/kms/single-key.go @@ -23,12 +23,12 @@ import ( "crypto/hmac" "crypto/sha256" "encoding/base64" - "encoding/json" "errors" "fmt" "strconv" "strings" + jsoniter "github.com/json-iterator/go" "github.com/secure-io/sio-go/sioutil" "golang.org/x/crypto/chacha20" "golang.org/x/crypto/chacha20poly1305" @@ -152,6 +152,7 @@ func (kms secretKey) GenerateKey(keyID string, context Context) (DEK, error) { associatedData, _ := context.MarshalText() ciphertext := aead.Seal(nil, nonce, plaintext, associatedData) + var json = jsoniter.ConfigCompatibleWithStandardLibrary ciphertext, err = json.Marshal(encryptedKey{ Algorithm: algorithm, IV: iv, @@ -174,9 +175,11 @@ func (kms secretKey) DecryptKey(keyID string, ciphertext []byte, context Context } var encryptedKey encryptedKey + var json = jsoniter.ConfigCompatibleWithStandardLibrary if err := json.Unmarshal(ciphertext, &encryptedKey); err != nil { return nil, err } + if n := len(encryptedKey.IV); n != 16 { return nil, fmt.Errorf("kms: invalid iv size") }