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

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

?? p7getkeys.c

?? IBE是一種非對稱密碼技術
?? C
字號:
/* Copyright 2003-2006, Voltage Security, all rights reserved.
 */
#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "p7obj.h"
#include "idobj.h"
#include "certobj.h"
#include "errorctx.h"

/* Make sure the private key and the public key in the cert match.
 * <p>This function will get the public key data out of the objects.
 * The private key must be a type that allows returning the public key
 * data. A hardware key, or a key that does not hold the public key
 * data, for example, might not allow this.
 */
static int VOLT_CALLING_CONV CheckDSASigningKeys VOLT_PROTO_LIST ((
   VtLibCtx libraryCtx,
   VtKeyObject priKey,
   VtCertObject cert
));

int VoltP7GetKeysAndCert (
   VoltSurrenderCtx *surrCtx,
   VtIdentityObject identity,
   VtRandomObject random,
   VtPolicyCtx policyCtx,
   VtStorageCtx storageCtx,
   VtTransportCtx transportCtx,
   VtCertObject *signingCert,
   VtKeyObject *ibePriKey,
   VtKeyObject *dsaPriKey
   )
{
  int status;
  unsigned int encodingLen;
  VoltIdentityObject *obj = (VoltIdentityObject *)identity;
  VtLibCtx libraryCtx = obj->voltObject.libraryCtx;
  VtMpIntCtx mpCtx = (VtMpIntCtx)0;
  VtMpIntCtx getMpCtx = (VtMpIntCtx)0;
  VtCertRequestObject certReq = (VtCertRequestObject)0;
  VtCertObject newCert = (VtCertObject)0;
  VtKeyObject newIbePri = (VtKeyObject)0;
  VtKeyObject newDsaPub = (VtKeyObject)0;
  VtKeyObject newDsaPri = (VtKeyObject)0;
  VtParameterObject dsaParams = (VtParameterObject)0;
  VtSurrenderCallback surrenderCtx;
  VtSurrenderCallback *surrenderToUse = (VtSurrenderCallback *)0;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Make sure the ID is encoded. If no output buffer is given, the
     * function will encode it internally only. We're expecting
     * BUFFER_TOO_SMALL error.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtEncodeIdentity (
      identity, VT_ENCODE_IBCS_2_V_DISTRICT | VT_ENCODE_FOR_SIGNING,
      policyCtx, storageCtx, transportCtx,
      (unsigned char *)0, 0, &encodingLen);
    if (status == 0)
      status = VT_ERROR_GENERAL;
    if (status != VT_ERROR_BUFFER_TOO_SMALL)
      break;

    /* We'll need an mpCtx.
     */
    getMpCtx = (VtMpIntCtx)(obj->mpCtx);
    if (getMpCtx == (VtMpIntCtx)0)
    {
      getMpCtx = (VtMpIntCtx)VoltGetLibCtxInfo (
        libraryCtx, VOLT_LIB_CTX_INFO_TYPE_MP_CTX);

      if (getMpCtx == (VtMpIntCtx)0)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VtCreateMpIntCtx (
          libraryCtx, VtMpIntImplOpenSSL, (Pointer)0, &mpCtx);
        if (status != 0)
          break;

        getMpCtx = mpCtx;
      }
    }

    /* If there's a surrender ctx, use it.
     */
    if (surrCtx != (VoltSurrenderCtx *)0)
    {
      /* Set the key object with the surrender ctx, but don't copy the
       * appData, just copy a reference, so we're still using the P7
       * object's appData.
       */
      surrenderCtx.Surrender = surrCtx->Surrender;
      surrenderCtx.appData = surrCtx->appData;
      surrenderCtx.AppDataCopy = (VtSurrenderAppDataCopy)0;
      surrenderCtx.AppDataFree = (VtSurrenderAppDataFree)0;
      surrenderToUse = &surrenderCtx;
    }

    /* Create "empty" objects into which we'll place the data from
     * storage (if the data is in storage).
     */
    if (ibePriKey != (VtKeyObject *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateKeyObject (
        libraryCtx, VtKeyImplMpCtx, (Pointer)getMpCtx, &newIbePri);
      if (status != 0)
        break;
    }

    if (dsaPriKey != (VtKeyObject *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateKeyObject (
        libraryCtx, VtKeyImplMpCtx, (Pointer)getMpCtx, &newDsaPri);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateCertObject (
        libraryCtx, VtCertImplMpCtx, (Pointer)getMpCtx, &newCert);
      if (status != 0)
        break;
    }

    /* Try to get the keys and cert from storage. Because we're passing
     * the STORAGE_ONLY flag, this function will look only in storage.
     * If the return is 0, we found the values, we're done. If the
     * return is ENTRY_NOT_FOUND, the values were not in storage, we'll
     * generate and download new values.
     * Any other return is an error we want to pass along.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtObtainPrivateKeysAndCert (
      identity, random, VT_OBTAIN_KEYS_FLAG_STORAGE_ONLY, policyCtx,
      storageCtx, (VtTransportCtx)0, newDsaPri, newCert, newIbePri);
    if (status == 0)
    {
      /* If we have a key pair, make sure they match.
       */
      if (newDsaPri != (VtKeyObject)0)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = CheckDSASigningKeys (libraryCtx, newDsaPri, newCert);
        if (status == VT_ERROR_UNMATCHED_KEY_PAIR)
          status = VT_ERROR_ENTRY_NOT_FOUND;
      }
    }
    if (status != VT_ERROR_ENTRY_NOT_FOUND)
      break;

    if (ibePriKey != (VtKeyObject *)0)
    {
      VtDestroyKeyObject (&newIbePri);

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateKeyObject (
        libraryCtx, VtKeyImplMpCtx, (Pointer)getMpCtx, &newIbePri);
      if (status != 0)
        break;
    }

    if (dsaPriKey != (VtKeyObject *)0)
    {
      VtDestroyKeyObject (&newDsaPri);
      VtDestroyCertObject (&newCert);

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateKeyObject (
        libraryCtx, VtKeyImplMpCtx, (Pointer)getMpCtx, &newDsaPri);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateCertObject (
        libraryCtx, VtCertImplMpCtx, (Pointer)getMpCtx, &newCert);
      if (status != 0)
        break;

      /* This function will build a DSA parameter object either from the
       * district's params or from a default set. We don't care which,
       * so we'll ignore the returned flag. Just use encodingLen for the
       * return flag.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltGetDsaParamsCreate (
        identity, (VtDistrictObject)0, getMpCtx, &encodingLen, &dsaParams);
      if (status != 0)
        break;

      /* If there's a surrender ctx, use it.
       */
      if (surrCtx != (VoltSurrenderCtx *)0)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VtSetKeyParam (
          newDsaPri, VtKeyParamSurrenderCallback, (Pointer)surrenderToUse);
        if (status != 0)
          break;
      }

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateKeyObject (
        libraryCtx, VtKeyImplMpCtx, (Pointer)getMpCtx, &newDsaPub);
      if (status != 0)
        break;

      /* Now that we have params, generate a key pair.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtGenerateKeyPair (
        VtKeyPairGenDSA, (Pointer)dsaParams, random, newDsaPub, newDsaPri);
      if (status != 0)
        break;

      /* We need a cert request to send to the key server.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateCertRequestObject (
        libraryCtx, VtCertRequestImplMpCtx, (Pointer)getMpCtx,
        &certReq);
      if (status != 0)
        break;

      /* If there's a surrender ctx, use it.
       */
      if (surrCtx != (VoltSurrenderCtx *)0)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VtSetCertRequestParam (
          certReq, VtCertRequestParamSurrenderCallback, (Pointer)surrenderToUse);
        if (status != 0)
          break;
      }

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtGenerateCertRequest (
        identity, newDsaPub, newDsaPri, VtCertRequestTypeP10DSA,
        (Pointer)random, certReq);
      if (status != 0)
        break;
    }

    /* Get the private key and signing cert.
     * This call will store the private IBE key and the cert, but not
     * the private DSA key.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtDownloadIBEPrivateKeyAndCert (
      identity, policyCtx, storageCtx, transportCtx,
      certReq, newCert, newIbePri);
    if (status != 0)
      break;

    if (storageCtx == (VtStorageCtx)0)
      break;

    if (dsaPriKey != (VtKeyObject *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtStoreEntry (
        libraryCtx, VT_ENTRY_TYPE_SIGNING_PRI_KEY,
        (Pointer)identity, (Pointer)newDsaPri, storageCtx);
      if (status != 0)
        break;
    }

    if (signingCert != (VtCertObject *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtStoreEntry (
        libraryCtx, VT_ENTRY_TYPE_CERTIFICATE, (Pointer)identity,
        (Pointer)newCert, storageCtx);
      if (status != 0)
        break;
    }

    if (ibePriKey != (VtKeyObject *)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtStoreEntry (
        libraryCtx, VT_ENTRY_TYPE_IBE_PRI_KEY, (Pointer)identity,
        (Pointer)newIbePri, storageCtx);
    }

  } while (0);

  VtDestroyParameterObject (&dsaParams);
  VtDestroyKeyObject (&newDsaPub);
  VtDestroyCertRequestObject (&certReq);
  VtDestroyMpIntCtx (&mpCtx);

  /* If status is 0, we've got our values, return them. Well, return
   * the values the caller wanted, destroy the others.
   */
  if (status == 0)
  {
    if (signingCert != (VtCertObject *)0)
      *signingCert = newCert;
    else
      VtDestroyCertObject (&newCert);

    if (ibePriKey != (VtKeyObject *)0)
      *ibePriKey = newIbePri;
    else
      VtDestroyKeyObject (&newIbePri);

    if (dsaPriKey != (VtKeyObject *)0)
      *dsaPriKey = newDsaPri;
    else
      VtDestroyKeyObject (&newDsaPri);

    return (0);
  }

  /* If there was an error, we need to destroy these objects.
   */
  VtDestroyKeyObject (&newIbePri);
  VtDestroyKeyObject (&newDsaPri);
  VtDestroyCertObject (&newCert);

  VOLT_LOG_ERROR_INFO (
    0, identity, status, 0, 0,
    (char *)0, "VoltP7GetKeysAndCert", fnctLine, (char *)0)

  return (status);
}

