1 //-----------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //-----------------------------------------------------------------------------
4 
5 namespace System.ServiceModel.Configuration
6 {
7     using System;
8     using System.ComponentModel;
9     using System.ComponentModel.Design.Serialization;
10     using System.Globalization;
11     using System.ServiceModel.Security;
12 
13     class SecurityAlgorithmSuiteConverter : TypeConverter
14     {
CanConvertFrom(ITypeDescriptorContext context, Type sourceType)15         public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
16         {
17             if (typeof(string) == sourceType)
18             {
19                 return true;
20             }
21             return base.CanConvertFrom(context, sourceType);
22         }
23 
CanConvertTo(ITypeDescriptorContext context, Type destinationType)24         public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
25         {
26             if (typeof(InstanceDescriptor) == destinationType)
27             {
28                 return true;
29             }
30             return base.CanConvertTo(context, destinationType);
31         }
32 
ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)33         public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
34         {
35             if (value is string)
36             {
37                 string securityAlgorithm = (string)value;
38                 SecurityAlgorithmSuite retval = null;
39                 switch (securityAlgorithm)
40                 {
41                     case ConfigurationStrings.Default:
42                         retval = SecurityAlgorithmSuite.Default;
43                         break;
44                     case ConfigurationStrings.Basic256:
45                         retval = SecurityAlgorithmSuite.Basic256;
46                         break;
47                     case ConfigurationStrings.Basic192:
48                         retval = SecurityAlgorithmSuite.Basic192;
49                         break;
50                     case ConfigurationStrings.Basic128:
51                         retval = SecurityAlgorithmSuite.Basic128;
52                         break;
53                     case ConfigurationStrings.TripleDes:
54                         retval = SecurityAlgorithmSuite.TripleDes;
55                         break;
56                     case ConfigurationStrings.Basic256Rsa15:
57                         retval = SecurityAlgorithmSuite.Basic256Rsa15;
58                         break;
59                     case ConfigurationStrings.Basic192Rsa15:
60                         retval = SecurityAlgorithmSuite.Basic192Rsa15;
61                         break;
62                     case ConfigurationStrings.Basic128Rsa15:
63                         retval = SecurityAlgorithmSuite.Basic128Rsa15;
64                         break;
65                     case ConfigurationStrings.TripleDesRsa15:
66                         retval = SecurityAlgorithmSuite.TripleDesRsa15;
67                         break;
68                     case ConfigurationStrings.Basic256Sha256:
69                         retval = SecurityAlgorithmSuite.Basic256Sha256;
70                         break;
71                     case ConfigurationStrings.Basic192Sha256:
72                         retval = SecurityAlgorithmSuite.Basic192Sha256;
73                         break;
74                     case ConfigurationStrings.Basic128Sha256:
75                         retval = SecurityAlgorithmSuite.Basic128Sha256;
76                         break;
77                     case ConfigurationStrings.TripleDesSha256:
78                         retval = SecurityAlgorithmSuite.TripleDesSha256;
79                         break;
80                     case ConfigurationStrings.Basic256Sha256Rsa15:
81                         retval = SecurityAlgorithmSuite.Basic256Sha256Rsa15;
82                         break;
83                     case ConfigurationStrings.Basic192Sha256Rsa15:
84                         retval = SecurityAlgorithmSuite.Basic192Sha256Rsa15;
85                         break;
86                     case ConfigurationStrings.Basic128Sha256Rsa15:
87                         retval = SecurityAlgorithmSuite.Basic128Sha256Rsa15;
88                         break;
89                     case ConfigurationStrings.TripleDesSha256Rsa15:
90                         retval = SecurityAlgorithmSuite.TripleDesSha256Rsa15;
91                         break;
92                     default:
93                         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value",
94                             SR.GetString(SR.ConfigInvalidClassFactoryValue, securityAlgorithm, typeof(SecurityAlgorithmSuite).FullName)));
95                 }
96                 return retval;
97             }
98             return base.ConvertFrom(context, culture, value);
99         }
100 
ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)101         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
102         {
103             if (typeof(string) == destinationType && value is SecurityAlgorithmSuite)
104             {
105                 string retval = null;
106                 SecurityAlgorithmSuite securityAlgorithm = (SecurityAlgorithmSuite)value;
107 
108                 if (securityAlgorithm == SecurityAlgorithmSuite.Default)
109                     retval = ConfigurationStrings.Default;
110                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic256)
111                     retval = ConfigurationStrings.Basic256;
112                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic192)
113                     retval = ConfigurationStrings.Basic192;
114                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic128)
115                     retval = ConfigurationStrings.Basic128;
116                 else if (securityAlgorithm == SecurityAlgorithmSuite.TripleDes)
117                     retval = ConfigurationStrings.TripleDes;
118                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic256Rsa15)
119                     retval = ConfigurationStrings.Basic256Rsa15;
120                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic192Rsa15)
121                     retval = ConfigurationStrings.Basic192Rsa15;
122                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic128Rsa15)
123                     retval = ConfigurationStrings.Basic128Rsa15;
124                 else if (securityAlgorithm == SecurityAlgorithmSuite.TripleDesRsa15)
125                     retval = ConfigurationStrings.TripleDesRsa15;
126                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic256Sha256)
127                     retval = ConfigurationStrings.Basic256Sha256;
128                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic192Sha256)
129                     retval = ConfigurationStrings.Basic192Sha256;
130                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic128Sha256)
131                     retval = ConfigurationStrings.Basic128Sha256;
132                 else if (securityAlgorithm == SecurityAlgorithmSuite.TripleDesSha256)
133                     retval = ConfigurationStrings.TripleDesSha256;
134                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic256Sha256Rsa15)
135                     retval = ConfigurationStrings.Basic256Sha256Rsa15;
136                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic192Sha256Rsa15)
137                     retval = ConfigurationStrings.Basic192Sha256Rsa15;
138                 else if (securityAlgorithm == SecurityAlgorithmSuite.Basic128Sha256Rsa15)
139                     retval = ConfigurationStrings.Basic128Sha256Rsa15;
140                 else if (securityAlgorithm == SecurityAlgorithmSuite.TripleDesSha256Rsa15)
141                     retval = ConfigurationStrings.TripleDesSha256Rsa15;
142                 else
143                     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value",
144                         SR.GetString(SR.ConfigInvalidClassInstanceValue, typeof(SecurityAlgorithmSuite).FullName)));
145 
146                 return retval;
147             }
148             return base.ConvertTo(context, culture, value, destinationType);
149         }
150     }
151 }
152