You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.1 KiB
92 lines
3.1 KiB
package coscrypto_test
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"os"
|
|
|
|
"git.ouxuan.net/tommy/cos-go-sdk-v5"
|
|
coscrypto "git.ouxuan.net/tommy/cos-go-sdk-v5/crypto"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
|
|
kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118"
|
|
)
|
|
|
|
func (s *CosTestSuite) TestMasterKmsCipher_TestKmsClient() {
|
|
kmsclient, _ := coscrypto.NewKMSClient(&cos.Credential{
|
|
SecretID: os.Getenv("COS_SECRETID"),
|
|
SecretKey: os.Getenv("COS_SECRETKEY"),
|
|
}, kRegion)
|
|
|
|
originData := make([]byte, 1024)
|
|
_, err := rand.Read(originData)
|
|
|
|
ctx := make(map[string]string)
|
|
ctx["desc"] = string(originData[:10])
|
|
bs, _ := json.Marshal(ctx)
|
|
ctxJson := string(bs)
|
|
enReq := kms.NewEncryptRequest()
|
|
enReq.KeyId = common.StringPtr(os.Getenv("KMSID"))
|
|
enReq.EncryptionContext = common.StringPtr(ctxJson)
|
|
enReq.Plaintext = common.StringPtr(base64.StdEncoding.EncodeToString(originData))
|
|
enResp, err := kmsclient.Encrypt(enReq)
|
|
assert.Nil(s.T(), err, "Encrypt Failed")
|
|
encryptedData := []byte(*enResp.Response.CiphertextBlob)
|
|
|
|
deReq := kms.NewDecryptRequest()
|
|
deReq.CiphertextBlob = common.StringPtr(string(encryptedData))
|
|
deReq.EncryptionContext = common.StringPtr(ctxJson)
|
|
deResp, err := kmsclient.Decrypt(deReq)
|
|
assert.Nil(s.T(), err, "Decrypt Failed")
|
|
decryptedData, err := base64.StdEncoding.DecodeString(*deResp.Response.Plaintext)
|
|
assert.Nil(s.T(), err, "base64 Decode Failed")
|
|
assert.Equal(s.T(), bytes.Compare(originData, decryptedData), 0, "originData != decryptedData")
|
|
}
|
|
|
|
func (s *CosTestSuite) TestMasterKmsCipher_TestNormal() {
|
|
kmsclient, _ := coscrypto.NewKMSClient(&cos.Credential{
|
|
SecretID: os.Getenv("COS_SECRETID"),
|
|
SecretKey: os.Getenv("COS_SECRETKEY"),
|
|
}, kRegion)
|
|
|
|
desc := make(map[string]string)
|
|
desc["test"] = "TestMasterKmsCipher_TestNormal"
|
|
master, err := coscrypto.CreateMasterKMS(kmsclient, os.Getenv("KMSID"), desc)
|
|
assert.Nil(s.T(), err, "CreateMasterKMS Failed")
|
|
|
|
originData := make([]byte, 1024)
|
|
_, err = rand.Read(originData)
|
|
|
|
encryptedData, err := master.Encrypt(originData)
|
|
assert.Nil(s.T(), err, "Encrypt Failed")
|
|
|
|
decryptedData, err := master.Decrypt(encryptedData)
|
|
assert.Nil(s.T(), err, "Decrypt Failed")
|
|
|
|
assert.Equal(s.T(), bytes.Compare(originData, decryptedData), 0, "originData != decryptedData")
|
|
}
|
|
|
|
func (s *CosTestSuite) TestMasterKmsCipher_TestError() {
|
|
kmsclient, _ := coscrypto.NewKMSClient(&cos.Credential{
|
|
SecretID: os.Getenv("COS_SECRETID"),
|
|
SecretKey: os.Getenv("COS_SECRETKEY"),
|
|
}, kRegion)
|
|
|
|
desc := make(map[string]string)
|
|
desc["test"] = "TestMasterKmsCipher_TestNormal"
|
|
master, err := coscrypto.CreateMasterKMS(kmsclient, "ErrorKMSID", desc)
|
|
assert.Nil(s.T(), err, "CreateMasterKMS Failed")
|
|
|
|
originData := make([]byte, 1024)
|
|
_, err = rand.Read(originData)
|
|
|
|
encryptedData, err := master.Encrypt(originData)
|
|
assert.NotNil(s.T(), err, "Encrypt Failed")
|
|
|
|
decryptedData, err := master.Decrypt(encryptedData)
|
|
assert.NotNil(s.T(), err, "Decrypt Failed")
|
|
|
|
assert.NotEqual(s.T(), bytes.Compare(originData, decryptedData), 0, "originData != decryptedData")
|
|
}
|