int VoltGetSignerInfoCount (
   VoltPkcs7Object *obj,
   unsigned int *signerInfoCount
   )
{
  int status;
  VoltPkcs7ReadSignCtx *readCtx;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  /* If the object is "Read Signed" and done, return the count from a
   * VoltPkcs7ReadSignCtx localCtx.
   */
  if (obj->state == VOLT_P7_STATE_SIGN_READ_FINAL)
  {
    readCtx = (VoltPkcs7ReadSignCtx *)(obj->localCtx);
    *signerInfoCount = readCtx->signerInfosCount;
    return (0);
  }

  /* The object is not "Read Signed" and done, maybe it's "Read Signed"
   * and just not done.
   */
  *signerInfoCount = 0;
  VOLT_SET_FNCT_LINE (fnctLine)
  status = VT_ERROR_INVALID_P7_OBJ;
  if (obj->contentType == VOLT_PKCS7_SIGNED_DATA_READ)
  {
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_CALL_ORDER;
  }

  VOLT_LOG_ERROR_INFO (
    0, obj, status, 0, VT_ERROR_TYPE_PRIMARY,
    (char *)0, "VoltGetSignerInfoCount", fnctLine, (char *)0)

  return (status);
}

static int CheckDSASigningKeys (
   VtLibCtx libraryCtx,
   VtKeyObject priKey,
   VtCertObject cert
   )
{
  int status;
  VtDSAPubKeyInfo *getInfoFromPri, *getInfoFromPub;
  VtKeyObject pubKey = (VtKeyObject)0;
  VoltCertObject *obj = (VoltCertObject *)cert;
  VoltMpIntCtx *mpCtx = obj->mpCtx;
  VoltLibCtx *libCtx = (VoltLibCtx *)libraryCtx;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Build a public key from the cert.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateKeyObject (
      libraryCtx, VtKeyImplMpCtx, (Pointer)mpCtx, &pubKey);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSetKeyParam (
      pubKey, VtKeyParamX509CertObject, (Pointer)cert);
    if (status != 0)
      break;

    /* Now get the public key data out of each key object.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetKeyParam (
      pubKey, VtKeyParamDSAPublic, (Pointer *)&getInfoFromPub);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetKeyParam (
      priKey, VtKeyParamDSAPublic, (Pointer *)&getInfoFromPri);
    if (status != 0)
      break;

    /* Compare the pubValY.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_UNMATCHED_KEY_PAIR;
    if (getInfoFromPri->pubValY.len != getInfoFromPub->pubValY.len)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    if (Z2Memcmp (
      getInfoFromPri->pubValY.data, getInfoFromPub->pubValY.data,
      getInfoFromPri->pubValY.len) != 0)
      break;

    /* If we reach this far, the public vlues are the same, we can
     * safely assume the keys are the same.
     */
    status = 0;

  } while (0);

  VtDestroyKeyObject (&pubKey);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, libraryCtx, 0, status, 0, errorType,
    (char *)0, "CheckDSASigningKeys", fnctLine, (char *)0)

  return (status);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区在线观看视频| 国产精品中文有码| 久久成人18免费观看| 成人aa视频在线观看| 日韩视频在线你懂得| 国产精品视频一二三| 免费在线看成人av| 一本大道久久a久久精品综合| 精品欧美久久久| 亚洲午夜久久久| 成人午夜免费av| 日韩免费观看高清完整版在线观看| 自拍偷拍亚洲欧美日韩| 久久国产精品色婷婷| 欧美日韩国产在线观看| 自拍偷拍亚洲综合| 北条麻妃国产九九精品视频| 欧美xxxxxxxx| 日韩精品免费专区| 欧美性受极品xxxx喷水| 一区在线播放视频| 不卡视频免费播放| 久久久久久97三级| 激情综合色播五月| 日韩免费视频一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 精品国产青草久久久久福利| 亚洲大片在线观看| 欧美日韩免费高清一区色橹橹 | 色菇凉天天综合网| 亚洲欧美一区二区视频| hitomi一区二区三区精品| 亚洲国产电影在线观看| 懂色av中文字幕一区二区三区| 久久婷婷成人综合色| 国产美女在线观看一区| 久久一二三国产| 国产精品1区2区3区在线观看| 欧美精品一区二区三区视频| 精品一区二区三区在线观看国产| 日韩一区二区在线免费观看| 六月丁香综合在线视频| 精品国产乱码久久久久久闺蜜| 精品亚洲成a人| 久久久精品国产免费观看同学| 韩国精品免费视频| 一区二区三区精品在线观看| 色香蕉久久蜜桃| 亚洲丰满少妇videoshd| 91麻豆精品久久久久蜜臀| 老司机免费视频一区二区| 精品国产凹凸成av人导航| 国产成人在线电影| 亚洲乱码国产乱码精品精小说 | 亚洲一区二区在线免费观看视频| 一本久久a久久精品亚洲| 亚洲成人自拍网| 精品欧美久久久| www.欧美亚洲| 亚洲大片在线观看| 亚洲精品在线观看视频| 丁香天五香天堂综合| 亚洲国产精品尤物yw在线观看| 欧美精品1区2区3区| 国产精品一级在线| 亚洲女人****多毛耸耸8| 91精品国产欧美日韩| 国产揄拍国内精品对白| 亚洲日本成人在线观看| 欧美一区二区三区播放老司机| 国产福利一区二区三区| 亚洲综合在线观看视频| 日韩欧美精品三级| 99视频国产精品| 奇米777欧美一区二区| 国产精品久久久久久久浪潮网站| 欧美日韩高清在线| bt7086福利一区国产| 男人的j进女人的j一区| 亚洲免费三区一区二区| 精品国产一区二区国模嫣然| 日本乱人伦aⅴ精品| 国产伦精一区二区三区| 午夜久久电影网| 亚洲人妖av一区二区| 精品久久久三级丝袜| 欧美裸体bbwbbwbbw| 成人在线视频首页| 韩国av一区二区三区四区 | 久久国产精品一区二区| 亚洲精品中文在线| 国产精品三级av| 日韩午夜电影av| 3d动漫精品啪啪| 欧美亚洲一区三区| 99精品视频一区二区三区| 国产精品正在播放| 激情五月婷婷综合| 久久精品免费观看| 美女高潮久久久| 日韩黄色小视频| 午夜电影一区二区三区| 亚洲欧美日韩一区二区 | 色综合咪咪久久| 国产91精品一区二区麻豆网站 | 欧美成人精精品一区二区频| 欧美丝袜自拍制服另类| 欧美综合在线视频| 91久久精品午夜一区二区| 成人av在线一区二区三区| 国产精品88888| 国产98色在线|日韩| 国产精品一区二区久久精品爱涩 | 欧美一区二区免费视频| 欧美日韩一本到| 欧美男同性恋视频网站| 91福利在线播放| 欧洲国产伦久久久久久久| 欧美综合在线视频| 91麻豆精品国产91久久久| 337p亚洲精品色噜噜狠狠| 884aa四虎影成人精品一区| 欧美三级日韩三级| 69成人精品免费视频| 欧美二区乱c少妇| 精品免费国产一区二区三区四区| 日韩精品一区二区三区视频播放 | 亚洲成人av中文| 蜜桃精品视频在线| 久草精品在线观看| 国产成人精品亚洲777人妖| 99久久99久久精品免费看蜜桃| 97精品电影院| 在线观看91av| 国产蜜臀97一区二区三区| 中文字幕日本乱码精品影院| 亚洲精品视频观看| 免费成人你懂的| 成人一区二区三区在线观看| 色综合天天综合网天天看片| 欧美色涩在线第一页| 精品少妇一区二区三区视频免付费 | 精品久久五月天| 中文字幕一区二区三区四区不卡 | 欧美日韩国产精品成人| 欧美α欧美αv大片| 国产精品视频九色porn| 一区二区三区成人| 久久精品国产一区二区三区免费看| 国产乱码字幕精品高清av| 在线免费观看日本欧美| 日韩欧美久久久| 亚洲伦理在线免费看| 精品一区二区精品| 欧洲av一区二区嗯嗯嗯啊| 久久综合九色综合欧美亚洲| 亚洲男人天堂av网| 精彩视频一区二区三区| 99在线视频精品| 2021久久国产精品不只是精品| 亚洲欧美aⅴ...| 国产精品99久久久久久久女警 | 日韩av中文字幕一区二区 | 国产精品99久久久久| 欧美主播一区二区三区| 日韩女同互慰一区二区| 亚洲综合久久久久| 成人精品视频一区二区三区| 69堂国产成人免费视频| 亚洲免费在线观看视频| 国产乱码精品一品二品| 欧美一级午夜免费电影| 一区二区三区影院| 成人av在线资源网| 久久免费看少妇高潮| 麻豆一区二区三区| 欧美日韩国产高清一区| 亚洲三级在线免费| 成人av中文字幕| 国产欧美日韩麻豆91| 老色鬼精品视频在线观看播放| 欧美性三三影院| 亚洲色图视频网| www.在线欧美| 亚洲国产精品精华液2区45| 久久99久久精品欧美| 欧美蜜桃一区二区三区| 亚洲国产美女搞黄色| 91久久精品一区二区二区| 中文字幕在线观看不卡| 懂色av中文字幕一区二区三区| 久久久久国产精品厨房| 激情久久五月天| 亚洲精品一区二区在线观看| 美国毛片一区二区三区| 日韩精品一区二区在线| 免费成人小视频| 精品黑人一区二区三区久久| 国产一区美女在线| 久久精品一区二区三区不卡|