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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? icdistrict.c

?? IBE是一種非對稱密碼技術(shù)
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* Copyright 2003-2006, Voltage Security, all rights reserved.
*/

#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "icdistrict.h"
#include "icparams.h"
#include "icutils.h"
#include "stringutil.h"
#include "certobj.h"
#include "errorctx.h"
#include "transport.h"

/* Function takes Asn1 certificate object and fills icDistrictParameter
 * last cert in the chain with a certificate
 */
static int VOLT_CALLING_CONV icDistrictParametersGetDomainCert VOLT_PROTO_LIST ((
   icDistrictParameters *params,
   Asn1X509Cert **getCert,
   VoltLibCtx *libCtx
));

/* Go to the address given and count how many new line characters are
 * there. This counts the number of bytes, not the number of new lines.
 * For example,
 *    0d 0a 0d 0a
 * is 4 chars.
 * <p>This function looks for 0a or 0d 0a.
 */
static unsigned int VOLT_CALLING_CONV CountNewLineChars VOLT_PROTO_LIST ((
   char *buffer
));

#define VOLT_P7_HEADER        "-----BEGIN PKCS7-----"
#define VOLT_P7_HEADER_LEN    21
#define VOLT_P7_FOOTER        "-----END PKCS7-----"
#define VOLT_P7_FOOTER_LEN    19
#define VOLT_CERT_HEADER      "-----BEGIN CERTIFICATE-----"
#define VOLT_CERT_HEADER_LEN  27
#define VOLT_CERT_FOOTER      "-----END CERTIFICATE-----"
#define VOLT_CERT_FOOTER_LEN  25

