diff options
Diffstat (limited to 'crypto/MockPskTls13Client.cs')
-rw-r--r-- | crypto/MockPskTls13Client.cs | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/crypto/MockPskTls13Client.cs b/crypto/MockPskTls13Client.cs new file mode 100644 index 000000000..d8be1fddd --- /dev/null +++ b/crypto/MockPskTls13Client.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections; +using System.IO; + +using Org.BouncyCastle.Tls.Crypto; +using Org.BouncyCastle.Tls.Crypto.Impl.BC; +using Org.BouncyCastle.Security; +using Org.BouncyCastle.Utilities; + +namespace Org.BouncyCastle.Tls.Tests +{ + internal class MockPskTls13Client + : AbstractTlsClient + { + internal MockPskTls13Client() + : base(new BcTlsCrypto(new SecureRandom())) + { + } + + //public override IList GetEarlyKeyShareGroups() + //{ + // return TlsUtilities.VectorOfOne(NamedGroup.secp256r1); + // //return null; + //} + + //public override short[] GetPskKeyExchangeModes() + //{ + // return new short[] { PskKeyExchangeMode.psk_dhe_ke, PskKeyExchangeMode.psk_ke }; + //} + + protected override IList GetProtocolNames() + { + IList protocolNames = new ArrayList(); + protocolNames.Add(ProtocolName.Http_1_1); + protocolNames.Add(ProtocolName.Http_2_Tls); + return protocolNames; + } + + protected override int[] GetSupportedCipherSuites() + { + return TlsUtilities.GetSupportedCipherSuites(Crypto, new int[] { CipherSuite.TLS_AES_128_GCM_SHA256 }); + } + + protected override ProtocolVersion[] GetSupportedVersions() + { + return ProtocolVersion.TLSv13.Only(); + } + + public override IList GetExternalPsks() + { + byte[] identity = Strings.ToUtf8ByteArray("client"); + TlsSecret key = Crypto.CreateSecret(Strings.ToUtf8ByteArray("TLS_TEST_PSK")); + int prfAlgorithm = PrfAlgorithm.tls13_hkdf_sha256; + + return TlsUtilities.VectorOfOne(new BasicTlsPskExternal(identity, key, prfAlgorithm)); + } + + public override void NotifyAlertRaised(short alertLevel, short alertDescription, string message, + Exception cause) + { + TextWriter output = (alertLevel == AlertLevel.fatal) ? Console.Error : Console.Out; + output.WriteLine("TLS 1.3 PSK client raised alert: " + AlertLevel.GetText(alertLevel) + + ", " + AlertDescription.GetText(alertDescription)); + if (message != null) + { + output.WriteLine("> " + message); + } + if (cause != null) + { + output.WriteLine(cause); + } + } + + public override void NotifyAlertReceived(short alertLevel, short alertDescription) + { + TextWriter output = (alertLevel == AlertLevel.fatal) ? Console.Error : Console.Out; + output.WriteLine("TLS 1.3 PSK client received alert: " + AlertLevel.GetText(alertLevel) + + ", " + AlertDescription.GetText(alertDescription)); + } + + public override void NotifySelectedPsk(TlsPsk selectedPsk) + { + if (null == selectedPsk) + throw new TlsFatalAlert(AlertDescription.handshake_failure); + } + + public override void NotifyServerVersion(ProtocolVersion serverVersion) + { + base.NotifyServerVersion(serverVersion); + + Console.WriteLine("TLS 1.3 PSK client negotiated " + serverVersion); + } + + public override TlsAuthentication GetAuthentication() + { + throw new TlsFatalAlert(AlertDescription.internal_error); + } + + public override void NotifyHandshakeComplete() + { + base.NotifyHandshakeComplete(); + + ProtocolName protocolName = m_context.SecurityParameters.ApplicationProtocol; + if (protocolName != null) + { + Console.WriteLine("Client ALPN: " + protocolName.GetUtf8Decoding()); + } + } + } +} |