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

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

?? ibeprider.c

?? IBE是一種非對稱密碼技術
?? C
字號:
/* Copyright 2003-2006, Voltage Security, all rights reserved.
 */
#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "keyobj.h"
#include "distobj.h"
#include "oidlist.h"
#include "algid.h"
#include "ibe.h"
#include "ibekeyber.h"
#include "prikeyder.h"
#include "errorctx.h"

/* Create and set a param object from the encoding. If the params are
 * encoded in the algorithm ID, use them. If not, get the district name
 * from the identity and obtain the params using the storage provider,
 * policy ctx and transport ctx.
 * <p>The identity is in the public key portion of the private key.
 * That is an optional ASN.1 field. If params are not in the algID and
 * the identity is missing, this function will not be able to build the
 * parameter object.
 * <p>This function will create the parameter object. It is the
 * responsibiity of the caller to destroy it.
 *
 * @param libCtx The library context to use.
 * @param mpCtx
 * @param algIdParams The params that were part of the algID in the
 * encoding. If the algID contained the IBE params, this is the BER of
 * the params.
 * @param algIdParamsLen The length, in bytes, of the algIdParams.
 * @param encodedId The identity associated with the key.
 * @param encodedIdLen The length, in bytes, of the encodedId.
 * @param setBerInfo The struct containing the caller-supplied info
 * that includes the stoage provider, transport ctx and so on.
 * @param paramObj The address where this function will deposit the
 * created object.
 * @return an int, 0 if the function completed successfully or a
 * non-zero error code.
 */
static int VOLT_CALLING_CONV ParamObjectFromEncodingCreate VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VtMpIntCtx mpCtx,
   unsigned char *algIdParams,
   unsigned int algIdParamsLen,
   unsigned char *encodedId,
   unsigned int encodedIdLen,
   VtSetKeyBerInfo *setBerInfo,
   VtParameterObject *paramObj
));

