| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Security
- {
- using System.Text;
- using System.Security.Cryptography;
- public class DataProtectionSecurityStateEncoder : SecurityStateEncoder
- {
- byte[] entropy;
- bool useCurrentUserProtectionScope;
- public DataProtectionSecurityStateEncoder()
- : this(true)
- {
- // empty
- }
- public DataProtectionSecurityStateEncoder(bool useCurrentUserProtectionScope)
- : this(useCurrentUserProtectionScope, null)
- { }
- public DataProtectionSecurityStateEncoder(bool useCurrentUserProtectionScope, byte[] entropy)
- {
- this.useCurrentUserProtectionScope = useCurrentUserProtectionScope;
- if (entropy == null)
- {
- this.entropy = null;
- }
- else
- {
- this.entropy = DiagnosticUtility.Utility.AllocateByteArray(entropy.Length);
- Buffer.BlockCopy(entropy, 0, this.entropy, 0, entropy.Length);
- }
- }
- public bool UseCurrentUserProtectionScope
- {
- get
- {
- return this.useCurrentUserProtectionScope;
- }
- }
- public byte[] GetEntropy()
- {
- byte[] result = null;
- if (this.entropy != null)
- {
- result = DiagnosticUtility.Utility.AllocateByteArray(this.entropy.Length);
- Buffer.BlockCopy(this.entropy, 0, result, 0, this.entropy.Length);
- }
- return result;
- }
- public override string ToString()
- {
- StringBuilder result = new StringBuilder();
- result.Append(this.GetType().ToString());
- result.AppendFormat("{0} UseCurrentUserProtectionScope={1}", Environment.NewLine, this.useCurrentUserProtectionScope);
- result.AppendFormat("{0} Entropy Length={1}", Environment.NewLine, (this.entropy == null) ? 0 : this.entropy.Length);
- return result.ToString();
- }
- protected internal override byte[] DecodeSecurityState( byte[] data )
- {
- try
- {
- return ProtectedData.Unprotect(data, this.entropy, (this.useCurrentUserProtectionScope) ? DataProtectionScope.CurrentUser : DataProtectionScope.LocalMachine);
- }
- catch (CryptographicException exception)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.SecurityStateEncoderDecodingFailure), exception));
- }
- }
- protected internal override byte[] EncodeSecurityState( byte[] data )
- {
- try
- {
- return ProtectedData.Protect(data, this.entropy, (this.useCurrentUserProtectionScope) ? DataProtectionScope.CurrentUser : DataProtectionScope.LocalMachine);
- }
- catch (CryptographicException exception)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.SecurityStateEncoderEncodingFailure), exception));
- }
- }
- }
- }
|