亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? defcertvfy.c

?? IBE是一種非對稱密碼技術
?? C
?? 第 1 頁 / 共 2 頁
字號:
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateAlgorithmObject (
      libCtx, coderInfo.info.getAlgData.DigestImpl, (Pointer)0,
      &digester);
    if (status != 0)
      break;
    
    /* Isolate the TBS portion of the cert.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    x509ToVerify = Asn1X509CertToVerify_new ();
    if (x509ToVerify == (Asn1X509CertToVerify *)0)
      break;

    Asn1SetObjectCopyFlag (
      (VoltAsn1String *)(x509ToVerify->innerCert), VOLT_ASN1_COPY_REFERENCE);

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_UNKNOWN_BER;
    temp = obj->certificate.data;
    d2i_Asn1X509CertToVerify (&x509ToVerify, &temp, obj->certificate.len);

    /* Did it work?
     */
    if (x509ToVerify == (Asn1X509CertToVerify *)0)
      break;

    /* Digest the data.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtDigestInit (digester);
    if (status != 0)
      break;

    /* First call, get the size. We expect to get BUFFER_TOO_SMALL.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtDigestFinal (
      digester, x509ToVerify->innerCert->base.data,
      (unsigned int)(x509ToVerify->innerCert->base.length),
      (unsigned char *)0, 0, &bufferSize);
    if (status == 0)
      status = VT_ERROR_GENERAL;
    if (status != VT_ERROR_BUFFER_TOO_SMALL)
      break;

    /* Allocate a buffer to hold the digest.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    digest = (unsigned char *)Z2Malloc (bufferSize, 0);
    if (digest == (unsigned char *)0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtDigestFinal (
      digester, x509ToVerify->innerCert->base.data,
      (unsigned int)(x509ToVerify->innerCert->base.length),
      digest, bufferSize, &digestLen);
    if (status != 0)
      break;

    digestAlg = ((VoltDigestClassCtx *)
      (((VoltAlgorithmObject *)digester)->classCtx))->algorithm;

    /* Isolate the signature.
     */
    signature = x509ToVerify->signature->data;
    signatureLen = (unsigned int)(x509ToVerify->signature->length);

    /* Find the issuer. First, what is the issuerName in the leaf cert?
     */
    issuerName = obj->certAsn1->innerCert->issuer->base.data;
    issuerNameLen =
      (unsigned int)(obj->certAsn1->innerCert->issuer->base.length);

    /* Build the verifyInfo to check a cert signing cert.
     */
    newVerifyInfo.keyUsage = VT_KEY_USAGE_KEY_CERT_SIGN;
    newVerifyInfo.usageTime = vInfo->usageTime;

    /* Use this to build keys from certs.
     */
    certInfo.derCoders = derCoders;
    certInfo.derCoderCount = derCoderCount;

    /* Run through all the certs. Check to see if it is the issuer. If
     * we find the issuer, we're done.
     * If we don't find an issuer that passes signature and elements,
     * we may find one that passes signature but not elements. We'll
     * use that one, but set the VerifyFailureList.
     */
    indexA = 0;
    indexB = 0;
    indexC = 0;
    indexD = 0;
    do
    {
      trusted = 0;
      candidate = (VoltCertObject *)0;
      sigVerify = 0;
      elementVerify = 0;
      if (indexA < ctx->trustedCerts.count)
      {
        candidate = (VoltCertObject *)(ctx->trustedCerts.certObjects[indexA]);
        trusted = 1;
        indexA++;
      }
      else if (indexB < tCount)
      {
        candidate = (VoltCertObject *)(trustedCerts->certObjects[indexB]);
        trusted = 1;
        indexB++;
      }
      else if (indexC < ctx->untrustedCerts.count)
      {
        candidate =
          (VoltCertObject *)(ctx->untrustedCerts.certObjects[indexC]);
        indexC++;
      }
      else if (indexD < uCount)
      {
        candidate = (VoltCertObject *)(untrustedCerts->certObjects[indexD]);
        indexD++;
      }

      /* If we ran out of candidates, exit the loop.
       */
      if (candidate == (VoltCertObject *)0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = IsIssuerCert (
        libCtx, obj->mpCtx, verifyCtx, &newVerifyInfo, vfyFailList,
        &certInfo, verifier, issuerName, issuerNameLen,
        digestAlg, digest, digestLen, signature, signatureLen,
        candidate, &sigVerify, &elementVerify);
      if (status != 0)
        break;

      /* If sigVerify is False, forget about that cert.
       * If everything verified, we're done.
       * If sigVerify is True but elementVerify is false, we may want
       * to save the cert anyway.
       */
      if (sigVerify == 0)
        continue;

      if (elementVerify != 0)
        break;

      /* If we reach this point, we found a cert that matched name and
       * verified the signature, but that cert did not verify elements.
       * Save it in case we find nothing that verifies all.
       * If we find multiples, save only the first one.
       */
      if (saveCert != (VoltCertObject *)0)
        continue;

      saveCert = candidate;
      saveTrusted = trusted;

    } while (1);
    if (status != 0)
      break;

    /* If sigVerify and elementVerify are both True, we found a good
     * cert. If it is trusted, we're done. If not, we'll have to check
     * it.
     */
    if ( (sigVerify != 0) && (elementVerify != 0) )
    {
      *verifyResult = 1;
      if (trusted != 0)
        break;

      /* This is not a trusted cert, we'll have to verify this one.
       */
      *verifyResult = 0;
      saveCert = candidate;
      saveTrusted = trusted;
    }

    /* If we reach this point, we need to check a saveCert. Well, if
     * there is one. If not, we found no cert to verify the current
     * cert, so log that in the VerifyList and exit.
     */
    if (saveCert == (VoltCertObject *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltAddVerifyListEntry (
        (VoltVerifyFailureList *)vfyFailList,
        VT_VFY_FAIL_REASON_CERT_CHAIN, certToVerify);
      break;
    }

    /* If elementVerify is False, that means the saveCert verified the
     * signature, but didn't verify the elements. If there's a verify
     * failure list, we'll want to log those errors.
     */
    if (elementVerify == 0)
    {
      if (vfyFailList != (VtVerifyFailureList)0)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = DefaultVerifyCertElements (
          verifyCtx, (Pointer)&newVerifyInfo, saveCert, vfyFailList,
          &elementVerify);
        if (status != 0)
          break;
      }
    }

    /* If this cert is not trusted, verify it.
     */
    if (saveTrusted == 0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = DefaultVerifyCertSignature (
        verifyCtx, (Pointer)&newVerifyInfo, saveCert,
        storageCtx, trustedCerts, untrustedCerts,
        derCoders, derCoderCount, vfyFailList, verifyResult);
      break;
    }

    *verifyResult = elementVerify;

  } while (0);

  if (digest != (unsigned char *)0)
    Z2Free (digest);
  if (x509ToVerify != (Asn1X509CertToVerify *)0)
    Asn1X509CertToVerify_free (x509ToVerify);
  VtDestroyAlgorithmObject (&verifier);
  VtDestroyAlgorithmObject (&digester);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, verifyCtx, status, 0, errorType,
    (char *)0, "DefaultVerifyCertSignature", fnctLine, (char *)0)

  return (status);
}

