Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Security / System / Security / Cryptography / CryptographicAttribute.cs / 1305376 / 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 () {} [SecurityCritical] internal CryptographicAttributeObject (IntPtr pAttribute) : this((CAPI.CRYPT_ATTRIBUTE) Marshal.PtrToStructure(pAttribute, typeof(CAPI.CRYPT_ATTRIBUTE))) {} [SecurityCritical] internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} [SecurityCritical] 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(); } [SecurityCritical] private CryptographicAttributeObjectCollection (IntPtr pCryptAttributes) : this((CAPI.CRYPT_ATTRIBUTES) Marshal.PtrToStructure(pCryptAttributes, typeof(CAPI.CRYPT_ATTRIBUTES))) {} [SecurityCritical] internal CryptographicAttributeObjectCollection (SafeLocalAllocHandle pCryptAttributes) : this(pCryptAttributes.DangerousGetHandle()) {} [SecurityCritical] 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 () {} [SecurityCritical] internal CryptographicAttributeObject (IntPtr pAttribute) : this((CAPI.CRYPT_ATTRIBUTE) Marshal.PtrToStructure(pAttribute, typeof(CAPI.CRYPT_ATTRIBUTE))) {} [SecurityCritical] internal CryptographicAttributeObject (CAPI.CRYPT_ATTRIBUTE cryptAttribute) : this(new Oid(cryptAttribute.pszObjId), PkcsUtils.GetAsnEncodedDataCollection(cryptAttribute)) {} [SecurityCritical] 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(); } [SecurityCritical] private CryptographicAttributeObjectCollection (IntPtr pCryptAttributes) : this((CAPI.CRYPT_ATTRIBUTES) Marshal.PtrToStructure(pCryptAttributes, typeof(CAPI.CRYPT_ATTRIBUTES))) {} [SecurityCritical] internal CryptographicAttributeObjectCollection (SafeLocalAllocHandle pCryptAttributes) : this(pCryptAttributes.DangerousGetHandle()) {} [SecurityCritical] 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
- HttpListenerTimeoutManager.cs
- DataGridViewCellStyle.cs
- SqlCharStream.cs
- TreeNodeStyleCollection.cs
- DataBoundControl.cs
- ServiceNotStartedException.cs
- XmlSerializer.cs
- VisualBrush.cs
- OrderedHashRepartitionStream.cs
- EventMappingSettingsCollection.cs
- JpegBitmapDecoder.cs
- UpdatePanel.cs
- ConstraintCollection.cs
- ItemDragEvent.cs
- ColorComboBox.cs
- DocumentScope.cs
- SystemFonts.cs
- RequestCachingSection.cs
- iisPickupDirectory.cs
- XsltQilFactory.cs
- DataTableTypeConverter.cs
- StringSource.cs
- QuaternionAnimationBase.cs
- ListArgumentProvider.cs
- DeclaredTypeElementCollection.cs
- ClientApiGenerator.cs
- RangeBase.cs
- SectionUpdates.cs
- HtmlPanelAdapter.cs
- CodeDirectoryCompiler.cs
- WindowsPrincipal.cs
- VisualCollection.cs
- Grant.cs
- OdbcConnectionOpen.cs
- MsmqIntegrationInputMessage.cs
- NavigateEvent.cs
- UriScheme.cs
- SuppressMessageAttribute.cs
- ZipIOExtraField.cs
- AnnotationMap.cs
- Directory.cs
- Configuration.cs
- RedistVersionInfo.cs
- GeometryDrawing.cs
- SynchronizedMessageSource.cs
- ToolStripLocationCancelEventArgs.cs
- DrawingContextWalker.cs
- Int32CollectionConverter.cs
- Int16.cs
- DocumentPageHost.cs
- SerialPinChanges.cs
- TypeBuilderInstantiation.cs
- DynamicPhysicalDiscoSearcher.cs
- TextDecorationCollection.cs
- BCLDebug.cs
- BinaryUtilClasses.cs
- RuntimeConfig.cs
- CodePrimitiveExpression.cs
- FileChangesMonitor.cs
- BuildProviderAppliesToAttribute.cs
- StringExpressionSet.cs
- XmlSchemaComplexContentExtension.cs
- DPTypeDescriptorContext.cs
- SQLChars.cs
- NativeDirectoryServicesQueryAPIs.cs
- MergeFailedEvent.cs
- PolicyChain.cs
- PageTrueTypeFont.cs
- Merger.cs
- ControlPager.cs
- MsmqIntegrationElement.cs
- SafeNativeMethodsOther.cs
- RealizedColumnsBlock.cs
- ButtonFlatAdapter.cs
- UIElement.cs
- CallbackDebugElement.cs
- NumberSubstitution.cs
- TextEmbeddedObject.cs
- keycontainerpermission.cs
- RectangleConverter.cs
- CultureInfoConverter.cs
- TextComposition.cs
- AssemblyAttributesGoHere.cs
- RubberbandSelector.cs
- DictionaryChange.cs
- TextSchema.cs
- UserControlCodeDomTreeGenerator.cs
- DataSourceProvider.cs
- SystemColors.cs
- HtmlInputPassword.cs
- PenLineCapValidation.cs
- BigIntegerStorage.cs
- OperandQuery.cs
- JpegBitmapEncoder.cs
- SqlSelectStatement.cs
- InvokePattern.cs
- XmlILIndex.cs
- WinFormsComponentEditor.cs
- ScrollEventArgs.cs
- SqlDataSourceStatusEventArgs.cs