DecryptContext decrypts the EncryptedKey with HuaweiCloud KMS and returns the result.
(ctx context.Context)
| 199 | |
| 200 | // DecryptContext decrypts the EncryptedKey with HuaweiCloud KMS and returns the result. |
| 201 | func (key *MasterKey) DecryptContext(ctx context.Context) ([]byte, error) { |
| 202 | client, err := key.createKMSClient(ctx) |
| 203 | if err != nil { |
| 204 | log.WithField("keyID", key.KeyID).Info("Decryption failed") |
| 205 | return nil, fmt.Errorf("failed to create HuaweiCloud KMS client: %w", err) |
| 206 | } |
| 207 | |
| 208 | decryptAlgorithm := model.GetDecryptDataRequestBodyEncryptionAlgorithmEnum().SYMMETRIC_DEFAULT |
| 209 | |
| 210 | request := &model.DecryptDataRequest{ |
| 211 | Body: &model.DecryptDataRequestBody{ |
| 212 | CipherText: key.EncryptedKey, |
| 213 | EncryptionAlgorithm: &decryptAlgorithm, |
| 214 | KeyId: &key.KeyUUID, |
| 215 | }, |
| 216 | } |
| 217 | |
| 218 | response, err := client.DecryptData(request) |
| 219 | if err != nil { |
| 220 | log.WithField("keyID", key.KeyID).Info("Decryption failed") |
| 221 | return nil, fmt.Errorf("failed to decrypt sops data key with HuaweiCloud KMS: %w", err) |
| 222 | } |
| 223 | |
| 224 | if response.PlainText == nil { |
| 225 | return nil, fmt.Errorf("decryption response missing plaintext") |
| 226 | } |
| 227 | decrypted, err := base64.StdEncoding.DecodeString(*response.PlainText) |
| 228 | if err != nil { |
| 229 | log.WithField("keyID", key.KeyID).Info("Decryption failed") |
| 230 | return nil, fmt.Errorf("failed to base64 decode decrypted data key: %w", err) |
| 231 | } |
| 232 | |
| 233 | log.WithField("keyID", key.KeyID).Info("Decryption succeeded") |
| 234 | return decrypted, nil |
| 235 | } |
| 236 | |
| 237 | // NeedsRotation returns whether the data key needs to be rotated or not. |
| 238 | func (key *MasterKey) NeedsRotation() bool { |
no test coverage detected