public InfoCardKeyedHashAlgorithm(SymmetricCryptoHandle cryptoHandle) { InternalRefCountedHandle nativeHashHandle = null; try { int status = CardSpaceSelector.GetShim().m_csShimGetKeyedHash(cryptoHandle.InternalHandle, out nativeHashHandle); if (status != 0) { InfoCardTrace.CloseInvalidOutSafeHandle(nativeHashHandle); ExceptionHelper.ThrowIfCardSpaceException(status); throw InfoCardTrace.ThrowHelperError(new Win32Exception(status)); } this.m_cryptoHandle = (HashCryptoHandle)CryptoHandle.Create(nativeHashHandle); this.m_param = (RpcHashCryptoParameters)this.m_cryptoHandle.Parameters; } catch { if (this.m_cryptoHandle != null) { this.m_cryptoHandle.Dispose(); } throw; } }
public CryptoTransform(InfoCardSymmetricAlgorithm symAlgo, Direction cryptoDirection) { InternalRefCountedHandle nativeTransformHandle = null; byte[] iV = symAlgo.IV; using (HGlobalSafeHandle handle2 = HGlobalSafeHandle.Construct(iV.Length)) { Marshal.Copy(iV, 0, handle2.DangerousGetHandle(), iV.Length); int status = CardSpaceSelector.GetShim().m_csShimGetCryptoTransform(symAlgo.m_cryptoHandle.InternalHandle, (int)symAlgo.Mode, (int)symAlgo.Padding, symAlgo.FeedbackSize, (int)cryptoDirection, iV.Length, handle2, out nativeTransformHandle); if (status != 0) { InfoCardTrace.CloseInvalidOutSafeHandle(nativeTransformHandle); ExceptionHelper.ThrowIfCardSpaceException(status); throw InfoCardTrace.ThrowHelperError(new Win32Exception(status)); } this.m_transCryptoHandle = (TransformCryptoHandle)CryptoHandle.Create(nativeTransformHandle); this.m_param = (RpcTransformCryptoParameters)this.m_transCryptoHandle.Parameters; } }