Sample code for 30+ languages & platforms
DataFlex

Binary Certificate Extension Data

See more Certificates Examples

Demonstrates how to binary certificate extension data by OID.

The GetExtensionBd method is added in Chilkat v9.5.0.96.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoCert
    Variant vBd
    Handle hoBd
    String sOid
    String sStrXml
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatCert)) To hoCert
    If (Not(IsComObjectCreated(hoCert))) Begin
        Send CreateComObject of hoCert
    End

    Get ComLoadFromFile Of hoCert "qa_data/certs/testCert.cer" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoCert To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatBinData)) To hoBd
    If (Not(IsComObjectCreated(hoBd))) Begin
        Send CreateComObject of hoBd
    End

    // The particular certificate in this test contains the following extensions

    Move "1.2.250.1.71.1.2.5" To sOid
    Get pvComObject of hoBd to vBd
    Get ComGetExtensionBd Of hoCert sOid vBd To iSuccess
    If (iSuccess = True) Begin
        Get ComGetEncoded Of hoBd "hex_lower" To sTemp1
        Showln sOid ": " sTemp1
    End

    Move "1.2.250.1.71.1.2.2" To sOid
    Get pvComObject of hoBd to vBd
    Get ComGetExtensionBd Of hoCert sOid vBd To iSuccess
    If (iSuccess = True) Begin
        Get ComGetEncoded Of hoBd "hex_lower" To sTemp1
        Showln sOid ": " sTemp1
    End

    Move "1.2.250.1.71.1.2.3" To sOid
    Get pvComObject of hoBd to vBd
    Get ComGetExtensionBd Of hoCert sOid vBd To iSuccess
    If (iSuccess = True) Begin
        Get ComGetEncoded Of hoBd "hex_lower" To sTemp1
        Showln sOid ": " sTemp1
    End

    Move "1.2.250.1.71.1.2.7" To sOid
    Get pvComObject of hoBd to vBd
    Get ComGetExtensionBd Of hoCert sOid vBd To iSuccess
    If (iSuccess = True) Begin
        Get ComGetEncoded Of hoBd "hex_lower" To sTemp1
        Showln sOid ": " sTemp1
    End

    Move "1.2.250.1.71.4.2.5" To sOid
    Get pvComObject of hoBd to vBd
    Get ComGetExtensionBd Of hoCert sOid vBd To iSuccess
    If (iSuccess = True) Begin
        Get ComGetEncoded Of hoBd "hex_lower" To sTemp1
        Showln sOid ": " sTemp1
    End

    // Sample output:
    // 1.2.250.1.71.1.2.5: 040180
    // 1.2.250.1.71.1.2.2: 020100
    // 1.2.250.1.71.1.2.3: 1315383032353030303030312f32393030303539313432
    // 1.2.250.1.71.1.2.7: 02010a
    // 1.2.250.1.71.4.2.5: 30060c04534d3236

    // The above binary values are actually ASN.1
    // You can get the ASN.1 decoed by calling GetExtensionAsXml to get it in XML format,
    // and then you extract the values from the XML.

    Move "1.2.250.1.71.1.2.5" To sOid
    Get ComGetExtensionAsXml Of hoCert sOid To sStrXml
    Get ComLastMethodSuccess Of hoCert To bTemp1
    If (bTemp1 = True) Begin
        Showln sOid ": " sStrXml
    End

    Move "1.2.250.1.71.1.2.2" To sOid
    Get ComGetExtensionAsXml Of hoCert sOid To sStrXml
    Get ComLastMethodSuccess Of hoCert To bTemp1
    If (bTemp1 = True) Begin
        Showln sOid ": " sStrXml
    End

    Move "1.2.250.1.71.1.2.3" To sOid
    Get ComGetExtensionAsXml Of hoCert sOid To sStrXml
    Get ComLastMethodSuccess Of hoCert To bTemp1
    If (bTemp1 = True) Begin
        Showln sOid ": " sStrXml
    End

    Move "1.2.250.1.71.1.2.7" To sOid
    Get ComGetExtensionAsXml Of hoCert sOid To sStrXml
    Get ComLastMethodSuccess Of hoCert To bTemp1
    If (bTemp1 = True) Begin
        Showln sOid ": " sStrXml
    End

    Move "1.2.250.1.71.4.2.5" To sOid
    Get ComGetExtensionAsXml Of hoCert sOid To sStrXml
    Get ComLastMethodSuccess Of hoCert To bTemp1
    If (bTemp1 = True) Begin
        Showln sOid ": " sStrXml
    End

    // Sample output:
    // 1.2.250.1.71.1.2.5: <octets>gA==</octets>
    // 1.2.250.1.71.1.2.2: <int>00</int>
    // 1.2.250.1.71.1.2.3: <printable>8025000001/2900059142</printable>
    // 1.2.250.1.71.1.2.7: <int>0A</int>
    // 1.2.250.1.71.4.2.5: <sequence><utf8>SM26</utf8></sequence>

    // "gA==" is the base64 encoded byte values
    // "0A" is hex for decimal 1


End_Procedure