Merge pull request #1101 from jariq/master
[mono.git] / mcs / class / System / System.Security.Cryptography.X509Certificates / X509ChainStatus.cs
1 //
2 // X509ChainStatus.cs - System.Security.Cryptography.X509Certificates.X509ChainStatus
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
8 // Copyright (C) 2006 Novell Inc. (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29
30 #if SECURITY_DEP
31
32 namespace System.Security.Cryptography.X509Certificates {
33
34         public struct X509ChainStatus {
35
36                 private X509ChainStatusFlags status;
37                 private string info;
38
39                 internal X509ChainStatus (X509ChainStatusFlags flag)
40                 {
41                         status = flag;
42                         info = GetInformation (flag);
43                 }
44
45                 // properties
46
47                 public X509ChainStatusFlags Status {
48                         get { return status; }
49                         set { status = value; }
50                 }
51
52                 public string StatusInformation {
53                         get { return info; }
54                         set { info = value; }
55                 }
56
57                 // private stuff
58
59                 // note: flags isn't a flag (i.e. multiple values) when used here
60                 static internal string GetInformation (X509ChainStatusFlags flags)
61                 {
62                         switch (flags) {
63                         case X509ChainStatusFlags.NotTimeValid:
64                         case X509ChainStatusFlags.NotTimeNested:
65                         case X509ChainStatusFlags.Revoked:
66                         case X509ChainStatusFlags.NotSignatureValid:
67                         case X509ChainStatusFlags.NotValidForUsage:
68                         case X509ChainStatusFlags.UntrustedRoot:
69                         case X509ChainStatusFlags.RevocationStatusUnknown:
70                         case X509ChainStatusFlags.Cyclic:
71                         case X509ChainStatusFlags.InvalidExtension:
72                         case X509ChainStatusFlags.InvalidPolicyConstraints:
73                         case X509ChainStatusFlags.InvalidBasicConstraints:
74                         case X509ChainStatusFlags.InvalidNameConstraints:
75                         case X509ChainStatusFlags.HasNotSupportedNameConstraint:
76                         case X509ChainStatusFlags.HasNotDefinedNameConstraint:
77                         case X509ChainStatusFlags.HasNotPermittedNameConstraint:
78                         case X509ChainStatusFlags.HasExcludedNameConstraint:
79                         case X509ChainStatusFlags.PartialChain:
80                         case X509ChainStatusFlags.CtlNotTimeValid:
81                         case X509ChainStatusFlags.CtlNotSignatureValid:
82                         case X509ChainStatusFlags.CtlNotValidForUsage:
83                         case X509ChainStatusFlags.OfflineRevocation:
84                         case X509ChainStatusFlags.NoIssuanceChainPolicy:
85                                 return Locale.GetText (flags.ToString ()); // FIXME - add a better description
86                         case X509ChainStatusFlags.NoError:
87                         default:
88                                 // should never happen
89                                 return String.Empty;
90                         }
91                 }
92         }
93 }
94
95 #endif