[corlib] Improve CancellationTokenSource test
[mono.git] / mcs / class / Mono.Security / Mono.Security.Cryptography / Null.cs
1 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
2 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
3 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
4
5 //
6 // System.Security.Cryptography.Null.cs
7 //
8 // Author:
9 //      Sebastien Pouliot (sebastien@ximian.com)
10 //
11 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32
33 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
34 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
35 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
36
37 using System;
38 using System.Security.Cryptography;
39
40 namespace Mono.Security.Cryptography {
41
42         public abstract class Null : SymmetricAlgorithm {
43
44                 public static new Null Create () 
45                 {
46                         return Create ("Mono.Security.Cryptography.Null");
47                 }
48
49                 public static new Null Create (string algName) 
50                 {
51                         return (Null) CryptoConfig.CreateFromName (algName);
52                 }
53                 
54                 public Null () 
55                 {
56                         KeySizeValue = 128;
57                         BlockSizeValue = 128;
58                         FeedbackSizeValue = 128;
59         
60                         LegalKeySizesValue = new KeySizes [1];
61                         LegalKeySizesValue [0] = new KeySizes (0, 1024, 8);
62
63                         LegalBlockSizesValue = new KeySizes [1];
64                         LegalBlockSizesValue [0] = new KeySizes (0, 1024, 8);
65                 }
66         }
67
68         public sealed class NullManaged : Null {
69                 
70                 public NullManaged ()
71                 {
72                 }
73                 
74                 public override void GenerateIV ()
75                 {
76                         IVValue = new byte [BlockSizeValue >> 3];
77                 }
78                 
79                 public override void GenerateKey ()
80                 {
81                         KeyValue = new byte [KeySizeValue >> 3];
82                 }
83                 
84                 public override ICryptoTransform CreateDecryptor (byte[] rgbKey, byte[] rgbIV) 
85                 {
86                         Key = rgbKey;
87                         IV = rgbIV;
88
89                         return new NullTransform (this, false, rgbKey, rgbIV);
90                 }
91                 
92                 public override ICryptoTransform CreateEncryptor (byte[] rgbKey, byte[] rgbIV) 
93                 {
94                         Key = rgbKey;
95                         IV = rgbIV;
96
97                         return new NullTransform (this, true, rgbKey, rgbIV);
98                 }
99         }
100
101         internal class NullTransform : SymmetricTransform {
102
103                 private int _block;
104                 private bool _debug;
105
106                 public NullTransform (Null algo, bool encryption, byte[] key, byte[] iv)
107                         : base (algo, encryption, iv)
108                 {
109                         _block = 0;
110                         _debug = (Environment.GetEnvironmentVariable ("MONO_DEBUG") != null);
111                         if (_debug) {
112                                 Console.WriteLine ("Mode: {0}", encryption ? "encryption" : "decryption");
113                                 Console.WriteLine ("Key:  {0}", BitConverter.ToString (key));
114                                 Console.WriteLine ("IV:   {0}", BitConverter.ToString (iv));
115                         }
116                 }
117
118                 public void Clear () 
119                 {
120                         _block = 0;
121                         Dispose (true);
122                 }
123         
124                 // note: this method is guaranteed to be called with a valid blocksize
125                 // for both input and output
126                 protected override void ECB (byte[] input, byte[] output) 
127                 {
128                         Buffer.BlockCopy (input, 0, output, 0, output.Length);
129                         if (_debug) {
130                                 Console.WriteLine ("ECB on block #{0}: {1}", _block, BitConverter.ToString (input));
131                         }
132                         _block++;
133                 }
134         }
135 }
136
137 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
138 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING
139 // *** WARNING *** DO NOT INCLUDE IN ANY DEFAULT/RELEASE BUILDS *** WARNING