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; }
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; }
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; }