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

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

?? icdistrict.c

?? IBE是一種非對稱密碼技術(shù)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 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
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜精品久久久久久超碰| 美女视频网站久久| 91麻豆成人久久精品二区三区| 精品国产一区二区精华| 自拍偷拍国产亚洲| 大胆亚洲人体视频| 日韩一二在线观看| 日本aⅴ亚洲精品中文乱码| 欧美在线免费视屏| 一区二区三区欧美久久| 99久久综合狠狠综合久久| 精品国产三级电影在线观看| 亚洲主播在线播放| av福利精品导航| 亚洲欧美偷拍另类a∨色屁股| 国产一区不卡在线| 国产精品福利影院| 不卡的电影网站| 亚洲天天做日日做天天谢日日欢| 国产在线观看一区二区| 日韩精品一区二区三区四区| 午夜影视日本亚洲欧洲精品| 欧美日韩激情一区二区| 亚洲chinese男男1069| 色94色欧美sute亚洲线路二| 亚洲桃色在线一区| 91在线观看地址| 亚洲制服丝袜一区| 欧美成人a∨高清免费观看| 久久福利资源站| 国产色产综合产在线视频| 豆国产96在线|亚洲| 亚洲一卡二卡三卡四卡五卡| 午夜精品福利一区二区三区蜜桃| 欧美视频一区在线| 麻豆国产91在线播放| 国产日韩精品一区二区三区| 色婷婷精品久久二区二区蜜臀av| 亚洲.国产.中文慕字在线| 精品国产一二三| 在线观看亚洲专区| 狠狠色伊人亚洲综合成人| 亚洲欧洲国产日本综合| 69久久99精品久久久久婷婷| 国产一区二区三区最好精华液| 中文字幕中文字幕中文字幕亚洲无线| 欧美亚洲综合久久| 国产91精品一区二区麻豆网站| 亚洲在线视频网站| 亚洲欧洲99久久| 精品国产乱码久久久久久闺蜜| 成人手机在线视频| 国产一区中文字幕| 亚洲成人av资源| 1000精品久久久久久久久| 精品国产一区a| 91精品国产aⅴ一区二区| 99久久久精品免费观看国产蜜| 麻豆精品一区二区三区| 亚洲激情第一区| 国产精品理论在线观看| 久久久久九九视频| 精品成人在线观看| 精品国产一区久久| 欧美一区二区三区婷婷月色| 欧美日韩一区二区在线视频| 成人精品一区二区三区四区 | 一本色道综合亚洲| 国产一区二区三区免费在线观看 | 91香蕉视频在线| 欧美丰满高潮xxxx喷水动漫| 911精品产国品一二三产区| 精品久久免费看| 亚洲免费在线电影| 蜜臀91精品一区二区三区| 国产ts人妖一区二区| 懂色av中文字幕一区二区三区| 日本在线不卡一区| 黄色资源网久久资源365| 国产一区二区精品久久91| 国产精品自拍网站| 91在线精品一区二区三区| 色伊人久久综合中文字幕| 在线一区二区视频| 日韩一区二区视频| 久久精品欧美一区二区三区不卡 | 欧美一区二区三区小说| 精品成人一区二区三区四区| 国产精品网站在线播放| 一区二区三区中文字幕在线观看| 三级一区在线视频先锋| 国产一区不卡视频| 欧美亚洲动漫另类| 久久夜色精品一区| 亚洲精选免费视频| 激情成人午夜视频| 色综合久久综合网| 日韩欧美国产一二三区| 亚洲欧洲一区二区三区| 久久精品72免费观看| 欧美中文一区二区三区| 欧美日韩小视频| 日韩一区二区免费视频| 欧美无砖专区一中文字| 色综合网色综合| 99久久777色| 欧美亚洲一区三区| 欧美一区二区三区在线观看| 日韩欧美美女一区二区三区| 国产精品成人午夜| 精品一区二区三区欧美| 欧美日韩在线播| 自拍偷自拍亚洲精品播放| 国产精华液一区二区三区| 91精品国产综合久久蜜臀| 亚洲精品免费看| av电影在线观看不卡| 国产拍揄自揄精品视频麻豆| 日韩黄色免费电影| 欧美揉bbbbb揉bbbbb| 亚洲视频一区在线| 99re66热这里只有精品3直播| 久久综合久久99| 久久99国产精品麻豆| 日韩精品一区在线观看| 婷婷丁香激情综合| 4438x亚洲最大成人网| 亚洲高清在线视频| 欧美视频一区二区三区在线观看| 亚洲靠逼com| 欧美在线一区二区| 三级在线观看一区二区| 欧美美女激情18p| 日本美女一区二区| 精品国产乱码久久久久久牛牛 | 国产精品一区一区三区| 美女精品一区二区| 在线不卡a资源高清| 激情五月播播久久久精品| 久久久久久综合| 成人激情黄色小说| 亚洲一区在线视频| 日韩午夜小视频| 粉嫩一区二区三区在线看| 亚洲天堂精品在线观看| 欧美亚洲国产一区二区三区va | 国产色一区二区| 9i在线看片成人免费| 亚洲一二三四久久| 欧美成人性福生活免费看| 成人久久18免费网站麻豆| 夜夜精品视频一区二区| 欧美一区二区在线免费观看| 国产一区中文字幕| 一区二区三区在线播| 久久久综合视频| 欧美探花视频资源| 高清久久久久久| 日本欧美一区二区在线观看| 欧美激情一区不卡| 欧美电影影音先锋| av中文字幕一区| 国内精品写真在线观看| 亚洲精选视频免费看| 国产日韩精品一区| 日韩视频免费观看高清完整版在线观看 | 欧美精品视频www在线观看| 国产激情视频一区二区在线观看 | 日韩精品一区在线| 欧美亚洲精品一区| 91农村精品一区二区在线| 久久99精品一区二区三区| 亚洲成a人v欧美综合天堂| 欧美精品自拍偷拍| 日本中文字幕一区二区视频| 中文字幕一区二区三区视频| 欧美日韩久久久久久| 久久久久久久久久看片| 国产偷国产偷精品高清尤物| 日本一区二区高清| 3d动漫精品啪啪1区2区免费| 日韩三区在线观看| 久久久久久久久久久电影| 国产精品情趣视频| 午夜精品久久久久| 黄色日韩三级电影| 99精品桃花视频在线观看| 欧美伊人久久大香线蕉综合69| 欧美精品xxxxbbbb| 国产三级精品三级| 亚洲一区二区不卡免费| 亚洲动漫第一页| 国产福利精品一区| 欧美亚洲另类激情小说| 精品国产污污免费网站入口| 国产精品麻豆一区二区| 午夜视频一区二区| 国产一区二区三区| 色天天综合久久久久综合片| 91成人网在线|