int VtDerCoderBFType1IBEPrivateKey (
   VtDerCoderInfo *coderInfo,
   Pointer object,
   unsigned int flag
   )
{
  int status;
  unsigned int bufferSize, encodedIdLen, ibeParamsDerLen;
  VoltLibCtx *libCtx;
  VoltKeyObject *obj = (VoltKeyObject *)object;
  VtParameterObject paramObj = (VtParameterObject)0;
  VoltDerCoderEncodeData *encodeData = &(coderInfo->info.encodeData);
  VoltDerCoderGetAlgData *getAlgData = &(coderInfo->info.getAlgData);
  VoltDerCoderDecodeData *decodeData = &(coderInfo->info.decodeData);
  VoltIBEPriKeyData *keyData;
  Asn1PrivateKeyInfo *priKeyInfo;
  Asn1IBEPrivateKey *ibeKey = (Asn1IBEPrivateKey *)0;
  VtSetKeyBerInfo *setBerInfo;
  VtBFType1IBEPoint *ibePoint = (VtBFType1IBEPoint *)0;
  VtBFType1IBEPriKeyInfo ibeKeyInfo;
  unsigned char *encodedId;
  unsigned char ibePriKeyOid[VoltIBET1PriKeyOidBytesLen] = 
    { VoltIBET1PriKeyOidBytes };
  unsigned char *ibeParamsDer = (unsigned char *)0;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  switch (flag)
  {
    default:
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_TYPE;
      break;

    case VOLT_DER_TYPE_ENCODE_FLAG:
      /* If the flag is ENCODE, return the IBE Private Key inside a
       * PKCS #8 PrivateKeyInfo.
       */

      /* Check the args.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_NON_NULL_ARG;
      if (object != (Pointer)0)
        break;

      /* We need a place to drop the length.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_NULL_ARG;
      if (encodeData->encodingLen == (unsigned int *)0)
        break;

      /* The IBE key info should be a key object.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_NULL_ARG;
      if (encodeData->info == (Pointer)0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_PRI_KEY_OBJ;
      obj = (VoltKeyObject *)(encodeData->info);
      if (VOLT_OBJECT_TYPE_NOT_EQUAL (obj, VOLT_OBJECT_TYPE_KEY))
        break;      
      if ((obj->keyType & VOLT_KEY_TYPE_MASK_ASYM_ALG) !=
          VOLT_KEY_ALG_IBE_TYPE_1)
        break;
      if ((obj->keyType & VOLT_KEY_TYPE_PRIVATE) == 0)
        break;

      libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);

      /* We need the key data.
       */
      keyData = (VoltIBEPriKeyData *)(obj->keyData);
      if ((obj->keyType & VOLT_KEY_TYPE_MASK_DATA) != VOLT_KEY_TYPE_DATA)
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        if (obj->GetKeyData == (VGetKeyData)0)
          break;

        VOLT_SET_ERROR_TYPE (errorType, 0)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = obj->GetKeyData ((VtKeyObject)obj, (Pointer *)&keyData);
        if (status != 0)
          break;
      }

      /* Encode the IBE parameters for the P8's algId params.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtDerEncodeParams (
        (VtLibCtx)libCtx, VtDerCoderBFType1IBEParams,
        (Pointer)(keyData->bfKeyInfo.ibeParams), (unsigned char *)0, 0,
        &bufferSize);
      if (status == 0)
        status = VT_ERROR_GENERAL;
      if (status != VT_ERROR_BUFFER_TOO_SMALL)
        break;

      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_MEMORY;
      ibeParamsDer = (unsigned char *)Z2Malloc (bufferSize, 0);
      if (ibeParamsDer == (unsigned char *)0)
        break;

      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtDerEncodeParams (
        (VtLibCtx)libCtx, VtDerCoderBFType1IBEParams,
        (Pointer)(keyData->bfKeyInfo.ibeParams), ibeParamsDer, bufferSize,
        &ibeParamsDerLen);
      if (status != 0)
        break;

      bufferSize = encodeData->bufferSize;
      if (encodeData->encoding == (unsigned char *)0)
        bufferSize = 0;

      /* Create the encoding of the actual key data.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltEncodeIBEPrivateKeyData (obj, keyData);
      if (status != 0)
        break;

      /* Now build PrivateKeyInfo.
       */
      libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltEncodePrivateKeyInfoDer (
        libCtx, ibePriKeyOid, VoltIBET1PriKeyOidBytesLen,
        ibeParamsDer, ibeParamsDerLen, obj->keyDer.data, obj->keyDer.len,
        encodeData->encoding, bufferSize, encodeData->encodingLen);

      break;

    case VOLT_DER_TYPE_DECODE_FLAG:
      /* If the flag is decode, set the key object with the private key
       * info.
       */

      /* Check the args, the type should be VOLT_DER_TYPE_PRI_KEY_FLAG.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_UNKNOWN_BER;
      if (decodeData->type != VOLT_DER_TYPE_PRI_KEY_FLAG)
        break;

      /* Make sure this is the algId for IBE private key.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      priKeyInfo = (Asn1PrivateKeyInfo *)(decodeData->asn1Object);
      if (priKeyInfo->algId->oid->base.length != VoltIBET1PriKeyOidBytesLen)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
      if (Z2Memcmp (
        priKeyInfo->algId->oid->base.data, ibePriKeyOid,
        VoltIBET1PriKeyOidBytesLen) != 0)
        break;

      /* Decode the key data.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltDecodeIBEPriKeyDataCreate (
        libCtx, priKeyInfo->encodedKey->data,
        priKeyInfo->encodedKey->length, &ibeKey);
      if (status != 0)
        break;

      setBerInfo = (VtSetKeyBerInfo *)(decodeData->info);
      encodedId = (unsigned char *)0;
      encodedIdLen = 0;
      /* If the pri key has an encoded id, use it.
       */
      if (ibeKey->pubKey != (Asn1Encoded *)0)
      {
        // Add code to differentiate between v1 and v2 (v2 is EXPLICIT)
        encodedId = ibeKey->pubKey->base.data;
        encodedIdLen = ibeKey->pubKey->base.length;
      }

      /* To set a key object we'll need a param object.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = ParamObjectFromEncodingCreate (
        libCtx, (VtMpIntCtx)(obj->mpCtx),
        priKeyInfo->algId->params->base.data,
        priKeyInfo->algId->params->base.length,
        encodedId, encodedIdLen, setBerInfo, &paramObj);
      if (status != 0)
        break;

      /* We'll also need the private point. The encoding is an OCTET
       * STRING, call this routine to get it as a pair of coordinates.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltIBEPriPointFromEncodingAlloc (
        libCtx, (VoltParameterObject *)paramObj, ibeKey->privateData,
        &ibePoint);
      if (status != 0)
        break;

      ibeKeyInfo.ibeParams = paramObj;
      // Add code to differentiate between v1 and v2 (v2 is EXPLICIT)
      ibeKeyInfo.encodedId.data = ibeKey->pubKey->base.data;
      ibeKeyInfo.encodedId.len = ibeKey->pubKey->base.length;
      ibeKeyInfo.privatePoint.isInfinity = 0;
      ibeKeyInfo.privatePoint.xCoord.data = ibePoint->xCoord.data;
      ibeKeyInfo.privatePoint.xCoord.len = ibePoint->xCoord.len;
      ibeKeyInfo.privatePoint.yCoord.data = ibePoint->yCoord.data;
      ibeKeyInfo.privatePoint.yCoord.len = ibePoint->yCoord.len;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtSetKeyParam (
        (VtKeyObject)obj, VtKeyParamBFType1IBEPrivate,
        (Pointer)&ibeKeyInfo);

      break;

    case VOLT_DER_TYPE_GET_ALG_FLAG:
      /* If the flag is get alg, check the input to see if it's the
       * IBE encryption OID.
       */

      /* Check the args.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_NON_NULL_ARG;
      if (object != (Pointer)0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_NULL_ARG;
      if ( (getAlgData->algorithm == (unsigned int *)0) ||
           (getAlgData->oid == (unsigned char *)0) )
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_UNKNOWN_BER;
      if (getAlgData->oidLen != VoltIBET1PriKeyOidBytesLen)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      libCtx = getAlgData->libCtx;
      if (Z2Memcmp (
        getAlgData->oid, ibePriKeyOid, VoltIBET1PriKeyOidBytesLen) != 0)
        break;

      /* The OID matches, the algorithm is IBE private key.
       */
      *(getAlgData->algorithm) = VT_KEY_BER_BF_TYPE1_IBE_PRI;

      status = 0;
  }

  if (ibeParamsDer != (unsigned char *)0)
    Z2Free (ibeParamsDer);
  if (ibePoint != (VtBFType1IBEPoint *)0)
    Z2Free (ibePoint);
  if (ibeKey != (Asn1IBEPrivateKey *)0)
    Asn1IBEPrivateKey_free (ibeKey);
  if (paramObj != (VtParameterObject)0)
    VtDestroyParameterObject (&paramObj);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, object, status, 0, errorType,
    (char *)0, "VtDerCoderBFType1IBEPrivateKey", fnctLine, (char *)0)

  return (status);
}