static int CheckBasicVerifyInfo (
   VoltLibCtx *libCtx,
   VoltCertObject *obj,
   Pointer info
   )
{
  int status;
  unsigned int keyUsage;
  VtBasicCertVerifyInfo *vInfo;
  unsigned char *temp;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* We must have verifyInfo.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    if (info == (Pointer)0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    vInfo = (VtBasicCertVerifyInfo *)info;
    status = VoltIsValidTime (libCtx, &(vInfo->usageTime));
    if (status != 0)
      break;

    /* Check to see if any stray keyUsage bits are set.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    keyUsage =
      VT_KEY_USAGE_DIGITAL_SIGNATURE | VT_KEY_USAGE_NON_REPUDIATION |
      VT_KEY_USAGE_KEY_ENCIPHERMENT | VT_KEY_USAGE_DATA_ENCIPHERMENT |
      VT_KEY_USAGE_KEY_AGREEMENT | VT_KEY_USAGE_KEY_CERT_SIGN |
      VT_KEY_USAGE_CRL_SIGN | VT_KEY_USAGE_ENCIPHER | VT_KEY_USAGE_DECIPHER;
    keyUsage = ~keyUsage;
    keyUsage &= vInfo->keyUsage;
    if (keyUsage != 0)
      break;

    /* If the object does not contain the ASN.1 structure yet, build
     * it. If it does contain the structure, we're done.
     */
    status = 0;
    if (obj->certAsn1 != (Asn1X509Cert *)0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    obj->certAsn1 = Asn1X509Cert_new ();
    if (obj->certAsn1 == (Asn1X509Cert *)0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_UNKNOWN_BER;
    temp = obj->certificate.data;
    d2i_Asn1X509Cert (&(obj->certAsn1), &temp, obj->certificate.len);
    if (obj->certAsn1 == (Asn1X509Cert *)0)
      break;

    status = 0;

  } while (0);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, libCtx, obj, status, 0, errorType,
    (char *)0, "CheckBasicVerifyInfo", fnctLine, (char *)0)

  return (status);
}

static int IsIssuerCert (
   VoltLibCtx *libCtx,
   VoltMpIntCtx *mpCtx,
   VtCertVerifyCtx verifyCtx,
   VtBasicCertVerifyInfo *verifyInfo,
   VtVerifyFailureList vfyFailList,
   VtCertInfo *certInfo,
   VtAlgorithmObject verifier,
   unsigned char *name,
   unsigned int nameLen,
   unsigned int digestAlg,
   unsigned char *digest,
   unsigned int digestLen,
   unsigned char *signature,
   unsigned int signatureLen,
   VtCertObject candidateCert,
   unsigned int *sigVerify,
   unsigned int *elementVerify
   )
{
  int status;
  unsigned int checkNameLen;
  VtKeyObject verifyKey = (VtKeyObject)0;
  unsigned char *checkName;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *sigVerify = 0;
  *elementVerify = 0;

  status = 0;
  do
  {
    /* Check the info, this will build the certAsn1 if it's not
     * already built.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = CheckBasicVerifyInfo (
      libCtx, candidateCert, (Pointer)verifyInfo);
    if (status != 0)
      break;

    /* Is this cert's subject name the same as the issuer name of the
     * leaf cert we're checking?
     */
    checkName = candidateCert->certAsn1->innerCert->subject->base.data;
    checkNameLen =
      (unsigned int)(candidateCert->certAsn1->innerCert->subject->base.length);

    if (checkNameLen != nameLen)
      break;
    if (Z2Memcmp (checkName, name, nameLen) != 0)
      break;

    /* We found a cert with a subject name matching the issuer name of
     * the leaf. Try to verify the signature.
     * Build a public key from this cert.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateKeyObject (
      (VtLibCtx)libCtx, VtKeyImplMpCtx, (Pointer)mpCtx, &verifyKey);
    if (status != 0)
      break;

    certInfo->cert = candidateCert->certificate.data;
    certInfo->certLen = candidateCert->certificate.len;
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSetKeyParam (
      verifyKey, VtKeyParamX509Cert, (Pointer)certInfo);
    if (status != 0)
      break;

    /* Try to verify the cert using this key.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtVerifySignature (
      verifier, verifyKey, (VtRandomObject)0, digestAlg,
      digest, digestLen, signature, signatureLen, sigVerify);
    if (status != 0)
      break;

    /* If it did not verify, forget it.
     */
    if (*sigVerify == 0)
      break;

    /* Verify the elements of this cert.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = DefaultVerifyCertElements (
      verifyCtx, (Pointer)verifyInfo, (VtCertObject)candidateCert,
      vfyFailList, elementVerify);

  } while (0);

  VtDestroyKeyObject (&verifyKey);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, libCtx, 0, status, 0, 0,
    (char *)0, "CheckBasicVerifyInfo", fnctLine, (char *)0)

  return (status);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
zzijzzij亚洲日本少妇熟睡| 热久久国产精品| 精品久久人人做人人爽| 欧美日韩视频专区在线播放| 色综合久久久久网| 色婷婷精品久久二区二区蜜臀av| 成人黄色软件下载| 91美女片黄在线观看91美女| 色94色欧美sute亚洲线路一久| 91最新地址在线播放| 日本韩国欧美一区二区三区| 欧美这里有精品| 欧美军同video69gay| 欧美一级午夜免费电影| 欧美成人午夜电影| 国产精品理论片在线观看| 国产精品欧美一级免费| 亚洲四区在线观看| 五月天丁香久久| 蜜桃av一区二区三区| 国产激情一区二区三区桃花岛亚洲| 国产精品99久久久久久宅男| www.久久久久久久久| 色偷偷88欧美精品久久久| 91福利国产成人精品照片| 51精品久久久久久久蜜臀| 久久免费的精品国产v∧| 欧美激情一区三区| 亚洲一级二级三级| 久久99久久99小草精品免视看| 国产精品1024| 欧美日韩一区在线| 久久婷婷国产综合精品青草| 日韩理论在线观看| 美女看a上一区| 97久久精品人人做人人爽| 欧美高清视频不卡网| 国产色综合久久| 亚洲h在线观看| 激情综合五月天| 国产成人精品www牛牛影视| 精品国产99国产精品| 亚洲综合激情网| 欧洲人成人精品| 亚洲国产日韩在线一区模特| 欧美男女性生活在线直播观看| 日本一区二区三区在线不卡| 亚洲一二三区不卡| 欧美一区2区视频在线观看| 精品欧美一区二区在线观看| 欧美国产欧美综合| 奇米影视一区二区三区小说| 成人国产免费视频| 久久综合色天天久久综合图片| 亚洲自拍都市欧美小说| 成人综合激情网| 日韩欧美在线不卡| 亚洲chinese男男1069| k8久久久一区二区三区| 日韩欧美激情四射| 国产成人午夜视频| 欧美日本高清视频在线观看| 国产精品久久久久久久午夜片| 欧美aaaaaa午夜精品| 欧美色倩网站大全免费| 国产精品久久久久aaaa樱花| 国产精品一级片在线观看| 88在线观看91蜜桃国自产| 亚洲精品中文字幕乱码三区| 成人福利在线看| 国产女人aaa级久久久级| 久久99国产精品麻豆| 91精品国产91热久久久做人人| 一区二区三区色| 在线视频你懂得一区| **性色生活片久久毛片| 99久久精品国产麻豆演员表| 国产精品视频yy9299一区| 国产suv精品一区二区883| 久久视频一区二区| 国产在线国偷精品产拍免费yy| 欧美成人性战久久| 九色|91porny| 久久精品视频一区二区| 国产精品一区二区视频| 国产午夜亚洲精品理论片色戒| 国产福利一区二区| 中文字幕中文在线不卡住| 成人精品免费看| 亚洲人精品一区| 91黄色激情网站| 五月婷婷色综合| 精品三级在线观看| 国产成人精品影视| 中文字幕乱码一区二区免费| 91美女福利视频| 亚洲成av人片在线| 欧美mv日韩mv亚洲| av中文字幕亚洲| 亚洲二区在线观看| 精品久久久久久无| 成人动漫在线一区| 亚洲电影欧美电影有声小说| 欧美一区二区网站| 国产不卡在线视频| 亚洲伊人色欲综合网| 日韩欧美自拍偷拍| 色综合久久88色综合天天免费| 日韩二区三区四区| 国产精品你懂的| 欧美精品日韩一本| 处破女av一区二区| 日韩专区中文字幕一区二区| 国产三级一区二区| 欧美日本在线一区| 成人性生交大片免费看在线播放| 亚洲一线二线三线久久久| 久久婷婷成人综合色| 7777精品伊人久久久大香线蕉 | 2023国产精品自拍| 色综合久久88色综合天天6| 免费欧美日韩国产三级电影| 国产精品夫妻自拍| 欧美一级高清片| 91成人免费在线视频| 国产精品系列在线播放| 日本女人一区二区三区| 亚洲欧洲日韩在线| 国产无一区二区| 日韩一区二区电影在线| 91麻豆精品在线观看| 国产乱人伦精品一区二区在线观看| 一区二区三区中文字幕在线观看| 精品国产乱码91久久久久久网站| 色就色 综合激情| 不卡一区中文字幕| 精品亚洲免费视频| 视频一区中文字幕国产| 玉足女爽爽91| **性色生活片久久毛片| 中文无字幕一区二区三区| 欧美大片在线观看一区| 欧美美女网站色| 在线免费观看日本一区| 97精品国产露脸对白| 成人av网站在线观看| 国产黄色91视频| 狠狠色综合日日| 麻豆一区二区三| 日韩高清欧美激情| 亚州成人在线电影| 五月天激情综合| 五月综合激情婷婷六月色窝| 亚洲国产精品久久人人爱| 亚洲精品ww久久久久久p站| 自拍偷拍国产精品| 中文字幕综合网| 亚洲精品乱码久久久久久黑人 | 美女视频黄 久久| 日本欧美一区二区三区| 亚洲免费在线播放| 亚洲最新视频在线观看| 亚洲精品国产一区二区精华液| 亚洲欧美电影一区二区| 亚洲一区二区免费视频| 亚洲成人av免费| 久久精品国产久精国产爱| 国产麻豆视频一区二区| 国产成人高清在线| aaa亚洲精品| 欧美午夜精品一区二区三区 | 国产一区二区三区av电影| 国产美女精品人人做人人爽| 成人精品一区二区三区中文字幕| 99久久伊人久久99| 色狠狠桃花综合| 日韩视频永久免费| 中文天堂在线一区| 亚洲成人av在线电影| 国内精品国产三级国产a久久| 成人久久18免费网站麻豆 | 免费高清在线视频一区·| 久久66热偷产精品| 99热国产精品| 91精品国产综合久久久蜜臀图片| 91精品国产综合久久精品 | 亚洲精品高清在线| 美日韩一区二区三区| jizzjizzjizz欧美| 欧美疯狂做受xxxx富婆| 欧美高清在线精品一区| 亚洲第一福利一区| 成人激情开心网| 日韩一区二区三区视频在线观看| 国产日韩高清在线| 日韩电影一区二区三区四区| 不卡的av网站| 日韩精品一区二区三区在线观看| 亚洲六月丁香色婷婷综合久久| 久久99热狠狠色一区二区|