You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,58 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="HomogenizingCryptoServiceWrapper.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.Security.Cryptography {
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
// Wraps an ICryptoService instance and homogenizes any exceptions that might occur.
|
||||
|
||||
internal sealed class HomogenizingCryptoServiceWrapper : ICryptoService {
|
||||
|
||||
public HomogenizingCryptoServiceWrapper(ICryptoService wrapped) {
|
||||
WrappedCryptoService = wrapped;
|
||||
}
|
||||
|
||||
internal ICryptoService WrappedCryptoService {
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
private static byte[] HomogenizeErrors(Func<byte[], byte[]> func, byte[] input) {
|
||||
// If the underlying method returns null or throws an exception, the
|
||||
// error will be homogenized as a single CryptographicException.
|
||||
|
||||
byte[] output = null;
|
||||
bool allowExceptionToBubble = false;
|
||||
|
||||
try {
|
||||
output = func(input);
|
||||
return output;
|
||||
}
|
||||
catch (ConfigurationException) {
|
||||
// ConfigurationException isn't a side channel; it means the application is misconfigured.
|
||||
// We need to bubble this up so that the developer can react to it.
|
||||
allowExceptionToBubble = true;
|
||||
throw;
|
||||
}
|
||||
finally {
|
||||
if (output == null && !allowExceptionToBubble) {
|
||||
throw new CryptographicException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] Protect(byte[] clearData) {
|
||||
return HomogenizeErrors(WrappedCryptoService.Protect, clearData);
|
||||
}
|
||||
|
||||
public byte[] Unprotect(byte[] protectedData) {
|
||||
return HomogenizeErrors(WrappedCryptoService.Unprotect, protectedData);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user