xframe/vendor/github.com/aliyun/alibabacloud-dkms-transfer-.../sdk/encrypt.go

87 lines
2.7 KiB
Go
Raw Normal View History

2024-10-12 12:55:20 +08:00
package sdk
import (
"bytes"
"encoding/base64"
"encoding/json"
"encoding/xml"
"errors"
"fmt"
"github.com/alibabacloud-go/tea/tea"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
"github.com/aliyun/alibaba-cloud-sdk-go/services/kms"
dedicatedkmsopenapiutil "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi-util"
dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
"io/ioutil"
"net/http"
"strings"
)
func (client *KmsTransferClient) Encrypt(request *kms.EncryptRequest) (*kms.EncryptResponse, error) {
if client.isUseKmsShareGateway {
return client.Client.Encrypt(request)
}
var aad []byte
if request.EncryptionContext != "" {
var err error
aad, err = EncodeUserEncryptionContext(request.EncryptionContext)
if err != nil {
return nil, err
}
}
dkmsRequest := &dedicatedkmssdk.EncryptRequest{
KeyId: tea.String(request.KeyId),
Plaintext: []byte(request.Plaintext),
Aad: aad,
}
ignoreSSL := client.GetHTTPSInsecure()
runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
Verify: tea.String(client.Verify),
IgnoreSSL: tea.Bool(ignoreSSL),
}
runtimeOptions.Headers = append(runtimeOptions.Headers, tea.String(MigrationKeyVersionIdKey))
dkmsResponse, err := client.dkmsClient.EncryptWithOptions(dkmsRequest, runtimeOptions)
if err != nil {
return nil, TransferTeaErrorServerError(err)
}
keyVersionId, ok := dkmsResponse.Headers[MigrationKeyVersionIdKey]
if !ok {
return nil, errors.New(fmt.Sprintf("Can not found response headers parameter[%s]", MigrationKeyVersionIdKey))
}
mkvId := []byte(tea.StringValue(keyVersionId))
var ciphertextBlob []byte
ciphertextBlob = append(ciphertextBlob, mkvId...)
ciphertextBlob = append(ciphertextBlob, dkmsResponse.Iv...)
ciphertextBlob = append(ciphertextBlob, dkmsResponse.CiphertextBlob...)
kmsResponse := kms.CreateEncryptResponse()
kmsResponse.KeyId = tea.StringValue(dkmsResponse.KeyId)
kmsResponse.KeyVersionId = tea.StringValue(keyVersionId)
kmsResponse.CiphertextBlob = base64.StdEncoding.EncodeToString(ciphertextBlob)
kmsResponse.RequestId = tea.StringValue(dkmsResponse.RequestId)
var body []byte
if strings.ToUpper(request.AcceptFormat) == "JSON" {
body, err = json.Marshal(kmsResponse)
if err != nil {
return nil, err
}
} else if strings.ToUpper(request.AcceptFormat) == "XML" {
body, err = xml.Marshal(kmsResponse)
if err != nil {
return nil, err
}
}
httpResponse := &http.Response{}
httpResponse.StatusCode = http.StatusOK
httpResponse.Body = ioutil.NopCloser(bytes.NewReader(body))
err = responses.Unmarshal(kmsResponse, httpResponse, request.AcceptFormat)
if err != nil {
return nil, err
}
return kmsResponse, nil
}