int icDistrictParametersNew (
   icDistrictParameters **distParams,
   char *paramsText,
   unsigned int paramsTextLen,
   VtMpIntCtx mpCtx,
   VoltLibCtx *libCtx)
{
  int status;
  unsigned int p7Len, certLen, newLineLen, certCount, index;
  unsigned int signDataLen, theDataLen, certDataLen, bufferSize, bytesRead;
  unsigned int derCoderCount, decoderCount;
  VtPkcs7Object p7SignReader = (VtPkcs7Object)0;
  VtCertObject *newList = (VtCertObject *)0;
  VtCertObject *certList = (VtCertObject *)0;
  icDistrictParameters *params = (icDistrictParameters *)0;
  unsigned char *signData = (unsigned char *)0;
  unsigned char *theData = (unsigned char *)0;
  unsigned char *certData = (unsigned char *)0;
  unsigned char *temp;
  char *foundAddress, *p7, *cert;
  char *p7Header = VOLT_P7_HEADER;
  char *p7Footer = VOLT_P7_FOOTER;
  char *certHeader = VOLT_CERT_HEADER;
  char *certFooter = VOLT_CERT_FOOTER;
  VtReadPkcs7Info p7Info;
  VtCertInfo certInfo;
  VtDerCoder *DerCoders[3] =
  {
    VtDerCoderSHA1,
    VtDerCoderDSAPublicKey,
    VtDerCoderDSAwSHA1
  };
  VtIdentitySchemaDecode *Decoders[1] =
  {
    VtIdentitySchemaDecode822Email
  };
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  derCoderCount = 3;
  decoderCount = 1;
  certCount = 0;

  certInfo.derCoders = DerCoders;
  certInfo.derCoderCount = derCoderCount;

  do
  {
    /* We're expecting the following.
     *    -----BEGIN PKCS7-----
     *      <params in base64>
     *    -----END PKCS7-----
     *    -----BEGIN CERTIFICATE-----
     *      <a cert in base64>
     *    -----END CERTIFICATE-----
     *    -----BEGIN CERTIFICATE-----
     *      <another cert in base64>
     *    -----END CERTIFICATE-----
     * Make sure they are there.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_DIST_PARAMS;
    if (paramsTextLen < VOLT_P7_HEADER_LEN)
      break;
    if (Z2Memcmp (paramsText, p7Header, VOLT_P7_HEADER_LEN) != 0)
      break;

    p7 = paramsText + VOLT_P7_HEADER_LEN;
    newLineLen = CountNewLineChars (p7);
    p7 += newLineLen;

    VOLT_SET_FNCT_LINE (fnctLine)
    foundAddress = Strstr (p7, p7Footer, libCtx);
    if (foundAddress == (char *)0)
      break;

    p7Len = foundAddress - p7;

    /* Point to what follows the P7 message, it should be a cert. We'll
     * get to it later.
     */
    cert = p7 + p7Len + VOLT_P7_FOOTER_LEN;
    newLineLen = CountNewLineChars (cert);
    cert += newLineLen;
    certLen = paramsTextLen - (cert - paramsText);

    /* Before we actually get to the certs, read the P7 message.
     * Base64 decode what we have, it should be the actual P7
     * SignedData.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = icBase64Decode (
      &signData, &signDataLen, (unsigned char *)p7, p7Len, libCtx);
    if (status != 0)
      break;

    /* Decode the P7 SignedData message.
     */
    p7Info.derCoders = DerCoders;
    p7Info.derCoderCount = derCoderCount;
    p7Info.decoders = Decoders;
    p7Info.decoderCount = decoderCount;
    p7Info.mpCtx = mpCtx;
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreatePkcs7Object (
      (VtLibCtx)libCtx, VtPkcs7ImplReadSignedData, (Pointer)&p7Info,
      &p7SignReader);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtPkcs7ReadInit (p7SignReader);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtPkcs7ReadFinal (
      p7SignReader, signData, signDataLen, &bytesRead,
      (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;
    theData = (unsigned char *)Z2Malloc (bufferSize, VOLT_MEMORY_SENSITIVE);
    if (theData == (unsigned char *)0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtPkcs7ReadFinal (
      p7SignReader, signData + bytesRead, signDataLen - bytesRead, &bytesRead,
      theData, bufferSize, &theDataLen);
    if (status != 0)
      break;

    /* We are expecting certs, keep reading data as long as we have
     * certs to read.
     */
    do
    {
      if (certLen < VOLT_CERT_HEADER_LEN)
        break;
      if (Z2Memcmp (cert, certHeader, VOLT_CERT_HEADER_LEN) != 0)
        break;

      cert += VOLT_CERT_HEADER_LEN;
      newLineLen = CountNewLineChars (cert);
      cert += newLineLen;

      foundAddress = Strstr (cert, certFooter, libCtx);
      if (foundAddress == (char *)0)
        break;

      certLen = foundAddress - cert;

      /* Expand the certList array.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_MEMORY;
      newList = (VtCertObject *)Z2Malloc (
        (certCount + 1) * sizeof (VtCertObject), 0);
      if (newList == (VtCertObject *)0)
        break;
      status = 0;

      /* Copy the old into the new.
       */
      for (index = 0; index < certCount; ++index)
        newList[index] = certList[index];

      newList[certCount] = (VtCertObject)0;

      /* Free the old.
       */
      if (certList != (VtCertObject *)0)
        Z2Free (certList);

      certList = newList;
      index = certCount;
      certCount++;
      newList = (VtCertObject *)0;

      /* Base64 decode the cert data.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = icBase64Decode (
        &certData, &certDataLen, cert, certLen, libCtx);
      if (status != 0)
        break;

      /* Build a cert object from this data.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateCertObject (
        (VtLibCtx)libCtx, VtCertImplMpCtx, (Pointer)mpCtx,
        &(certList[index]));
      if (status != 0)
        break;

      certInfo.cert = certData;
      certInfo.certLen = certDataLen;
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtSetCertParam (
        certList[index], VtCertParamX509Der, (Pointer)&certInfo);
      if (status != 0)
        break;

      /* Free this buffer because on the next loop we're going to use
       * this variable again.
       */
      Z2Free (certData);
      certData = (unsigned char *)0;

      /* Move the pointer to the next cert.
       */
      cert += (certLen + VOLT_CERT_FOOTER_LEN);
      newLineLen = CountNewLineChars (cert);
      cert += newLineLen;

      certLen = paramsTextLen - (cert - paramsText);

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

    /* Allocate space for new icDistricParameter shell.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    params = (icDistrictParameters *)Z2Malloc (
      sizeof (icDistrictParameters), 0);
    if (params == (icDistrictParameters *)0)
      break;
    Z2Memset (params, 0, sizeof (icDistrictParameters));

    /* Decode the public params.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    params->pubParams = icPublicParameters_new ();
    if (params->pubParams == (icPublicParameters *)0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_DIST_PARAMS;
    temp = theData;
    d2i_icPublicParameters (&(params->pubParams), &temp, theDataLen);
    if (params->pubParams == (icPublicParameters *)0)
      break;

    params->certList = certList;
    params->certCount = certCount;
    params->p7SignedData = p7SignReader;
    *distParams = params;

    status = 0;

  } while (0);

  if (newList != (VtCertObject *)0)
    Z2Free (newList);

  if (signData != (unsigned char *)0)
    Z2Free (signData);
  if (theData != (unsigned char *)0)
    Z2Free (theData);
  if (certData != (unsigned char *)0)
    Z2Free (certData);

  if (status == 0)
    return (0);

  /* If there was an error, free buffers we would have returned, but
   * didn't.
   */
  if (certCount != 0)
  {
    for (index = 0; index < certCount; ++index)
      VtDestroyCertObject (&(certList[index]));

    Z2Free (certList);
  }

  VtDestroyPkcs7Object (&p7SignReader);

  if (params != (icDistrictParameters *)0)
    Z2Free (params);

  VOLT_LOG_ERROR (
    (VtLibCtx)libCtx, status, errorType, fnctLine,
    "icDistrictParametersNew", (char *)0)

  return (status);
}

static unsigned int CountNewLineChars (
   char *buffer
   )
{
  unsigned int count;

  count = 0;

  if (buffer == (char *)0)
    return (count);

  while ( (buffer[count] == 0x0d) || (buffer[count] == 0x0a) )
    count++;

  return (count);
}

void icDistrictParametersFree (
   icDistrictParameters *params,

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品欧美日韩精品一 | 日韩色视频在线观看| 亚洲高清视频在线| 在线观看91视频| 午夜精品久久久久久| 欧美日本一区二区三区四区| 日韩精品亚洲专区| 日韩欧美亚洲国产另类| 国产精品白丝jk白祙喷水网站| 国产午夜亚洲精品理论片色戒 | 亚洲成人在线免费| 日韩小视频在线观看专区| 国产一区啦啦啦在线观看| 中文字幕第一页久久| 91免费在线播放| 视频在线观看一区| 国产亚洲va综合人人澡精品| av午夜精品一区二区三区| 亚洲综合激情另类小说区| 欧美一区二区啪啪| 国产成人免费视频网站高清观看视频 | 日韩va亚洲va欧美va久久| 日韩欧美一区在线| 不卡欧美aaaaa| 午夜精品久久久久久久久久| 久久久综合视频| 色老头久久综合| 91农村精品一区二区在线| 日韩电影在线一区二区| 国产丝袜在线精品| 欧美日本一区二区在线观看| 懂色av一区二区在线播放| 亚洲午夜在线观看视频在线| 久久久一区二区三区| 色综合中文字幕| 久久99久久精品欧美| 亚洲蜜臀av乱码久久精品| 欧美成人在线直播| 91行情网站电视在线观看高清版| 免播放器亚洲一区| 亚洲精品国产一区二区精华液| 日韩精品一区二区三区四区视频| 99精品视频在线播放观看| 免费日韩伦理电影| 亚洲成人激情av| 中文字幕在线观看一区| 精品少妇一区二区三区视频免付费 | 一区二区三区资源| 国产日本一区二区| 7777精品伊人久久久大香线蕉完整版| 国产999精品久久久久久| 麻豆一区二区三| 亚洲永久免费av| 亚洲国产激情av| 日韩欧美色电影| 欧美一区二区三区在线观看| 91福利国产精品| 99久久久国产精品| 精品一区二区三区香蕉蜜桃| 日本麻豆一区二区三区视频| 一区二区三区欧美激情| 综合在线观看色| 国产精品久久久久久久久晋中| 久久亚洲春色中文字幕久久久| 6080国产精品一区二区| 色天天综合久久久久综合片| 成人av电影在线网| 丁香天五香天堂综合| 激情综合网最新| 日韩精品一二三四| 日韩一级黄色片| 91亚洲精品久久久蜜桃网站| 韩国v欧美v日本v亚洲v| 久久99国产精品麻豆| 日韩av一区二区三区四区| 成人av在线看| zzijzzij亚洲日本少妇熟睡| 粉嫩13p一区二区三区| 国产在线视频精品一区| 国产精品 欧美精品| 国产精品亚洲综合一区在线观看| 国产一区日韩二区欧美三区| 国产一区二区三区高清播放| 久久99精品久久久久婷婷| 麻豆精品国产传媒mv男同 | 亚洲国产精品精华液ab| 国产日韩欧美综合一区| 国产精品久久久久久久久免费丝袜 | 精品国产伦一区二区三区观看方式| 成人综合在线网站| 成人综合日日夜夜| av中文一区二区三区| 91黄色免费版| 91精品国产综合久久久久久久 | 精品亚洲成a人| 国产另类ts人妖一区二区| 国产精品一二三四区| 99精品视频一区二区三区| 一本一道久久a久久精品综合蜜臀| 欧美三级一区二区| 欧美xxxxx裸体时装秀| 国产三级精品三级在线专区| 亚洲视频一区二区在线| 亚洲成a人在线观看| 免费看欧美女人艹b| 成人免费视频视频在线观看免费| 91久久线看在观草草青青| 欧美日韩精品一二三区| 2020日本不卡一区二区视频| 成人欧美一区二区三区白人| 午夜一区二区三区在线观看| 热久久国产精品| av动漫一区二区| 欧美一级理论片| 中文字幕一区二区三区蜜月| 午夜日韩在线电影| 国产精品白丝av| 日本道精品一区二区三区| 2020日本不卡一区二区视频| 亚洲欧洲制服丝袜| 久久国产精品99精品国产| 91首页免费视频| 337p日本欧洲亚洲大胆精品 | 欧美日本一区二区三区| 久久综合色8888| 亚洲国产一二三| 国产成人啪免费观看软件 | k8久久久一区二区三区| 91精品国产一区二区三区蜜臀| 久久久综合精品| 日本亚洲欧美天堂免费| 在线观看亚洲成人| 国产视频亚洲色图| 麻豆视频一区二区| 在线观看一区日韩| 国产精品欧美经典| 九九在线精品视频| 欧美色区777第一页| 国产精品毛片大码女人| 麻豆精品在线观看| 欧美一区二区在线不卡| 一区二区在线看| 成人av在线资源网| 欧美国产日韩精品免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 色哟哟一区二区三区| 欧美国产精品中文字幕| 国产一区视频网站| 精品剧情在线观看| 欧美96一区二区免费视频| 欧洲一区二区av| 亚洲精品网站在线观看| 成人午夜视频在线| 国产亚洲va综合人人澡精品 | 中文字幕乱码日本亚洲一区二区| 麻豆久久久久久| 日韩欧美一级二级三级 | 国产一区二区三区日韩| 91精品国产高清一区二区三区蜜臀| 亚洲视频在线一区二区| 97久久超碰国产精品电影| 国产精品久久久久精k8| 成人黄动漫网站免费app| 久久精品日产第一区二区三区高清版| 久久99久久久欧美国产| 日韩欧美二区三区| 韩国理伦片一区二区三区在线播放| 555www色欧美视频| 日本美女一区二区三区视频| 日韩一区二区三区电影在线观看| 日韩专区在线视频| 欧美一区二区三区婷婷月色| 日韩精品视频网| 日韩精品综合一本久道在线视频| 久久99精品一区二区三区三区| 欧美变态tickle挠乳网站| 黄页网站大全一区二区| 久久精品一区八戒影视| 粉嫩av一区二区三区粉嫩| 最近中文字幕一区二区三区| 欧美性一二三区| 色老综合老女人久久久| 亚洲图片欧美激情| 91黄色小视频| 日本大胆欧美人术艺术动态| 精品国精品自拍自在线| 国产一区二区网址| 欧美国产精品一区二区| 91久久久免费一区二区| 日本免费在线视频不卡一不卡二| 樱桃国产成人精品视频| 欧美亚洲愉拍一区二区| 天天影视涩香欲综合网| 日韩一区二区三区电影| 国内精品国产三级国产a久久| 国产精品视频一二三区 | 欧美专区亚洲专区| 看国产成人h片视频| 国产精品理论片在线观看| 欧美性做爰猛烈叫床潮|