Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / ManagedLibraries / Security / System / Security / Cryptography / CryptographicAttribute.cs / 1 / CryptographicAttribute.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // CryptographicAttributeObject.cs // // 07/10/2003 // namespace System.Security.Cryptography { using System.Collections; using System.Globalization; using System.Runtime.InteropServices; using System.Security.Cryptography.Pkcs; [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObject { private Oid m_oid = null; private AsnEncodedDataCollection m_values = null; // // Constructors. // private CryptographicAttributeObject () {} internal CryptographicAttributeObject (IntPtr pAttribute) : this((CAPI.CRYPT_ATTRIBUTE) Marshal.PtrToStructure(pAttribute, typeof(CAPI.CRYPT_ATTRIBUTE))) {} internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE_TYPE_VALUE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} internal CryptographicAttributeObject (AsnEncodedData asnEncodedData) : this(asnEncodedData.Oid, new AsnEncodedDataCollection(asnEncodedData)) {} public CryptographicAttributeObject (Oid oid) : this(oid, new AsnEncodedDataCollection()) {} public CryptographicAttributeObject (Oid oid, AsnEncodedDataCollection values) { m_oid = new Oid(oid); if (values == null) m_values = new AsnEncodedDataCollection(); else { foreach (AsnEncodedData asn in values) { if (0 != String.Compare(asn.Oid.Value, oid.Value, StringComparison.Ordinal)) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); } m_values = values; } } // // Public properties. // public Oid Oid { get { return new Oid(m_oid); } } public AsnEncodedDataCollection Values { get { return m_values; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectCollection : ICollection { private ArrayList m_list; public CryptographicAttributeObjectCollection() { m_list = new ArrayList(); } private CryptographicAttributeObjectCollection (IntPtr pCryptAttributes) : this((CAPI.CRYPT_ATTRIBUTES) Marshal.PtrToStructure(pCryptAttributes, typeof(CAPI.CRYPT_ATTRIBUTES))) {} internal CryptographicAttributeObjectCollection (SafeLocalAllocHandle pCryptAttributes) : this(pCryptAttributes.DangerousGetHandle()) {} internal CryptographicAttributeObjectCollection (CAPI.CRYPT_ATTRIBUTES cryptAttributes) { m_list = new ArrayList(); for (uint index = 0; index < cryptAttributes.cAttr; index++) { IntPtr pCryptAttribute = new IntPtr((long)cryptAttributes.rgAttr + (index * Marshal.SizeOf(typeof(CAPI.CRYPT_ATTRIBUTE)))); m_list.Add(new CryptographicAttributeObject(pCryptAttribute)); } } public CryptographicAttributeObjectCollection (CryptographicAttributeObject attribute) { m_list = new ArrayList(); m_list.Add(attribute); } public int Add (AsnEncodedData asnEncodedData) { if (asnEncodedData == null) throw new ArgumentNullException("asnEncodedData"); return Add(new CryptographicAttributeObject(asnEncodedData)); } public int Add (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); // // Merge with exisitng attribute, if already existed, else add as new. // string szOid1 = null; if (attribute.Oid != null) szOid1 = attribute.Oid.Value; for (int index = 0; index < m_list.Count; index++) { CryptographicAttributeObject existing = (CryptographicAttributeObject) m_list[index]; // To prevent caller to add the existing item into the collection again // Otherwise the merge will be an infinite loop if ((Object) existing.Values == (Object) attribute.Values) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); // Merge either: // 1. both OIDs are null, or // 2. both not null and OIDs match. string szOid2 = null; if (existing.Oid != null) szOid2 = existing.Oid.Value; if (szOid1 == null && szOid2 == null) { foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } if ((szOid1 != null && szOid2 != null) && (String.Compare(szOid1, szOid2, StringComparison.OrdinalIgnoreCase) == 0)) { // // Only allow one signing time, per RFC. // if (String.Compare(szOid1, CAPI.szOID_RSA_signingTime, StringComparison.OrdinalIgnoreCase) == 0) throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Pkcs9_MultipleSigningTimeNotAllowed")); foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } } return m_list.Add(attribute); } public void Remove (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); m_list.Remove(attribute); } public CryptographicAttributeObject this[int index] { get { return (CryptographicAttributeObject) m_list[index]; } } public int Count { get { return m_list.Count; } } public CryptographicAttributeObjectEnumerator GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } ///IEnumerator IEnumerable.GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (array.Rank != 1) throw new ArgumentException(SecurityResources.GetResourceString("Arg_RankMultiDimNotSupported")); if (index < 0 || index >= array.Length) throw new ArgumentOutOfRangeException("index", SecurityResources.GetResourceString("ArgumentOutOfRange_Index")); if (index + this.Count > array.Length) throw new ArgumentException(SecurityResources.GetResourceString("Argument_InvalidOffLen")); for (int i=0; i < this.Count; i++) { array.SetValue(this[i], index); index++; } } public void CopyTo(CryptographicAttributeObject[] array, int index) { ((ICollection)this).CopyTo(array, index); } public bool IsSynchronized { get { return false; } } public Object SyncRoot { get { return this; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectEnumerator : IEnumerator { private CryptographicAttributeObjectCollection m_attributes; private int m_current; private CryptographicAttributeObjectEnumerator() {} internal CryptographicAttributeObjectEnumerator(CryptographicAttributeObjectCollection attributes) { m_attributes = attributes; m_current = -1; } public CryptographicAttributeObject Current { get { return m_attributes[m_current]; } } /// Object IEnumerator.Current { get { return (Object) m_attributes[m_current]; } } public bool MoveNext() { if (m_current == ((int) m_attributes.Count - 1)) return false; m_current++; return true; } public void Reset() { m_current = -1; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // CryptographicAttributeObject.cs // // 07/10/2003 // namespace System.Security.Cryptography { using System.Collections; using System.Globalization; using System.Runtime.InteropServices; using System.Security.Cryptography.Pkcs; [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObject { private Oid m_oid = null; private AsnEncodedDataCollection m_values = null; // // Constructors. // private CryptographicAttributeObject () {} internal CryptographicAttributeObject (IntPtr pAttribute) : this((CAPI.CRYPT_ATTRIBUTE) Marshal.PtrToStructure(pAttribute, typeof(CAPI.CRYPT_ATTRIBUTE))) {} internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE_TYPE_VALUE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} internal CryptographicAttributeObject (AsnEncodedData asnEncodedData) : this(asnEncodedData.Oid, new AsnEncodedDataCollection(asnEncodedData)) {} public CryptographicAttributeObject (Oid oid) : this(oid, new AsnEncodedDataCollection()) {} public CryptographicAttributeObject (Oid oid, AsnEncodedDataCollection values) { m_oid = new Oid(oid); if (values == null) m_values = new AsnEncodedDataCollection(); else { foreach (AsnEncodedData asn in values) { if (0 != String.Compare(asn.Oid.Value, oid.Value, StringComparison.Ordinal)) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); } m_values = values; } } // // Public properties. // public Oid Oid { get { return new Oid(m_oid); } } public AsnEncodedDataCollection Values { get { return m_values; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectCollection : ICollection { private ArrayList m_list; public CryptographicAttributeObjectCollection() { m_list = new ArrayList(); } private CryptographicAttributeObjectCollection (IntPtr pCryptAttributes) : this((CAPI.CRYPT_ATTRIBUTES) Marshal.PtrToStructure(pCryptAttributes, typeof(CAPI.CRYPT_ATTRIBUTES))) {} internal CryptographicAttributeObjectCollection (SafeLocalAllocHandle pCryptAttributes) : this(pCryptAttributes.DangerousGetHandle()) {} internal CryptographicAttributeObjectCollection (CAPI.CRYPT_ATTRIBUTES cryptAttributes) { m_list = new ArrayList(); for (uint index = 0; index < cryptAttributes.cAttr; index++) { IntPtr pCryptAttribute = new IntPtr((long)cryptAttributes.rgAttr + (index * Marshal.SizeOf(typeof(CAPI.CRYPT_ATTRIBUTE)))); m_list.Add(new CryptographicAttributeObject(pCryptAttribute)); } } public CryptographicAttributeObjectCollection (CryptographicAttributeObject attribute) { m_list = new ArrayList(); m_list.Add(attribute); } public int Add (AsnEncodedData asnEncodedData) { if (asnEncodedData == null) throw new ArgumentNullException("asnEncodedData"); return Add(new CryptographicAttributeObject(asnEncodedData)); } public int Add (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); // // Merge with exisitng attribute, if already existed, else add as new. // string szOid1 = null; if (attribute.Oid != null) szOid1 = attribute.Oid.Value; for (int index = 0; index < m_list.Count; index++) { CryptographicAttributeObject existing = (CryptographicAttributeObject) m_list[index]; // To prevent caller to add the existing item into the collection again // Otherwise the merge will be an infinite loop if ((Object) existing.Values == (Object) attribute.Values) throw new InvalidOperationException(SecurityResources.GetResourceString("InvalidOperation_DuplicateItemNotAllowed")); // Merge either: // 1. both OIDs are null, or // 2. both not null and OIDs match. string szOid2 = null; if (existing.Oid != null) szOid2 = existing.Oid.Value; if (szOid1 == null && szOid2 == null) { foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } if ((szOid1 != null && szOid2 != null) && (String.Compare(szOid1, szOid2, StringComparison.OrdinalIgnoreCase) == 0)) { // // Only allow one signing time, per RFC. // if (String.Compare(szOid1, CAPI.szOID_RSA_signingTime, StringComparison.OrdinalIgnoreCase) == 0) throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Pkcs9_MultipleSigningTimeNotAllowed")); foreach (AsnEncodedData asnEncodedData in attribute.Values) { existing.Values.Add(asnEncodedData); } return index; } } return m_list.Add(attribute); } public void Remove (CryptographicAttributeObject attribute) { if (attribute == null) throw new ArgumentNullException("attribute"); m_list.Remove(attribute); } public CryptographicAttributeObject this[int index] { get { return (CryptographicAttributeObject) m_list[index]; } } public int Count { get { return m_list.Count; } } public CryptographicAttributeObjectEnumerator GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } /// IEnumerator IEnumerable.GetEnumerator() { return new CryptographicAttributeObjectEnumerator(this); } /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (array.Rank != 1) throw new ArgumentException(SecurityResources.GetResourceString("Arg_RankMultiDimNotSupported")); if (index < 0 || index >= array.Length) throw new ArgumentOutOfRangeException("index", SecurityResources.GetResourceString("ArgumentOutOfRange_Index")); if (index + this.Count > array.Length) throw new ArgumentException(SecurityResources.GetResourceString("Argument_InvalidOffLen")); for (int i=0; i < this.Count; i++) { array.SetValue(this[i], index); index++; } } public void CopyTo(CryptographicAttributeObject[] array, int index) { ((ICollection)this).CopyTo(array, index); } public bool IsSynchronized { get { return false; } } public Object SyncRoot { get { return this; } } } [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class CryptographicAttributeObjectEnumerator : IEnumerator { private CryptographicAttributeObjectCollection m_attributes; private int m_current; private CryptographicAttributeObjectEnumerator() {} internal CryptographicAttributeObjectEnumerator(CryptographicAttributeObjectCollection attributes) { m_attributes = attributes; m_current = -1; } public CryptographicAttributeObject Current { get { return m_attributes[m_current]; } } /// Object IEnumerator.Current { get { return (Object) m_attributes[m_current]; } } public bool MoveNext() { if (m_current == ((int) m_attributes.Count - 1)) return false; m_current++; return true; } public void Reset() { m_current = -1; } } } // 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
- StringStorage.cs
- DBNull.cs
- DataBindingHandlerAttribute.cs
- StreamGeometry.cs
- InstanceHandleConflictException.cs
- Pair.cs
- CachingHintValidation.cs
- CompareValidator.cs
- AllMembershipCondition.cs
- DataDesignUtil.cs
- RuntimeResourceSet.cs
- FileDialogPermission.cs
- Normalization.cs
- ArithmeticException.cs
- XamlLoadErrorInfo.cs
- MulticastDelegate.cs
- DesignerValidatorAdapter.cs
- StrokeNode.cs
- TableHeaderCell.cs
- HttpModuleActionCollection.cs
- CmsInterop.cs
- IntSecurity.cs
- DoubleLink.cs
- WorkflowOperationContext.cs
- ClientSideProviderDescription.cs
- DBSqlParserColumn.cs
- BooleanSwitch.cs
- ThemeDirectoryCompiler.cs
- SqlInfoMessageEvent.cs
- WpfGeneratedKnownProperties.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- TreeSet.cs
- AdvancedBindingPropertyDescriptor.cs
- Translator.cs
- UnionExpr.cs
- MediaPlayerState.cs
- ToolStripButton.cs
- TextBoxBase.cs
- XmlSerializableServices.cs
- XmlAttribute.cs
- OrCondition.cs
- SafeNativeMethods.cs
- ErrorWrapper.cs
- WindowsBrush.cs
- CodeDelegateCreateExpression.cs
- VisualTransition.cs
- FamilyMapCollection.cs
- DbMetaDataCollectionNames.cs
- ToolStripRendererSwitcher.cs
- DateTimeConverter2.cs
- ListViewDeletedEventArgs.cs
- ObjectStateEntryDbDataRecord.cs
- DocobjHost.cs
- SecurityTokenValidationException.cs
- VsPropertyGrid.cs
- NamedPipeDuplicateContext.cs
- Keywords.cs
- XmlDataDocument.cs
- DataServiceExpressionVisitor.cs
- TypeBinaryExpression.cs
- FusionWrap.cs
- BCLDebug.cs
- TagMapInfo.cs
- BitmapEffectInput.cs
- JpegBitmapDecoder.cs
- SpecularMaterial.cs
- GlyphTypeface.cs
- ConfigXmlElement.cs
- SymbolDocumentGenerator.cs
- WebEventCodes.cs
- CalendarDataBindingHandler.cs
- ItemList.cs
- SqlTypeConverter.cs
- ThreadExceptionDialog.cs
- CancelEventArgs.cs
- LinkedResource.cs
- MissingManifestResourceException.cs
- PropertyChangingEventArgs.cs
- AssemblyCollection.cs
- HashStream.cs
- SqlDataSourceConnectionPanel.cs
- KeyEvent.cs
- ForeignKeyConstraint.cs
- PermissionToken.cs
- SoapIgnoreAttribute.cs
- BuildManagerHost.cs
- AesManaged.cs
- DesignerRegionCollection.cs
- GridViewRowPresenterBase.cs
- DataGridViewColumnHeaderCell.cs
- PerfCounters.cs
- BamlBinaryWriter.cs
- CrossSiteScriptingValidation.cs
- NonClientArea.cs
- DeadCharTextComposition.cs
- compensatingcollection.cs
- AutoScrollExpandMessageFilter.cs
- DesignTimeValidationFeature.cs
- ZoneMembershipCondition.cs
- CopyAttributesAction.cs