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

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

?? sfread.c

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

int VoltSecureFileReadInit (
   VtSecureMailObject secureMailObj
   )
{
  int status;
  VoltSecureMailObject *obj = (VoltSecureMailObject *)secureMailObj;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* The state must be VOLT_SECURE_MAIL_STATE_READ_SET, if not,
     * we're not allowed to call ReadInit.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_CALL_ORDER;
    if (obj->state != VOLT_SECURE_MAIL_STATE_READ_SET)
      break;

    /* Init the subordinate objects.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtPkcs7ReadInit (obj->p7SignedData);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtPkcs7ReadInit (obj->p7EnvelopedData);
    if (status != 0)
      break;

    obj->state = VOLT_SECURE_FILE_STATE_READ_INIT;

  } while (0);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, secureMailObj, status, 0, errorType,
    (char *)0, "VoltSecureFileReadInit", fnctLine, (char *)0)

  return (status);
}

int VoltSecureFileReadUpdate (
   VtSecureMailObject secureMailObj,
   unsigned char *message,
   unsigned int messageLen,
   unsigned int *bytesRead,
   unsigned char *outputData,
   unsigned int bufferSize,
   unsigned int *outputDataLen
   )
{
  int status;
  unsigned int currentMessageLen, newLineLen, amountRead, outputLen;
  unsigned int completeFlag;
  VoltSecureMailObject *obj = (VoltSecureMailObject *)secureMailObj;
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VoltSecureMailReadCtx *readCtx = (VoltSecureMailReadCtx *)(obj->localCtx);
  unsigned char *currentMessage;
  unsigned char *beginMsg = VOLT_SECURE_FILE_BEGIN_MSG;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *bytesRead = 0;
  *outputDataLen = 0;
  currentMessage = message;
  currentMessageLen = messageLen;

  switch (obj->state)
  {
    default:
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_CALL_ORDER;
      break;

    case VOLT_SECURE_FILE_STATE_READ_ENV_FINAL:
    case VOLT_SECURE_FILE_STATE_READ_SIGN_FINAL:
    case VOLT_SECURE_FILE_STATE_READ_COMPLETE:
      /* If we're done, don't read anything.
       */
      status = 0;
      break;

    case VOLT_SECURE_FILE_STATE_READ_INIT:
      /* The first thing to do will be to read the header.
       */
      obj->state = VOLT_SECURE_FILE_STATE_READ_HEADER;

    case VOLT_SECURE_FILE_STATE_READ_HEADER:
      /* We're just starting to read the message. The first thing up
       * might be
       *   version: 1
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltSMGetNextBlock (
        obj, &(readCtx->unprocessedData), currentMessage, currentMessageLen,
        1, &amountRead, &completeFlag, &newLineLen);
      if (status != 0)
        break;

      *bytesRead += amountRead;
      if (completeFlag == 0)
        break;

      currentMessage = message + *bytesRead;
      currentMessageLen = messageLen - *bytesRead;
     
      /* We have the next block in the unprocessedData buffer, is this
       * the version block? If not, it's P7 message, read it. If it is,
       * skip it.
       */
      if (readCtx->unprocessedData.data[0] != 'v')
      {
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VtPkcs7ReadUpdate (
          obj->p7EnvelopedData, readCtx->unprocessedData.data,
          readCtx->unprocessedData.len, &amountRead,
          readCtx->unprocessedData.data, readCtx->unprocessedData.size,
          &outputLen);

        readCtx->unprocessedData.len -= amountRead;

        if (status != 0)
          break;

        goto VoltSecureMailReadEnvelope;
      }

      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_SECURE_FILE_MSG;
      if (readCtx->unprocessedData.len !=
        VOLT_SECURE_FILE_BEGIN_MSG_LEN + newLineLen)
        break;
      if (Z2Memcmp (
        readCtx->unprocessedData.data, beginMsg,
        VOLT_SECURE_FILE_BEGIN_MSG_LEN) != 0)
        break;

      /* Set up the context for the next block.
       */
      status = 0;
      readCtx->unprocessedData.len = 0;
      obj->state = VOLT_SECURE_FILE_STATE_READ_NEW_LINE;

      /* If there's no more message to read, return.
       */
      if (currentMessageLen == 0)
        break;

    case VOLT_SECURE_FILE_STATE_READ_NEW_LINE:
      /* We expect to see a new line here.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltSMGetNextBlock (
        obj, &(readCtx->unprocessedData), currentMessage, currentMessageLen,
        1, &amountRead, &completeFlag, &newLineLen);
      if (status != 0)
        break;

      *bytesRead += amountRead;
      if (completeFlag == 0)
        break;

      currentMessage = message + *bytesRead;
      currentMessageLen = messageLen - *bytesRead;

      /* Make sure we have a valid new line.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_SECURE_FILE_MSG;
      if (readCtx->unprocessedData.len != newLineLen)
        break;      

      /* Set up the context for the next block.
       */
      status = 0;
      readCtx->unprocessedData.len = 0;
      obj->state = VOLT_SECURE_FILE_STATE_READ_ENVELOPE;

      /* If there's no more message to read, return.
       */
      if (currentMessageLen == 0)
        break;

VoltSecureMailReadEnvelope:
    case VOLT_SECURE_FILE_STATE_READ_ENVELOPE:
      /* At this point we have data to pass to the P7 Envelope object.
       * Place any output into the unprocessedData buffer.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtPkcs7ReadUpdate (
        obj->p7EnvelopedData, currentMessage, currentMessageLen, &amountRead,
        readCtx->unprocessedData.data, readCtx->unprocessedData.size,
        &outputLen);
      currentMessage += amountRead;
      currentMessageLen -= amountRead;
      *bytesRead += amountRead;

      if (status == VT_ERROR_BUFFER_TOO_SMALL)
      {
        VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VT_ERROR_MEMORY;
        readCtx->unprocessedData.data = (unsigned char *)Z2Realloc (
          readCtx->unprocessedData.data, outputLen);
        if (readCtx->unprocessedData.data == (unsigned char *)0)
          break;
        readCtx->unprocessedData.size = outputLen;

        VOLT_SET_ERROR_TYPE (errorType, 0)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VtPkcs7ReadUpdate (
          obj->p7EnvelopedData, currentMessage, currentMessageLen, &amountRead,
          readCtx->unprocessedData.data, readCtx->unprocessedData.size,
          &outputLen);

        currentMessage += amountRead;
        currentMessageLen -= amountRead;
        *bytesRead += amountRead;
      }

      /* If there'a any error other than BUFFER, pass it on.
       */
      if (status != 0)
        break;

      /* There's no error, either there's no data in the
       * unprocessedData buffer (no data to pass on to SignedData) in
       * which case we're done, or the data we have we need to give to
       * the SignedData P7 object.
       */
      if (outputLen == 0)
        break;

      readCtx->unprocessedData.len = outputLen;
      obj->state = VOLT_SECURE_FILE_STATE_READ_SIGNED;

    case VOLT_SECURE_FILE_STATE_READ_SIGNED:
      /* At this point we have data to pass to the P7 SignedData object.
       * Place any output into the app-supplied buffer.
       * Return any error, including BUFFER_TOO_SMALL.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltSMDoSignedDataRead (
        obj, readCtx, 1, outputData, bufferSize, outputDataLen);
      if (status != 0)
        break;

      /* If we have no error, we read all the data., the next call will
       * need to be to ENVELOPE.
       */
      obj->state = VOLT_SECURE_FILE_STATE_READ_ENVELOPE;

      /* If there's no more message to read, return.
       */
      if (currentMessageLen == 0)
        break;

      goto VoltSecureMailReadEnvelope;
  }

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, secureMailObj, status, 0, errorType,
    (char *)0, "VoltSecureFileReadUpdate", fnctLine, (char *)0)

  return (status);
}

