コード例 #1
0
ANSC_HANDLE
AnscAsn1CloneInt
    (
        ANSC_HANDLE                 hSrcAsn1Int
    )
{
    PANSC_ASN1_INT                  pSrcAsn1Int = (PANSC_ASN1_INT)hSrcAsn1Int;
    PANSC_ASN1_INT                  pNewAsn1Int = NULL;

    if ( pSrcAsn1Int )
    {
        pNewAsn1Int =
            (PANSC_ASN1_INT)AnscAsn1AllocInt
                (
                    pSrcAsn1Int->Octets,
                    pSrcAsn1Int->Length,
                    pSrcAsn1Int->bNegative
                );
    }
    else
    {
        return  (ANSC_HANDLE)NULL;
    }

    return  (ANSC_HANDLE)pNewAsn1Int;
}
コード例 #2
0
ANSC_ASN1_INT*
AnscX509CertGetSerialNumber
    (
        void*                       raw_cert_data,
        ULONG                       raw_cert_size
    )
{
    PANSC_ASN1_CERTIFICATE          pAsnCert        = NULL;
    ANSC_ASN1_INT*                  pIntValue       = NULL;
    PANSC_ASN1_INTEGER              pSerialObj;

    /* decode the asn.1 certificate handle */
    pAsnCert = (PANSC_ASN1_CERTIFICATE)
        anscGetCertHandle
            (
                raw_cert_data,
                raw_cert_size
            );

    if( pAsnCert == NULL)
    {
        goto EXIT;
    }

    /* get the serial number */
    pSerialObj = (PANSC_ASN1_INTEGER)pAsnCert->GetSerialNumber(pAsnCert);

    if( pSerialObj == NULL || pSerialObj->bOptional)
    {
        goto EXIT;
    }

    pIntValue =
        (ANSC_ASN1_INT*)AnscAsn1AllocInt
            (
                (PUCHAR)pSerialObj->GetValueBuffer(pSerialObj),
                pSerialObj->uLength,
                FALSE
            );

EXIT:

    anscFreeCertHandle((ANSC_HANDLE)pAsnCert);

    return pIntValue;
}
コード例 #3
0
ANSC_STATUS
TlsCpoDecapDHPublicKey
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_X509_KEY*              dh_key,
        ANSC_ASN1_INT**             dh_prime,
        ANSC_ASN1_INT**             dh_generator,
        ANSC_ASN1_INT**             dh_public
    )
{
    PTLS_CRYPTO_PROVIDER_OBJECT     pMyObject    = (PTLS_CRYPTO_PROVIDER_OBJECT)hThisObject;
    ANSC_ASN1_INT*                  pDhPrime     = (ANSC_ASN1_INT*             )NULL;
    ANSC_ASN1_INT*                  pDhGenerator = (ANSC_ASN1_INT*             )NULL;
    ANSC_ASN1_INT*                  pDhPublic    = (ANSC_ASN1_INT*             )NULL;
    PANSC_CRYPTO_DH_PARAMETERS      pDHParam     = NULL;

    pDHParam = (PANSC_CRYPTO_DH_PARAMETERS)dh_key->KeyData;

    if( pDHParam == NULL)
    {
        return ANSC_STATUS_FAILURE;
    }

    if( dh_key->KeyType != ANSC_CERT_keyType_diffieHellman)
    {
        AnscTrace("Invalid key type in TlsCpoDecapDHPublicKey().\n");

        return ANSC_STATUS_FAILURE;
    }

    /* create all the PANSC_ASN1_INTs */
    pDhPrime = 
        (PANSC_ASN1_INT)AnscAsn1AllocInt
            (
                pDHParam->GroupPrime.Data,
                pDHParam->GroupPrime.Length,
                FALSE
            );

    pDhGenerator = 
        (PANSC_ASN1_INT)AnscAsn1AllocInt
            (
                pDHParam->GroupGenerator.Data.ucData,
                pDHParam->GroupGenerator.Length,
                FALSE
            );

    pDhPublic   =
        (PANSC_ASN1_INT)AnscAsn1AllocInt
            (
                pDHParam->PublicKey.Data.ucData,
                pDHParam->PublicKey.Length,
                FALSE
            );

    *dh_prime     = pDhPrime;
    *dh_generator = pDhGenerator;
    *dh_public    = pDhPublic;

    return  ANSC_STATUS_SUCCESS;
}