X509EnhancedKeyUsageExtension Class

 

Defines the collection of object identifiers (OIDs) that indicates the applications that use the key. This class cannot be inherited.

Namespace:   System.Security.Cryptography.X509Certificates
Assembly:  System (in System.dll)

System::Object
  System.Security.Cryptography::AsnEncodedData
    System.Security.Cryptography.X509Certificates::X509Extension
      System.Security.Cryptography.X509Certificates::X509EnhancedKeyUsageExtension

public ref class X509EnhancedKeyUsageExtension sealed : X509Extension

NameDescription
System_CAPS_pubmethodX509EnhancedKeyUsageExtension()

Initializes a new instance of the X509EnhancedKeyUsageExtension class.

System_CAPS_pubmethodX509EnhancedKeyUsageExtension(AsnEncodedData^, Boolean)

Initializes a new instance of the X509EnhancedKeyUsageExtension class using an AsnEncodedData object and a value that identifies whether the extension is critical.

System_CAPS_pubmethodX509EnhancedKeyUsageExtension(OidCollection^, Boolean)

Initializes a new instance of the X509EnhancedKeyUsageExtension class using an OidCollection and a value that identifies whether the extension is critical.

NameDescription
System_CAPS_pubpropertyCritical

Gets a Boolean value indicating whether the extension is critical.(Inherited from X509Extension.)

System_CAPS_pubpropertyEnhancedKeyUsages

Gets the collection of object identifiers (OIDs) that indicate the applications that use the key.

System_CAPS_pubpropertyOid

Gets or sets the Oid value for an AsnEncodedData object.(Inherited from AsnEncodedData.)

System_CAPS_pubpropertyRawData

Gets or sets the Abstract Syntax Notation One (ASN.1)-encoded data represented in a byte array.(Inherited from AsnEncodedData.)

NameDescription
System_CAPS_pubmethodCopyFrom(AsnEncodedData^)

Initializes a new instance of the X509EnhancedKeyUsageExtension class using an AsnEncodedData object.(Overrides X509Extension::CopyFrom(AsnEncodedData^).)

System_CAPS_pubmethodEquals(Object^)

Determines whether the specified object is equal to the current object.(Inherited from Object.)

System_CAPS_pubmethodFormat(Boolean)

Returns a formatted version of the Abstract Syntax Notation One (ASN.1)-encoded data as a string.(Inherited from AsnEncodedData.)

System_CAPS_pubmethodGetHashCode()

Serves as the default hash function. (Inherited from Object.)

System_CAPS_pubmethodGetType()

Gets the Type of the current instance.(Inherited from Object.)

System_CAPS_pubmethodToString()

Returns a string that represents the current object.(Inherited from Object.)

An enhanced key usage (EKU) extension is a collection of object identifiers (OIDs) that indicate the applications that use the key.

The following code example demonstrates how to open a user’s personal certificate store and display information about each certificate in the store. This example uses the X509EnhancedKeyUsageExtension class to display the information.

#using <System.dll>
#using <system.security.dll>

using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Cryptography::X509Certificates;
int main()
{
   try
   {
      X509Store^ store = gcnew X509Store( L"MY",StoreLocation::CurrentUser );
      store->Open( static_cast<OpenFlags>(OpenFlags::ReadOnly | OpenFlags::OpenExistingOnly) );
      X509Certificate2Collection^ collection = dynamic_cast<X509Certificate2Collection^>(store->Certificates);
      for ( int i = 0; i < collection->Count; i++ )
      {
         System::Collections::IEnumerator^ myEnum = collection[ i ]->Extensions->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            X509Extension^ extension = safe_cast<X509Extension^>(myEnum->Current);
            Console::WriteLine( L"{0}({1})", extension->Oid->FriendlyName, extension->Oid->Value );
            if ( extension->Oid->FriendlyName == L"Key Usage" )
            {
               X509KeyUsageExtension^ ext = dynamic_cast<X509KeyUsageExtension^>(extension);
               Console::WriteLine( ext->KeyUsages );
            }
            if ( extension->Oid->FriendlyName == L"Basic Constraints" )
            {
               X509BasicConstraintsExtension^ ext = dynamic_cast<X509BasicConstraintsExtension^>(extension);
               Console::WriteLine( ext->CertificateAuthority );
               Console::WriteLine( ext->HasPathLengthConstraint );
               Console::WriteLine( ext->PathLengthConstraint );
            }
            if ( extension->Oid->FriendlyName == L"Subject Key Identifier" )
            {
               X509SubjectKeyIdentifierExtension^ ext = dynamic_cast<X509SubjectKeyIdentifierExtension^>(extension);
               Console::WriteLine( ext->SubjectKeyIdentifier );
            }
            if ( extension->Oid->FriendlyName == L"Enhanced Key Usage" )
            {
               X509EnhancedKeyUsageExtension^ ext = dynamic_cast<X509EnhancedKeyUsageExtension^>(extension);
               OidCollection^ oids = ext->EnhancedKeyUsages;
               System::Collections::IEnumerator^ myEnum1 = oids->GetEnumerator();
               while ( myEnum1->MoveNext() )
               {
                  Oid^ oid = safe_cast<Oid^>(myEnum1->Current);
                  Console::WriteLine( L"{0}({1})", oid->FriendlyName, oid->Value );
               }
            }
         }

      }
      store->Close();
   }
   catch ( CryptographicException^ ) 
   {
      Console::WriteLine( L"Information could not be written out for this certificate." );
   }

}

.NET Framework
Available since 2.0

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
Show: