public override EncryptResult Encrypt(EncryptParameters parameters, CancellationToken cancellationToken = default) { Argument.AssertNotNull(parameters, nameof(parameters)); ThrowIfTimeInvalid(); EncryptionAlgorithm algorithm = parameters.Algorithm; if (algorithm.GetAesCbcEncryptionAlgorithm() is AesCbc aesCbc) { // Make sure the IV is initialized. parameters.Initialize(); using ICryptoTransform encryptor = aesCbc.CreateEncryptor(KeyMaterial.K, parameters.Iv); byte[] plaintext = parameters.Plaintext; byte[] ciphertext = encryptor.TransformFinalBlock(plaintext, 0, plaintext.Length); return(new EncryptResult { Algorithm = algorithm, KeyId = KeyMaterial.Id, Ciphertext = ciphertext, Iv = parameters.Iv, }); } else { KeysEventSource.Singleton.AlgorithmNotSupported(nameof(Encrypt), algorithm); return(null); } }
public virtual async Task <Response <EncryptResult> > EncryptAsync(EncryptParameters parameters, CancellationToken cancellationToken = default) { using DiagnosticScope scope = Pipeline.CreateScope($"{nameof(RemoteCryptographyClient)}.{nameof(Encrypt)}"); scope.AddAttribute("key", _keyId); scope.Start(); try { // Make sure the IV is initialized. // TODO: Remove this call once the service will initialized it: https://github.com/Azure/azure-sdk-for-net/issues/16175 parameters.Initialize(); return(await Pipeline.SendRequestAsync(RequestMethod.Post, parameters, () => new EncryptResult { Algorithm = parameters.Algorithm }, cancellationToken, "/encrypt").ConfigureAwait(false)); } catch (Exception e) { scope.Failed(e); throw; } }