|
|
package coscrypto_test
import ( "bytes" "crypto/aes" "crypto/cipher" "crypto/rand" "io/ioutil" math_rand "math/rand"
coscrypto "git.ouxuan.net/tommy/cos-go-sdk-v5/crypto" "github.com/stretchr/testify/assert" )
type EmptyMasterCipher struct{}
func (mc EmptyMasterCipher) Encrypt(b []byte) ([]byte, error) { return b, nil } func (mc EmptyMasterCipher) Decrypt(b []byte) ([]byte, error) { return b, nil } func (mc EmptyMasterCipher) GetWrapAlgorithm() string { return "Test/EmptyWrapAlgo" } func (mc EmptyMasterCipher) GetMatDesc() string { return "Empty Desc" }
func (s *CosTestSuite) TestCryptoObjectService_EncryptAndDecrypt() { var masterCipher EmptyMasterCipher builder := coscrypto.CreateAesCtrBuilder(masterCipher)
contentCipher, err := builder.ContentCipher() assert.Nil(s.T(), err, "CryptoObject.CreateAesCtrBuilder Failed")
dataSize := math_rand.Int63n(1024 * 1024 * 32) originData := make([]byte, dataSize) rand.Read(originData) // 加密
r1 := bytes.NewReader(originData) reader1, err := contentCipher.EncryptContent(r1) assert.Nil(s.T(), err, "CryptoObject.contentCipher.Encrypt Failed") encryptedData, err := ioutil.ReadAll(reader1) assert.Nil(s.T(), err, "CryptoObject.Read Failed")
// 解密
r2 := bytes.NewReader(encryptedData) reader2, err := contentCipher.DecryptContent(r2) decryptedData, err := ioutil.ReadAll(reader2) assert.Nil(s.T(), err, "CryptoObject.Read Failed") assert.Equal(s.T(), bytes.Compare(originData, decryptedData), 0, "decryptData != originData") }
func (s *CosTestSuite) TestCryptoObjectService_Encrypt() { var masterCipher EmptyMasterCipher builder := coscrypto.CreateAesCtrBuilder(masterCipher)
contentCipher, err := builder.ContentCipher() assert.Nil(s.T(), err, "CryptoObject.CreateAesCtrBuilder Failed")
dataSize := math_rand.Int63n(1024 * 1024 * 32) originData := make([]byte, dataSize) rand.Read(originData)
// 加密
r := bytes.NewReader(originData) reader, err := contentCipher.EncryptContent(r) assert.Nil(s.T(), err, "CryptoObject.contentCipher.Encrypt Failed") encryptedData, err := ioutil.ReadAll(reader) assert.Nil(s.T(), err, "CryptoObject.Read Failed")
// 直接解密
cd := contentCipher.GetCipherData() block, err := aes.NewCipher(cd.Key) assert.Nil(s.T(), err, "CryptoObject.NewCipher Failed") decrypter := cipher.NewCTR(block, cd.IV) decryptedData := make([]byte, len(originData)) decrypter.XORKeyStream(decryptedData, encryptedData) assert.Equal(s.T(), bytes.Compare(originData, decryptedData), 0, "decryptData != originData") }
func (s *CosTestSuite) TestCryptoObjectService_Decrypt() { var masterCipher EmptyMasterCipher builder := coscrypto.CreateAesCtrBuilder(masterCipher)
contentCipher, err := builder.ContentCipher() assert.Nil(s.T(), err, "CryptoObject.CreateAesCtrBuilder Failed") dataSize := math_rand.Int63n(1024 * 1024 * 32) originData := make([]byte, dataSize) rand.Read(originData)
// 直接加密
cd := contentCipher.GetCipherData() block, err := aes.NewCipher(cd.Key) assert.Nil(s.T(), err, "CryptoObject.NewCipher Failed") encrypter := cipher.NewCTR(block, cd.IV) encryptedData := make([]byte, len(originData)) encrypter.XORKeyStream(encryptedData, originData)
// 解密
r := bytes.NewReader(encryptedData) reader, err := contentCipher.DecryptContent(r) assert.Nil(s.T(), err, "CryptoObject.contentCipher.Encrypt Failed") decryptedData, err := ioutil.ReadAll(reader) assert.Nil(s.T(), err, "CryptoObject.Read Failed") assert.Equal(s.T(), bytes.Compare(originData, decryptedData), 0, "decryptData != originData") }
|