| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Agreement;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Tls
- {
- public class PskTlsServer
- : AbstractTlsServer
- {
- protected TlsPskIdentityManager mPskIdentityManager;
- public PskTlsServer(TlsPskIdentityManager pskIdentityManager)
- : this(new DefaultTlsCipherFactory(), pskIdentityManager)
- {
- }
- public PskTlsServer(TlsCipherFactory cipherFactory, TlsPskIdentityManager pskIdentityManager)
- : base(cipherFactory)
- {
- this.mPskIdentityManager = pskIdentityManager;
- }
- protected virtual TlsEncryptionCredentials GetRsaEncryptionCredentials()
- {
- throw new TlsFatalAlert(AlertDescription.internal_error);
- }
- protected virtual DHParameters GetDHParameters()
- {
- return DHStandardGroups.rfc7919_ffdhe2048;
- }
- protected override int[] GetCipherSuites()
- {
- return new int[]
- {
- CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
- CipherSuite.TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA,
- CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA256,
- CipherSuite.TLS_DHE_PSK_WITH_AES_128_CBC_SHA
- };
- }
- public override TlsCredentials GetCredentials()
- {
- int keyExchangeAlgorithm = TlsUtilities.GetKeyExchangeAlgorithm(mSelectedCipherSuite);
- switch (keyExchangeAlgorithm)
- {
- case KeyExchangeAlgorithm.DHE_PSK:
- case KeyExchangeAlgorithm.ECDHE_PSK:
- case KeyExchangeAlgorithm.PSK:
- return null;
- case KeyExchangeAlgorithm.RSA_PSK:
- return GetRsaEncryptionCredentials();
- default:
- /* Note: internal error here; selected a key exchange we don't implement! */
- throw new TlsFatalAlert(AlertDescription.internal_error);
- }
- }
- public override TlsKeyExchange GetKeyExchange()
- {
- int keyExchangeAlgorithm = TlsUtilities.GetKeyExchangeAlgorithm(mSelectedCipherSuite);
- switch (keyExchangeAlgorithm)
- {
- case KeyExchangeAlgorithm.DHE_PSK:
- case KeyExchangeAlgorithm.ECDHE_PSK:
- case KeyExchangeAlgorithm.PSK:
- case KeyExchangeAlgorithm.RSA_PSK:
- return CreatePskKeyExchange(keyExchangeAlgorithm);
- default:
- /*
- * Note: internal error here; the TlsProtocol implementation verifies that the
- * server-selected cipher suite was in the list of client-offered cipher suites, so if
- * we now can't produce an implementation, we shouldn't have offered it!
- */
- throw new TlsFatalAlert(AlertDescription.internal_error);
- }
- }
- protected virtual TlsKeyExchange CreatePskKeyExchange(int keyExchange)
- {
- return new TlsPskKeyExchange(keyExchange, mSupportedSignatureAlgorithms, null, mPskIdentityManager,
- null, GetDHParameters(), mNamedCurves, mClientECPointFormats, mServerECPointFormats);
- }
- }
- }
- #pragma warning restore
- #endif
|