static int ParamObjectFromEncodingCreate (
   VoltLibCtx *libCtx,
   VtMpIntCtx mpCtx,
   unsigned char *algIdParams,
   unsigned int algIdParamsLen,
   unsigned char *encodedId,
   unsigned int encodedIdLen,
   VtSetKeyBerInfo *setBerInfo,
   VtParameterObject *paramObj
   )
{
  int status, dRet;
  VtParameterObject newObj = (VtParameterObject)0;
  VoltDistrictObject *dObj = (VoltDistrictObject *)0;
  VtSetParamBerInfo berInfo;
  VtDerCoder *derCoders[1] = { VtDerCoderBFType1IBEParams };
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* If we have the params encoded in the algIdParams, use them.
     */
    if ( (algIdParams != (unsigned char *)0) && (algIdParamsLen > 2) )
    {
      /* Create the object and set it using BER.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateParameterObject (
        (VtLibCtx)libCtx, VtParameterImplMpCtx, (Pointer)mpCtx, &newObj);
      if (status != 0)
        break;

      berInfo.derCoders = derCoders;
      berInfo.derCoderCount = 1;
      berInfo.berEncoding = algIdParams;
      berInfo.maxEncodingLen = algIdParamsLen;
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtSetParameterParam (
        newObj, VtParameterParamBer, (Pointer)&berInfo);

      /* If successful, we're done.
       */
      if (status == 0)
      {
        *paramObj = newObj;
        break;
      }
      VtDestroyParameterObject (&newObj);
    }

    /* If we can't build using algID params, obtain them using the
     * encoded ID.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_UNKNOWN_BER;
    if ( (encodedId == (unsigned char *)0) || (encodedIdLen == 0) )
      break;

    /* Get the district name out of the identity.
     * First, how much space do we need. We're expecting
     * BUFFER_TOO_SMALL, anything else give up.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    dRet = VoltDistrictObjectFromId (
      (VtLibCtx)libCtx, mpCtx, encodedId, encodedIdLen,
      (VtDistrictObject *)&dObj);
    if (dRet != 0)
      break;

    /* We can now obtain the parameters.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtObtainIBEParams (
      (VtDistrictObject)dObj, setBerInfo->policyCtx,
      setBerInfo->storageCtx, setBerInfo->transportCtx);
    if (status != 0)
      break;

    /* If that worked, the district object possesses a param object.
     * Clone it.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCloneObject (
      (Pointer)(dObj->paramObj), (Pointer *)&newObj);
    if (status != 0)
      break;

    *paramObj = newObj;

  } while (0);

  if (dObj != (VoltDistrictObject *)0)
    VtDestroyDistrictObject ((VtDistrictObject *)&dObj);

  /* If success, we're done.
   */
  if (status == 0)
    return (0);

  /* If error, destroy what we created.
   */
  VtDestroyParameterObject (&newObj);

  VOLT_LOG_ERROR_INFO (
    libCtx, 0, status, 0, errorType,
    (char *)0, "ParamObjectFromEncodingCreate", fnctLine, (char *)0)

  return (status);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美美女一区二区三区| 国产99久久久国产精品| 欧美色电影在线| 亚洲精选视频免费看| 成人app软件下载大全免费| 国产精品伦理在线| 色综合视频在线观看| 一区二区三区四区乱视频| 欧美日本精品一区二区三区| 午夜精品在线视频一区| 欧美变态tickling挠脚心| 狠狠狠色丁香婷婷综合激情| 久久九九久精品国产免费直播| 成人美女视频在线看| 亚洲美女视频在线观看| 欧美日韩国产片| 成人的网站免费观看| 夜色激情一区二区| 日韩美女一区二区三区四区| 国产精品996| 亚洲精品视频观看| 日韩一区二区精品| 成人av资源在线| 亚洲国产成人tv| 久久精品亚洲国产奇米99| 91天堂素人约啪| 国产ts人妖一区二区| 日本亚洲天堂网| 久久久91精品国产一区二区三区| 99久久精品国产麻豆演员表| 亚洲妇女屁股眼交7| 久久综合中文字幕| 91一区二区在线观看| 日韩电影在线免费观看| 国产日韩欧美不卡在线| 欧美嫩在线观看| 国产成人精品三级| 婷婷亚洲久悠悠色悠在线播放| 久久夜色精品国产噜噜av| 91久久国产最好的精华液| 国产自产v一区二区三区c| 亚洲影视资源网| 久久精品亚洲乱码伦伦中文 | 丝瓜av网站精品一区二区| 精品奇米国产一区二区三区| 91亚洲精华国产精华精华液| 久久精品99久久久| 一区二区三区欧美视频| 国产亚洲自拍一区| 成人免费在线观看入口| 欧美精品一区二区三区四区| 91高清视频免费看| 99久久综合国产精品| 国产在线精品一区二区夜色| 亚洲一级二级在线| 日韩一区在线看| 久久精品人人爽人人爽| 91精品一区二区三区久久久久久| 91久久奴性调教| 风间由美一区二区av101| 免费人成黄页网站在线一区二区| 一区二区三区在线播放| 1区2区3区欧美| 国产精品无人区| 欧美精品一区视频| 91麻豆精品国产91久久久资源速度| 色琪琪一区二区三区亚洲区| 不卡一区中文字幕| jlzzjlzz欧美大全| 成人爽a毛片一区二区免费| 国产又黄又大久久| 精品一区二区精品| 久久99国产精品免费| 奇米精品一区二区三区在线观看| 午夜精品国产更新| 日韩中文字幕麻豆| 午夜精品久久久久久久| 天堂va蜜桃一区二区三区| 午夜日韩在线观看| 石原莉奈在线亚洲三区| 日韩二区三区四区| 蜜臀av一区二区在线观看| 日本欧美大码aⅴ在线播放| 视频一区国产视频| 久久精品久久99精品久久| 国内精品视频666| 国产伦精品一区二区三区免费迷| 韩国女主播一区| 国产成人免费高清| 91在线观看免费视频| 色偷偷久久一区二区三区| 欧美性感一类影片在线播放| 欧美日本免费一区二区三区| 91精品中文字幕一区二区三区| 欧美一卡二卡三卡四卡| 欧美大黄免费观看| 国产亚洲综合av| **性色生活片久久毛片| 一区二区三区在线影院| 亚洲成人av电影| 精品亚洲成av人在线观看| 国产福利一区在线观看| 97精品国产露脸对白| 欧美美女黄视频| 久久久国产一区二区三区四区小说| 国产偷v国产偷v亚洲高清| 国产精品电影院| 视频在线观看91| 国产福利一区在线| 欧洲精品中文字幕| 精品久久久久久亚洲综合网| 国产精品婷婷午夜在线观看| 亚洲日本免费电影| 日本大胆欧美人术艺术动态| 狠狠色综合日日| 91麻豆福利精品推荐| 91精品一区二区三区在线观看| 日本一区二区三区国色天香| 亚洲成人av资源| 成人午夜免费电影| 91精品国产91综合久久蜜臀| 欧美激情一区二区三区| 午夜视频一区二区| 99综合影院在线| 日韩欧美一二三区| 亚洲综合男人的天堂| 国产麻豆成人传媒免费观看| 欧美三级电影网站| 国产精品日日摸夜夜摸av| 日本亚洲视频在线| 色网站国产精品| 欧美极品aⅴ影院| 蜜臀av一级做a爰片久久| 色综合久久久久久久| 国产丝袜美腿一区二区三区| 亚洲成人www| 91麻豆高清视频| 久久精品日韩一区二区三区| 日本中文一区二区三区| 91美女片黄在线观看| 久久综合网色—综合色88| 午夜伦欧美伦电影理论片| av欧美精品.com| 久久精品夜色噜噜亚洲a∨| 老司机免费视频一区二区三区| 色诱亚洲精品久久久久久| 欧美激情在线看| 国产精品1024| 日韩精品中文字幕在线一区| 婷婷中文字幕一区三区| 欧美天天综合网| 亚洲欧美日韩国产中文在线| 国产成人免费xxxxxxxx| 亚洲精品一区二区三区在线观看| 亚洲r级在线视频| 色8久久精品久久久久久蜜| 亚洲欧洲性图库| 成人手机在线视频| 国产精品少妇自拍| 成人网男人的天堂| 日本一区二区三区高清不卡| 国产福利一区二区三区在线视频| 久久综合色播五月| 麻豆免费精品视频| 日韩欧美亚洲国产另类| 蜜臀av一区二区在线免费观看| 91精品一区二区三区久久久久久 | 欧美日韩一区二区三区在线| 亚洲精品v日韩精品| 日本韩国一区二区三区视频| ...中文天堂在线一区| 色婷婷精品大在线视频| 亚洲视频中文字幕| 色噜噜狠狠成人中文综合| 亚洲美女免费在线| 在线亚洲一区二区| 亚洲成人免费在线| 91精品国产综合久久久久久| 日韩精品视频网站| 2023国产一二三区日本精品2022| 国产美女视频一区| 国产精品嫩草影院com| 99视频精品全部免费在线| 国产精品久久久久婷婷二区次| 91污片在线观看| 亚洲一区二区美女| 日韩一区和二区| 国产麻豆精品视频| 日韩久久一区二区| 欧美在线免费播放| 卡一卡二国产精品 | 国产精品成人在线观看| 99re这里都是精品| 亚洲成人资源网| 久久亚洲一级片| 91视频在线观看| 日韩国产欧美在线播放| 亚洲精品在线电影| 色8久久人人97超碰香蕉987| 另类人妖一区二区av|