// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if NET_2_0
-
using System.Globalization;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ConstrainedExecution;
using System.Security.Cryptography;
using System.Security.Permissions;
+using System.Runtime.ExceptionServices;
namespace System.Security {
[MonoTODO ("work in progress - encryption is missing")]
- public sealed class SecureString : CriticalFinalizerObject, IDisposable {
+ public sealed class SecureString : IDisposable {
private const int BlockSize = 16;
private const int MaxSize = 65536;
}
}
+ [HandleProcessCorruptedStateExceptions]
public void AppendChar (char c)
{
if (disposed)
{
SecureString ss = new SecureString ();
ss.data = (byte[]) data.Clone ();
+ ss.length = length;
return ss;
}
length = 0;
}
+ [HandleProcessCorruptedStateExceptions]
public void InsertAt (int index, char c)
{
if (disposed)
Decrypt ();
Alloc (++length, true);
int n = index * 2;
- Buffer.BlockCopy (data, n, data, n + 2, data.Length - 2);
+ Buffer.BlockCopy (data, n, data, n + 2, data.Length - n - 2);
data[n++] = (byte) (c >> 8);
data[n] = (byte) c;
}
read_only = true;
}
+ [HandleProcessCorruptedStateExceptions]
public void RemoveAt (int index)
{
if (disposed)
try {
Decrypt ();
- Buffer.BlockCopy (data, index + 1, data, index, data.Length - index - 1);
+ Buffer.BlockCopy (data, index * 2 + 2, data, index * 2, data.Length - index * 2 - 2);
Alloc (--length, true);
}
finally {
}
}
+ [HandleProcessCorruptedStateExceptions]
public void SetAt (int index, char c)
{
if (disposed)
// internal/private stuff
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- extern static void EncryptInternal (byte [] data, object scope);
+// [MethodImplAttribute(MethodImplOptions.InternalCall)]
+// extern static void EncryptInternal (byte [] data, object scope);
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- extern static void DecryptInternal (byte [] data, object scope);
+// [MethodImplAttribute(MethodImplOptions.InternalCall)]
+// extern static void DecryptInternal (byte [] data, object scope);
- static readonly object scope = Enum.Parse (
- Assembly.Load (Consts.AssemblySystem_Security)
- .GetType ("System.Security.Cryptography.MemoryProtectionScope"), "SameProcess");
+// static readonly object scope = Enum.Parse (
+// Assembly.Load (Consts.AssemblySystem_Security)
+// .GetType ("System.Security.Cryptography.MemoryProtectionScope"), "SameProcess");
// Note that ProtectedMemory is not supported on non-Windows environment right now.
private void Encrypt ()
}
}
}
-
-#endif