int VoltSecureFileReadFinal (
   VtSecureMailObject secureMailObj,
   unsigned char *message,
   unsigned int messageLen,
   unsigned int *bytesRead,
   unsigned char *outputData,
   unsigned int bufferSize,
   unsigned int *outputDataLen
   )
{
  int status;
  unsigned int amountRead, outputLen;
  VoltSecureMailObject *obj = (VoltSecureMailObject *)secureMailObj;
  VoltSecureMailReadCtx *readCtx = (VoltSecureMailReadCtx *)(obj->localCtx);
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *bytesRead = 0;
  *outputDataLen = 0;

  switch (obj->state)
  {
    default:
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_INVALID_CALL_ORDER;
      break;

    case VOLT_SECURE_FILE_STATE_READ_COMPLETE:
      status = 0;
      break;

    case VOLT_SECURE_FILE_STATE_READ_INIT:
    case VOLT_SECURE_FILE_STATE_READ_HEADER:
    case VOLT_SECURE_FILE_STATE_READ_NEW_LINE:
    case VOLT_SECURE_FILE_STATE_READ_ENVELOPE:
    case VOLT_SECURE_FILE_STATE_READ_SIGNED:
      /* Call Update on the last amount of data.
       */
      if ( ((message != (unsigned char *)0) && (messageLen != 0)) ||
           (readCtx->unprocessedData.len != 0) )
      {
        VOLT_SET_ERROR_TYPE (errorType, 0)
        VOLT_SET_FNCT_LINE (fnctLine)
        status = VoltSecureFileReadUpdate (
          secureMailObj, message, messageLen, bytesRead,
          outputData, bufferSize, outputDataLen);
        if (status != 0)
          break;
      }

      /* At this point, we should have had all the input data, so we
       * can call the P7 Final functions.
       */
      obj->state = VOLT_SECURE_FILE_STATE_READ_ENV_FINAL;

    case VOLT_SECURE_FILE_STATE_READ_ENV_FINAL:
      /* There should be no output. So if the error is
       * BUFFER_TOO_SMALL, convert it to INVALID_INPUT.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtPkcs7ReadFinal (
        obj->p7EnvelopedData, (unsigned char *)0, 0, &amountRead,
        (unsigned char *)0, 0, &outputLen);
      if (status == VT_ERROR_BUFFER_TOO_SMALL)
        status = VT_ERROR_INVALID_INPUT;

      if (status != 0)
        break;

      obj->state = VOLT_SECURE_FILE_STATE_READ_SIGN_FINAL;

    case VOLT_SECURE_FILE_STATE_READ_SIGN_FINAL:
      /* There should be no output. So if the error is
       * BUFFER_TOO_SMALL, convert it to INVALID_INPUT.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtPkcs7ReadFinal (
        obj->p7SignedData, (unsigned char *)0, 0, &amountRead,
        (unsigned char *)0, 0, &outputLen);
      if (status == VT_ERROR_BUFFER_TOO_SMALL)
        status = VT_ERROR_INVALID_INPUT;
      if (status != 0)
        break;

      obj->state = VOLT_SECURE_FILE_STATE_READ_COMPLETE;
  }

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, secureMailObj, status, 0, errorType,
    (char *)0, "VoltSecureFileReadFinal", fnctLine, (char *)0)

  return (status);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品国产福利| 亚洲美女在线国产| 欧美性极品少妇| 国产一区二区在线观看免费| 91麻豆精品久久久久蜜臀| 欧美日韩一本到| 精品中文字幕一区二区| 中文字幕日韩av资源站| 日韩午夜电影av| 91麻豆免费看| 成人免费看黄yyy456| 亚洲第一会所有码转帖| 欧美激情在线免费观看| 欧美一区二区三区白人| 色综合久久天天综合网| 久久精品999| 亚洲一区二区成人在线观看| 日韩视频免费直播| 色综合中文字幕国产| 亚洲男人天堂av| 欧美成人vr18sexvr| 国产精品自在在线| 日本成人在线电影网| 亚洲欧美国产77777| 国产欧美精品一区| 日韩一区二区三区av| 欧美亚洲一区三区| 一本到不卡免费一区二区| 国产精品自拍网站| 国产99久久久国产精品免费看| 麻豆精品视频在线观看视频| 首页国产欧美久久| 五月激情综合网| 美腿丝袜亚洲综合| 美女视频免费一区| 美女视频黄久久| 国产真实精品久久二三区| 久久不见久久见免费视频7 | 欧美精品久久久久久久多人混战| 日韩欧美精品在线| 亚洲精品一线二线三线无人区| 日韩一区二区三区高清免费看看 | 色婷婷国产精品综合在线观看| 国产盗摄视频一区二区三区| 欧美三级三级三级| 亚洲天堂免费看| 亚洲在线中文字幕| 日产国产高清一区二区三区| 韩国精品主播一区二区在线观看| 国产一区二区三区日韩| 国产精选一区二区三区| 国产成人aaa| 99久久久精品免费观看国产蜜| 成人h版在线观看| 欧美男生操女生| 国产精品美女一区二区三区 | 欧美日韩一卡二卡| 欧美videofree性高清杂交| 中文字幕在线一区二区三区| 丝袜美腿高跟呻吟高潮一区| 国产精品亚洲成人| 欧美一区二区三区四区高清| 国产精品理伦片| 亚洲成人av在线电影| 懂色av一区二区三区蜜臀 | 91精品麻豆日日躁夜夜躁| 国产欧美日韩激情| 麻豆91精品91久久久的内涵| 99re热视频这里只精品 | 日产国产高清一区二区三区| 91麻豆精东视频| 久久久久久久久久看片| 亚洲成av人片一区二区梦乃| 一本高清dvd不卡在线观看 | 日韩一区二区三区观看| 国产精品成人免费在线| 亚洲欧美电影院| 国产大片一区二区| 精品黑人一区二区三区久久| 亚洲午夜电影在线| 99re热这里只有精品视频| 91麻豆精品国产91久久久| 亚洲精品乱码久久久久| 99re热这里只有精品视频| 国产精品麻豆网站| 97久久精品人人做人人爽| 精品国产一区二区三区久久影院| 蜜桃传媒麻豆第一区在线观看| 91精品欧美福利在线观看| 亚洲大片一区二区三区| 欧美卡1卡2卡| 日本美女一区二区三区| 欧美精品一区二区三区一线天视频| 亚洲成人高清在线| 欧美一区二区视频观看视频| 久久99国产精品久久99| 精品国产凹凸成av人网站| 粉嫩绯色av一区二区在线观看| 中文字幕精品—区二区四季| 91麻豆国产福利精品| 爽好久久久欧美精品| 久久这里只有精品6| 91麻豆.com| 日韩在线观看一区二区| 久久精品一区八戒影视| 91亚洲精品久久久蜜桃网站| 日韩精品国产欧美| 国产精品乱码一区二区三区软件 | 欧美男人的天堂一二区| 极品少妇xxxx精品少妇偷拍| 亚洲欧美乱综合| 精品国产第一区二区三区观看体验| www.欧美.com| 国产精品中文字幕日韩精品| 亚洲国产精品久久久久婷婷884 | 欧美一区二区三区视频在线观看| 久久福利视频一区二区| 一个色综合av| 亚洲色图视频网| 久久精品一区八戒影视| 欧美丰满嫩嫩电影| 色视频欧美一区二区三区| 国内精品国产成人国产三级粉色| 亚洲成a人v欧美综合天堂下载| 中文字幕在线不卡一区二区三区 | 国产精品福利电影一区二区三区四区 | 国内精品国产三级国产a久久| 99精品视频一区| 亚洲永久精品国产| 亚洲欧美在线aaa| 国产精品色一区二区三区| 国产亲近乱来精品视频| 日韩一区二区免费在线电影| 欧美日本国产一区| 欧美日本韩国一区| 在线播放中文字幕一区| 欧美一区二区三区婷婷月色| 欧美精品久久一区二区三区| 粉嫩嫩av羞羞动漫久久久| 国产美女精品在线| www.综合网.com| 97久久超碰国产精品| 91麻豆文化传媒在线观看| 色呦呦国产精品| 91精品福利在线一区二区三区| 欧美男人的天堂一二区| 欧美日韩国产色站一区二区三区| 91精品国产色综合久久ai换脸 | 男人的天堂久久精品| 亚洲一区在线观看免费| 视频在线在亚洲| 国产丶欧美丶日本不卡视频| 国产精品一区二区视频| 97久久超碰国产精品| 欧美性猛交xxxx乱大交退制版 | 日本一区二区在线不卡| 亚洲精品久久久蜜桃| 国产一区二区在线免费观看| 岛国av在线一区| 欧美日韩国产一区二区三区地区| 26uuu精品一区二区三区四区在线| 亚洲日本乱码在线观看| 免费在线成人网| 成人中文字幕合集| 91精品国产综合久久精品麻豆| 久久久精品2019中文字幕之3| 亚洲国产精品自拍| 成人综合婷婷国产精品久久免费| 91国产成人在线| 中文字幕在线一区| 极品少妇xxxx精品少妇偷拍| 福利一区二区在线| 日韩免费看的电影| 亚洲第一狼人社区| 91激情在线视频| 中文字幕第一区第二区| 国产一区二区三区久久悠悠色av| 欧美性高清videossexo| 亚洲色图19p| av网站免费线看精品| 国产精品美女一区二区在线观看| 日韩精品午夜视频| 国产在线精品免费| 精品福利av导航| 国产精品一二三在| 精品国产电影一区二区| 精品在线你懂的| 国产色产综合产在线视频| 福利一区在线观看| 国产精品网站在线播放| 波多野结衣一区二区三区| 亚洲精品免费一二三区| 在线免费观看成人短视频| 亚洲韩国一区二区三区| 欧美日高清视频| 经典三级在线一区| 亚洲图片激情小说| 欧美一区二区三区在| 六月丁香婷婷色狠狠久久| 国产欧美日韩中文久久|