/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Serialization/AesCryptoStreamProvider.cs
81 строка
2 KB
Chris Patterson
Adding multiple framework support for net461, netstandard2.0, netstandard2.1, and net6.0 where appropriate
07 май 2022, 04:26
07 май 2022, 04:26
71bb847
Код
Авторство
О чём код?
namespace MassTransit.Serialization { using System; using System.IO; using System.Runtime.Serialization; using System.Security.Cryptography; public class AesCryptoStreamProvider : ICryptoStreamProvider { readonly string _defaultKeyId; readonly ISymmetricKeyProvider _keyProvider; readonly PaddingMode _paddingMode; public AesCryptoStreamProvider(ISymmetricKeyProvider keyProvider, string defaultKeyId, PaddingMode paddingMode = PaddingMode.PKCS7) { _paddingMode = paddingMode; _keyProvider = keyProvider; _defaultKeyId = defaultKeyId; } Stream ICryptoStreamProvider.GetEncryptStream(Stream stream, string keyId, CryptoStreamMode streamMode) { if (stream == null) throw new ArgumentNullException(nameof(stream)); keyId ??= _defaultKeyId; if (!_keyProvider.TryGetKey(keyId, out var key)) throw new SerializationException("Encryption Key not found: " + keyId); var encryptor = CreateEncryptor(key.Key, key.IV); return new DisposingCryptoStream(stream, encryptor, streamMode); } Stream ICryptoStreamProvider.GetDecryptStream(Stream stream, string keyId, CryptoStreamMode streamMode) { if (stream == null) throw new ArgumentNullException(nameof(stream)); keyId ??= _defaultKeyId; if (!_keyProvider.TryGetKey(keyId, out var key)) throw new SerializationException("Encryption Key not found: " + keyId); var encryptor = CreateDecryptor(key.Key, key.IV); return new DisposingCryptoStream(stream, encryptor, streamMode); } public void Probe(ProbeContext context) { context.Add("defaultKeyId", _defaultKeyId); context.Add("paddingMode", _paddingMode.ToString()); } ICryptoTransform CreateDecryptor(byte[] key, byte[] iv) { using var provider = CreateAes(); return provider.CreateDecryptor(key, iv); } public ICryptoTransform CreateEncryptor(byte[] key, byte[] iv) { using (var provider = CreateAes()) { return provider.CreateEncryptor(key, iv); } } Aes CreateAes() { var aes = Aes.Create(); aes.Padding = _paddingMode; return aes; } } }