Initial Commit
This commit is contained in:
72
iTechSharp/srcbc/crypto/tls/TlsCipherSuiteManager.cs
Normal file
72
iTechSharp/srcbc/crypto/tls/TlsCipherSuiteManager.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using Org.BouncyCastle.Crypto.Digests;
|
||||
using Org.BouncyCastle.Crypto.Engines;
|
||||
using Org.BouncyCastle.Crypto.Modes;
|
||||
|
||||
namespace Org.BouncyCastle.Crypto.Tls
|
||||
{
|
||||
/// <remarks>
|
||||
/// A manager for ciphersuite. This class does manage all ciphersuites
|
||||
/// which are used by MicroTLS.
|
||||
/// </remarks>
|
||||
public class TlsCipherSuiteManager
|
||||
{
|
||||
private const int TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000a;
|
||||
private const int TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016;
|
||||
private const int TLS_RSA_WITH_AES_128_CBC_SHA = 0x002f;
|
||||
private const int TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033;
|
||||
private const int TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035;
|
||||
private const int TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039;
|
||||
|
||||
internal static void WriteCipherSuites(
|
||||
Stream outStr)
|
||||
{
|
||||
TlsUtilities.WriteUint16(2 * 6, outStr);
|
||||
|
||||
TlsUtilities.WriteUint16(TLS_DHE_RSA_WITH_AES_256_CBC_SHA, outStr);
|
||||
TlsUtilities.WriteUint16(TLS_DHE_RSA_WITH_AES_128_CBC_SHA, outStr);
|
||||
TlsUtilities.WriteUint16(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, outStr);
|
||||
|
||||
TlsUtilities.WriteUint16(TLS_RSA_WITH_AES_256_CBC_SHA, outStr);
|
||||
TlsUtilities.WriteUint16(TLS_RSA_WITH_AES_128_CBC_SHA, outStr);
|
||||
TlsUtilities.WriteUint16(TLS_RSA_WITH_3DES_EDE_CBC_SHA, outStr);
|
||||
|
||||
}
|
||||
|
||||
internal static TlsCipherSuite GetCipherSuite(
|
||||
int number,
|
||||
TlsProtocolHandler handler)
|
||||
{
|
||||
switch (number)
|
||||
{
|
||||
case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||
return new TlsBlockCipherCipherSuite(new CbcBlockCipher(new DesEdeEngine()), new CbcBlockCipher(new DesEdeEngine()), new Sha1Digest(), new Sha1Digest(), 24, TlsCipherSuite.KE_RSA);
|
||||
|
||||
case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
|
||||
return new TlsBlockCipherCipherSuite(new CbcBlockCipher(new DesEdeEngine()), new CbcBlockCipher(new DesEdeEngine()), new Sha1Digest(), new Sha1Digest(), 24, TlsCipherSuite.KE_DHE_RSA);
|
||||
|
||||
case TLS_RSA_WITH_AES_128_CBC_SHA:
|
||||
return new TlsBlockCipherCipherSuite(new CbcBlockCipher(new AesFastEngine()), new CbcBlockCipher(new AesFastEngine()), new Sha1Digest(), new Sha1Digest(), 16, TlsCipherSuite.KE_RSA);
|
||||
|
||||
case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
|
||||
return new TlsBlockCipherCipherSuite(new CbcBlockCipher(new AesFastEngine()), new CbcBlockCipher(new AesFastEngine()), new Sha1Digest(), new Sha1Digest(), 16, TlsCipherSuite.KE_DHE_RSA);
|
||||
|
||||
case TLS_RSA_WITH_AES_256_CBC_SHA:
|
||||
return new TlsBlockCipherCipherSuite(new CbcBlockCipher(new AesFastEngine()), new CbcBlockCipher(new AesFastEngine()), new Sha1Digest(), new Sha1Digest(), 32, TlsCipherSuite.KE_RSA);
|
||||
|
||||
case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
|
||||
return new TlsBlockCipherCipherSuite(new CbcBlockCipher(new AesFastEngine()), new CbcBlockCipher(new AesFastEngine()), new Sha1Digest(), new Sha1Digest(), 32, TlsCipherSuite.KE_DHE_RSA);
|
||||
|
||||
default:
|
||||
handler.FailWithError(TlsProtocolHandler.AL_fatal, TlsProtocolHandler.AP_handshake_failure);
|
||||
|
||||
/*
|
||||
* Unreachable Code, failWithError will always throw an exception!
|
||||
*/
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user