Esempio n. 1
0
 // 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));
 }
Esempio n. 2
0
 // 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));
 }
Esempio n. 3
0
        private System.Boolean _ValidCipherFlags(CipherFlags value)
        {
            string cipherList = TypeDescriptor.GetConverter(value).ConvertToString(value);

            return(this.m_adaptee.IsValidCipherList(cipherList));
        }
Esempio n. 4
0
 private System.Boolean _ValidCipherFlags(CipherFlags value)
 {
     string cipherList = TypeDescriptor.GetConverter(value).ConvertToString(value);
     return this.m_adaptee.IsValidCipherList(cipherList);
 }
Esempio n. 5
0
        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));
        }