1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using Best.HTTP.SecureProtocol.Org.BouncyCastle.Utilities;
- namespace Best.HTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto.Impl
- {
- /// <summary>Useful utility methods.</summary>
- public abstract class TlsImplUtilities
- {
- public static bool IsSsl(TlsCryptoParameters cryptoParams)
- {
- return cryptoParams.ServerVersion.IsSsl;
- }
- public static bool IsTlsV10(ProtocolVersion version)
- {
- return ProtocolVersion.TLSv10.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion());
- }
- public static bool IsTlsV10(TlsCryptoParameters cryptoParams)
- {
- return IsTlsV10(cryptoParams.ServerVersion);
- }
- public static bool IsTlsV11(ProtocolVersion version)
- {
- return ProtocolVersion.TLSv11.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion());
- }
- public static bool IsTlsV11(TlsCryptoParameters cryptoParams)
- {
- return IsTlsV11(cryptoParams.ServerVersion);
- }
- public static bool IsTlsV12(ProtocolVersion version)
- {
- return ProtocolVersion.TLSv12.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion());
- }
- public static bool IsTlsV12(TlsCryptoParameters cryptoParams)
- {
- return IsTlsV12(cryptoParams.ServerVersion);
- }
- public static bool IsTlsV13(ProtocolVersion version)
- {
- return ProtocolVersion.TLSv13.IsEqualOrEarlierVersionOf(version.GetEquivalentTlsVersion());
- }
- public static bool IsTlsV13(TlsCryptoParameters cryptoParams)
- {
- return IsTlsV13(cryptoParams.ServerVersion);
- }
- public static byte[] CalculateKeyBlock(TlsCryptoParameters cryptoParams, int length)
- {
- SecurityParameters securityParameters = cryptoParams.SecurityParameters;
- TlsSecret master_secret = securityParameters.MasterSecret;
- int prfAlgorithm = securityParameters.PrfAlgorithm;
- byte[] seed = Arrays.Concatenate(securityParameters.ServerRandom, securityParameters.ClientRandom);
- return master_secret.DeriveUsingPrf(prfAlgorithm, ExporterLabel.key_expansion, seed, length).Extract();
- }
- #if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || UNITY_2021_2_OR_NEWER
- public static void CalculateKeyBlock(TlsCryptoParameters cryptoParams, Span<byte> keyBlock)
- {
- SecurityParameters securityParameters = cryptoParams.SecurityParameters;
- TlsSecret master_secret = securityParameters.MasterSecret;
- int prfAlgorithm = securityParameters.PrfAlgorithm;
- Span<byte> cr = securityParameters.ClientRandom, sr = securityParameters.ServerRandom;
- Span<byte> seed = stackalloc byte[sr.Length + cr.Length];
- sr.CopyTo(seed);
- cr.CopyTo(seed[sr.Length..]);
- TlsSecret derived = master_secret.DeriveUsingPrf(prfAlgorithm, ExporterLabel.key_expansion, seed,
- keyBlock.Length);
- derived.ExtractTo(keyBlock);
- }
- #endif
- }
- }
- #pragma warning restore
- #endif
|