// Overrides the ConvertFrom method of TypeConverter. public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { string stringValue = (string)value; // Search for AES128 and AES256 disabling settings bool bDisableAES128 = (stringValue.IndexOf(NoAES128) != -1); bool bDisableAES256 = (stringValue.IndexOf(NoAES256) != -1); CipherFlags cipherFlags = 0; // Split library string into security groups string[] secGroups = stringValue.Split(new char[] { ':' }); // Analyze the first security group only for settings if (secGroups[0].IndexOf(aRSA) != -1) { cipherFlags |= CipherFlags.TLS_AUTHENICATION_METHOD_RSA; } if (secGroups[0].IndexOf(aDSS) != -1) { cipherFlags |= CipherFlags.TLS_AUTHENICATION_METHOD_DSA; } if (secGroups[0].IndexOf(kRSA) != -1) { cipherFlags |= CipherFlags.TLS_KEY_EXCHANGE_METHOD_RSA; } if (secGroups[0].IndexOf("+" + DH) != -1) { cipherFlags |= CipherFlags.TLS_KEY_EXCHANGE_METHOD_DH; } if (secGroups[0].IndexOf(SHA1) != -1) { cipherFlags |= CipherFlags.TLS_DATA_INTEGRITY_METHOD_SHA1; } if (secGroups[0].IndexOf(MD5) != -1) { cipherFlags |= CipherFlags.TLS_DATA_INTEGRITY_METHOD_MD5; } if (secGroups[0].IndexOf(eNULL) != -1) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_NONE; } if (secGroups[0].IndexOf(tripleDES) != -1) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_3DES; } if (secGroups[0].IndexOf(AES) != -1) { if (!bDisableAES128) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_AES128; } if (!bDisableAES256) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_AES256; } } return(cipherFlags); } return(base.ConvertFrom(context, culture, value)); }
// Overrides the ConvertTo method of TypeConverter. public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { CipherFlags cipherFlags = (CipherFlags)value; // Determine AES128 and AES256 flag settings bool bAES128 = ((cipherFlags & CipherFlags.TLS_ENCRYPTION_METHOD_AES128) != 0); bool bAES256 = ((cipherFlags & CipherFlags.TLS_ENCRYPTION_METHOD_AES256) != 0); // Remove AES128 and AES256 flags. These are handled seperately. cipherFlags &= ~CipherFlags.TLS_ENCRYPTION_METHOD_AES128; cipherFlags &= ~CipherFlags.TLS_ENCRYPTION_METHOD_AES256; // Generate ', ' seperated list of flagged values. string libraryString = System.Enum.Format(typeof(CipherFlags), cipherFlags, "g"); // Replace ", " seperations by "+" seperations libraryString = libraryString.Replace(", ", SecElementSeperator); // Replace enum string values by library string values. libraryString = libraryString.Replace(CipherFlags.TLS_AUTHENICATION_METHOD_RSA.ToString(), aRSA); libraryString = libraryString.Replace(CipherFlags.TLS_AUTHENICATION_METHOD_DSA.ToString(), aDSS); libraryString = libraryString.Replace(CipherFlags.TLS_KEY_EXCHANGE_METHOD_RSA.ToString(), kRSA); libraryString = libraryString.Replace(CipherFlags.TLS_KEY_EXCHANGE_METHOD_DH.ToString(), DH); libraryString = libraryString.Replace(CipherFlags.TLS_DATA_INTEGRITY_METHOD_SHA1.ToString(), SHA1); libraryString = libraryString.Replace(CipherFlags.TLS_DATA_INTEGRITY_METHOD_MD5.ToString(), MD5); libraryString = libraryString.Replace(CipherFlags.TLS_ENCRYPTION_METHOD_NONE.ToString(), eNULL); libraryString = libraryString.Replace(CipherFlags.TLS_ENCRYPTION_METHOD_3DES.ToString(), tripleDES); if (bAES128 || bAES256) { libraryString += (SecElementSeperator + AES); } // Append AES128 and AES256 disabling settings if (!bAES128 && bAES256) { libraryString += (SecGroupSeperator + NoAES128); } if (bAES128 && !bAES256) { libraryString += (SecGroupSeperator + NoAES256); } // Append post fix libraryString += TlsPostFix; return(libraryString); } return(base.ConvertTo(context, culture, value, destinationType)); }
private System.Boolean _ValidCipherFlags(CipherFlags value) { string cipherList = TypeDescriptor.GetConverter(value).ConvertToString(value); return(this.m_adaptee.IsValidCipherList(cipherList)); }
private System.Boolean _ValidCipherFlags(CipherFlags value) { string cipherList = TypeDescriptor.GetConverter(value).ConvertToString(value); return this.m_adaptee.IsValidCipherList(cipherList); }
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { securitySettingsChanged = false; string stringValue = (string)value; // Search for AES128 and AES256 disabling settings bool bDisableAES128 = (stringValue.IndexOf(NoAES128) != -1); bool bDisableAES256 = (stringValue.IndexOf(NoAES256) != -1); int count = 0; CipherFlags cipherFlags = 0; // Split library string into security groups string[] secGroups = stringValue.Split(new char[] { ':' }); // Analyze the first security group only for settings if (secGroups[0].IndexOf(aRSA) != -1 & secGroups[0].IndexOf(aDSS) != -1) { cipherFlags |= CipherFlags.TLS_AUTHENICATION_METHOD_RSA; securitySettingsChanged = true; // none aan } //else if (secGroups[0].IndexOf(aRSA) == -1 & secGroups[0].IndexOf(aDSS) == -1) //{ // cipherFlags |= CipherFlags.TLS_AUTHENICATION_METHOD_RSA; // securitySettingsChanged = true; // // none aan //} else { if (secGroups[0].IndexOf(aRSA) != -1) { cipherFlags |= CipherFlags.TLS_AUTHENICATION_METHOD_RSA; } if (secGroups[0].IndexOf(aDSS) != -1) { cipherFlags |= CipherFlags.TLS_AUTHENICATION_METHOD_DSA; } } if (secGroups[0].IndexOf(kRSA) != -1 & secGroups[0].IndexOf("+" + DH) != -1) { cipherFlags |= CipherFlags.TLS_KEY_EXCHANGE_METHOD_RSA; securitySettingsChanged = true; } //else if (secGroups[0].IndexOf(kRSA) == -1 & secGroups[0].IndexOf("+" + DH) == -1) //{ // cipherFlags |= CipherFlags.TLS_KEY_EXCHANGE_METHOD_RSA; // securitySettingsChanged = true; //} else { if (secGroups[0].IndexOf(kRSA) != -1) { cipherFlags |= CipherFlags.TLS_KEY_EXCHANGE_METHOD_RSA; } if (secGroups[0].IndexOf("+" + DH) != -1) { cipherFlags |= CipherFlags.TLS_KEY_EXCHANGE_METHOD_DH; } } if (secGroups[0].IndexOf(SHA1) != -1 & secGroups[0].IndexOf("+" + MD5) != -1) { cipherFlags |= CipherFlags.TLS_DATA_INTEGRITY_METHOD_SHA1; securitySettingsChanged = true; } //else if (secGroups[0].IndexOf(SHA1) == -1 & secGroups[0].IndexOf("+" + MD5) == -1) //{ // cipherFlags |= CipherFlags.TLS_DATA_INTEGRITY_METHOD_SHA1; // securitySettingsChanged = true; //} else { if (secGroups[0].IndexOf(SHA1) != -1) { cipherFlags |= CipherFlags.TLS_DATA_INTEGRITY_METHOD_SHA1; } if (secGroups[0].IndexOf(MD5) != -1) { cipherFlags |= CipherFlags.TLS_DATA_INTEGRITY_METHOD_MD5; } } if (secGroups[0].IndexOf(eNULL) != -1) { count++; } if (secGroups[0].IndexOf(tripleDES) != -1) { count++; } if (secGroups[0].IndexOf(AES) != -1) { if (!bDisableAES128) { count++; } if (!bDisableAES256) { count++; } } if (count < 2) { if (secGroups[0].IndexOf(eNULL) != -1) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_NONE; } if (secGroups[0].IndexOf(tripleDES) != -1) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_3DES; } if (secGroups[0].IndexOf(AES) != -1) { if (!bDisableAES128) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_AES128; } if (!bDisableAES256) { cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_AES256; } } } else { securitySettingsChanged = true; // Set 3DES as default cipherFlags |= CipherFlags.TLS_ENCRYPTION_METHOD_3DES; } if (securitySettingsChanged & isFirstcheck) { MessageBox.Show("Configuration not supported by new openssl version, default configuration is loaded", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); isFirstcheck = false; } else if (!securitySettingsChanged & !isFirstcheck) { isFirstcheck = true; } return(cipherFlags); } return(base.ConvertFrom(context, culture, value)); }