Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Security / Cryptography / CngAlgorithmGroup.cs / 1305376 / CngAlgorithmGroup.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Diagnostics.Contracts;
namespace System.Security.Cryptography {
///
/// Utility class to strongly type algorithm groups used with CNG. Since all CNG APIs which require or
/// return an algorithm group name take the name as a string, we use this string wrapper class to
/// specifically mark which parameters and return values are expected to be algorithm groups. We also
/// provide a list of well known algorithm group names, which helps Intellisense users find a set of
/// good algorithm group names to use.
///
[Serializable]
[System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
public sealed class CngAlgorithmGroup : IEquatable {
private static CngAlgorithmGroup s_dh;
private static CngAlgorithmGroup s_dsa;
private static CngAlgorithmGroup s_ecdh;
private static CngAlgorithmGroup s_ecdsa;
private static CngAlgorithmGroup s_rsa;
private string m_algorithmGroup;
public CngAlgorithmGroup(string algorithmGroup) {
Contract.Ensures(!String.IsNullOrEmpty(m_algorithmGroup));
if (algorithmGroup == null) {
throw new ArgumentNullException("algorithmGroup");
}
if (algorithmGroup.Length == 0) {
throw new ArgumentException(SR.GetString(SR.Cryptography_InvalidAlgorithmGroup, algorithmGroup), "algorithmGroup");
}
m_algorithmGroup = algorithmGroup;
}
///
/// Name of the algorithm group
///
public string AlgorithmGroup {
get {
Contract.Ensures(!String.IsNullOrEmpty(Contract.Result()));
return m_algorithmGroup;
}
}
[Pure]
public static bool operator ==(CngAlgorithmGroup left, CngAlgorithmGroup right) {
if (Object.ReferenceEquals(left, null)) {
return Object.ReferenceEquals(right, null);
}
return left.Equals(right);
}
[Pure]
public static bool operator !=(CngAlgorithmGroup left, CngAlgorithmGroup right) {
if (Object.ReferenceEquals(left, null)) {
return !Object.ReferenceEquals(right, null);
}
return !left.Equals(right);
}
public override bool Equals(object obj) {
Contract.Assert(m_algorithmGroup != null);
return Equals(obj as CngAlgorithmGroup);
}
public bool Equals(CngAlgorithmGroup other) {
if (Object.ReferenceEquals(other, null)) {
return false;
}
return m_algorithmGroup.Equals(other.AlgorithmGroup);
}
public override int GetHashCode() {
Contract.Assert(m_algorithmGroup != null);
return m_algorithmGroup.GetHashCode();
}
public override string ToString() {
Contract.Assert(m_algorithmGroup != null);
return m_algorithmGroup;
}
//
// Well known algorithm groups
//
public static CngAlgorithmGroup DiffieHellman {
get {
Contract.Ensures(Contract.Result() != null);
if (s_dh == null) {
s_dh = new CngAlgorithmGroup("DH"); // NCRYPT_DH_ALGORITHM_GROUP
}
return s_dh;
}
}
public static CngAlgorithmGroup Dsa {
get {
Contract.Ensures(Contract.Result() != null);
if (s_dsa == null) {
s_dsa = new CngAlgorithmGroup("DSA"); // NCRYPT_DSA_ALGORITHM_GROUP
}
return s_dsa;
}
}
public static CngAlgorithmGroup ECDiffieHellman {
[Pure]
get {
Contract.Ensures(Contract.Result() != null);
if (s_ecdh == null) {
s_ecdh = new CngAlgorithmGroup("ECDH"); // NCRYPT_ECDH_ALGORITHM_GROUP
}
return s_ecdh;
}
}
public static CngAlgorithmGroup ECDsa {
[Pure]
get {
Contract.Ensures(Contract.Result() != null);
if (s_ecdsa == null) {
s_ecdsa = new CngAlgorithmGroup("ECDSA"); // NCRYPT_ECDSA_ALGORITHM_GROUP
}
return s_ecdsa;
}
}
public static CngAlgorithmGroup Rsa {
get {
Contract.Ensures(Contract.Result() != null);
if (s_rsa == null) {
s_rsa = new CngAlgorithmGroup("RSA"); // NCRYPT_RSA_ALGORITHM_GROUP
}
return s_rsa;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DocumentReferenceCollection.cs
- LayoutManager.cs
- XPathMessageFilterElement.cs
- SourceItem.cs
- XmlQueryRuntime.cs
- FileVersionInfo.cs
- XmlQualifiedNameTest.cs
- listitem.cs
- RIPEMD160.cs
- ExpressionServices.cs
- DbParameterCollectionHelper.cs
- FormattedText.cs
- UnitControl.cs
- Walker.cs
- PointCollectionValueSerializer.cs
- BooleanSwitch.cs
- HttpHandlerAction.cs
- IpcPort.cs
- ScriptingScriptResourceHandlerSection.cs
- DocumentViewerConstants.cs
- Point.cs
- RegularExpressionValidator.cs
- SHA1.cs
- FixedSOMFixedBlock.cs
- GetUserPreferenceRequest.cs
- ListBoxAutomationPeer.cs
- BamlRecordReader.cs
- RequestQueue.cs
- BulletedListEventArgs.cs
- Msec.cs
- StylusPointCollection.cs
- QuadraticBezierSegment.cs
- FontCacheLogic.cs
- BamlWriter.cs
- XmlQueryRuntime.cs
- HttpCacheVary.cs
- prompt.cs
- MarkupObject.cs
- ApplicationDirectory.cs
- DataColumnPropertyDescriptor.cs
- EditableRegion.cs
- GeneratedView.cs
- WebServiceClientProxyGenerator.cs
- InvalidOleVariantTypeException.cs
- FramingDecoders.cs
- GPPOINT.cs
- _HeaderInfoTable.cs
- ConnectionManagementElement.cs
- TimeoutValidationAttribute.cs
- DataGridBoundColumn.cs
- DataGridRow.cs
- CachedRequestParams.cs
- FlowDocumentPage.cs
- SystemFonts.cs
- SignedXml.cs
- FilteredXmlReader.cs
- PathSegment.cs
- WeakReadOnlyCollection.cs
- GradientStopCollection.cs
- XpsDocument.cs
- ErrorCodes.cs
- HttpResponseInternalWrapper.cs
- SubqueryRules.cs
- ZoneMembershipCondition.cs
- ValidationEventArgs.cs
- MsmqIntegrationSecurity.cs
- baseaxisquery.cs
- FileChangesMonitor.cs
- ValueQuery.cs
- MsmqIntegrationChannelListener.cs
- OleDbConnection.cs
- DataSetUtil.cs
- PasswordRecovery.cs
- CustomPopupPlacement.cs
- ArraySubsetEnumerator.cs
- DataGridAddNewRow.cs
- TextLineBreak.cs
- ArraySortHelper.cs
- Point3DConverter.cs
- QilInvoke.cs
- DataSpaceManager.cs
- SolidColorBrush.cs
- WebPartEditorApplyVerb.cs
- X509Extension.cs
- ChangeConflicts.cs
- RoleGroup.cs
- Message.cs
- WSTrust.cs
- XmlSchema.cs
- control.ime.cs
- StatusBarItemAutomationPeer.cs
- Root.cs
- PenThreadPool.cs
- loginstatus.cs
- LinkArea.cs
- InvokeProviderWrapper.cs
- XmlWhitespace.cs
- ActiveDocumentEvent.cs
- SmiConnection.cs
- RemoteWebConfigurationHostStream.cs