// 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.InteropServices;
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
- [MonoTODO ("ProtectedMemory is in System.Security.dll - move this into the runtime/icall")]
+// [MethodImplAttribute(MethodImplOptions.InternalCall)]
+// extern static void EncryptInternal (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");
+
+ // Note that ProtectedMemory is not supported on non-Windows environment right now.
private void Encrypt ()
{
if ((data != null) && (data.Length > 0)) {
-// ProtectedMemory.Protect (data, MemoryProtectionScope.SameProcess);
+ // It somehow causes nunit test breakage
+ // EncryptInternal (data, scope);
}
}
- [MonoTODO ("ProtectedMemory is in System.Security.dll - move this into the runtime/icall")]
+ // Note that ProtectedMemory is not supported on non-Windows environment right now.
private void Decrypt ()
{
if ((data != null) && (data.Length > 0)) {
-// ProtectedMemory.Unprotect (data, MemoryProtectionScope.SameProcess);
+ // It somehow causes nunit test breakage
+ // DecryptInternal (data, scope);
}
}
}
}
}
-
-#endif