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

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

?? dsasigntype.c

?? IBE是一種非對(duì)稱密碼技術(shù)
?? C
字號(hào):
/* Copyright 2003-2006, Voltage Security, all rights reserved.
 */
#include "vibecrypto.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "algobj.h"
#include "sign.h"
#include "dsa.h"
#include "mpint.h"
#include "errorctx.h"

int VtAlgorithmImplDSASign (
   VtAlgorithmObject *object,
   Pointer info,
   unsigned int flag
   )
{
  int status;
#if VOLT_ALIGNMENT != 1
  unsigned int pad;
#endif
  unsigned int sigFormat, bufferSize, offset;
  VoltAlgorithmObject *obj = (VoltAlgorithmObject *)(*object);
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  unsigned char *buffer = (unsigned char *)0;
  VoltSignClassCtx *ctx;
  VoltDsaSignCtx *dsaCtx;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Check the flag, it should be VOLT_ALG_SET_TYPE_FLAG.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_TYPE;
    if (flag != VOLT_ALG_SET_TYPE_FLAG)
      break;

    /* Check the class of the object. It should be 0 (not yet set).
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_SET;
    if (obj->algClass != 0)
      break;

    /* The associated info should be a pointer to an unsigned int, one
     * of the allowed signature formats.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ASSOCIATED_INFO;
    if (info == (Pointer)0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    sigFormat = *((unsigned int *)info);
    if ( (sigFormat != VT_DSA_SIGNATURE_R_S) &&
         (sigFormat != VT_DSA_SIGNATURE_DER_ENCODED) )
      break;

    /* Allocate space for the VoltSignClassCtx and the local context.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    bufferSize = sizeof (VoltSignClassCtx) + sizeof (VoltDsaSignCtx);
#if VOLT_ALIGNMENT != 1
    /* If the alignment is 1, there's no need to pad. If not, compute
     * the pad length.
     */
    VOLT_COMPUTE_ALIGN_PAD (VOLT_ALIGNMENT, sizeof (VoltSignClassCtx), pad)
    bufferSize += pad;
#endif
    buffer = (unsigned char *)Z2Malloc (bufferSize, 0);
    if (buffer == (unsigned char *)0)
      break;
    Z2Memset (buffer, 0, bufferSize);

    ctx = (VoltSignClassCtx *)buffer;
    offset = sizeof (VoltSignClassCtx);
#if VOLT_ALIGNMENT != 1
    offset += pad;
#endif
    dsaCtx = (VoltDsaSignCtx *)(buffer + offset);
    dsaCtx->format = sigFormat;

    ctx->GetDigestObject = DSAGetDigestObject;
    ctx->CheckSignatureInput = DSACheckSignatureInput;
    ctx->SignData = DSASignData;
    ctx->algorithm |= VOLT_SIGNATURE_ALG_DSA;
    ctx->localSignCtx = (Pointer)dsaCtx;
    ctx->LocalSignCtxDestroy = DSASignCtxDestroy;

    obj->algClass = VOLT_CLASS_SIGNATURE;
    obj->classCtx = (Pointer)ctx;
    obj->ClassCtxDestroy = VoltSignCtxDestroy;

    status = 0;

  } while (0);

  /* If success, we're done.
   */
  if (status == 0)
  {
    /* Set the FIPS bit in the object type, this object is a FIPS
     * object.
     */
    obj->voltObject.objectType |= VOLT_OBJECT_TYPE_FIPS;
    return (0);
  }

  /* If there was an error, free up any memory this function allocated.
   */
  if (buffer != (unsigned char *)0)
    Z2Free (buffer);

  VOLT_LOG_ERROR (
    (VtLibCtx)libCtx, status, VT_ERROR_TYPE_PRIMARY, fnctLine,
    "VtAlgorithmImplDSASign", (char *)0)

  return (status);
}

int VtAlgorithmImplDSAVerify (
   VtAlgorithmObject *object,
   Pointer info,
   unsigned int flag
   )
{
  int status;
#if VOLT_ALIGNMENT != 1
  unsigned int pad;
#endif
  unsigned int sigFormat, bufferSize, offset;
  VoltAlgorithmObject *obj = (VoltAlgorithmObject *)(*object);
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  unsigned char *buffer = (unsigned char *)0;
  VoltSignClassCtx *ctx;
  VoltDsaSignCtx *dsaCtx;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Check the flag, it should be VOLT_ALG_SET_TYPE_FLAG.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_TYPE;
    if (flag != VOLT_ALG_SET_TYPE_FLAG)
      break;

    /* Check the class of the object. It should be 0 (not yet set).
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_SET;
    if (obj->algClass != 0)
      break;

    /* The associated info should be a pointer to an unsigned int, one
     * of the allowed signature formats.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ASSOCIATED_INFO;
    if (info == (Pointer)0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    sigFormat = *((unsigned int *)info);
    if ( (sigFormat != VT_DSA_SIGNATURE_R_S) &&
         (sigFormat != VT_DSA_SIGNATURE_DER_ENCODED) )
      break;

    /* Allocate space for the VoltSignClassCtx and the local context.
     * The local context is simply the sig format, which can be
     * represented in an unsigned int.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    bufferSize = sizeof (VoltSignClassCtx) + sizeof (VoltDsaSignCtx);
#if VOLT_ALIGNMENT != 1
    /* If the alignment is 1, there's no need to pad. If not, compute
     * the pad length.
     */
    VOLT_COMPUTE_ALIGN_PAD (VOLT_ALIGNMENT, sizeof (VoltSignClassCtx), pad)
    bufferSize += pad;
#endif
    buffer = (unsigned char *)Z2Malloc (bufferSize, 0);
    if (buffer == (unsigned char *)0)
      break;
    Z2Memset (buffer, 0, bufferSize);

    ctx = (VoltSignClassCtx *)buffer;
    offset = sizeof (VoltSignClassCtx);
#if VOLT_ALIGNMENT != 1
    offset += pad;
#endif
    dsaCtx = (VoltDsaSignCtx *)(buffer + offset);
    dsaCtx->format = sigFormat;

    ctx->GetDigestObject = DSAGetDigestObject;
    ctx->VerifyData = DSAVerifyData;
    ctx->algorithm |= VOLT_SIGNATURE_ALG_DSA;
    ctx->localSignCtx = (Pointer)dsaCtx;
    ctx->LocalSignCtxDestroy = DSASignCtxDestroy;

    obj->algClass = VOLT_CLASS_VERIFY;
    obj->classCtx = (Pointer)ctx;
    obj->ClassCtxDestroy = VoltSignCtxDestroy;

    status = 0;

  } while (0);

  /* If success, we're done.
   */
  if (status == 0)
  {
    /* Set the FIPS bit in the object type, this object is a FIPS
     * object.
     */
    obj->voltObject.objectType |= VOLT_OBJECT_TYPE_FIPS;
    return (0);
  }

  /* If there was an error, free up any memory this function allocated.
   */
  if (buffer != (unsigned char *)0)
    Z2Free (buffer);

  VOLT_LOG_ERROR (
    (VtLibCtx)libCtx, status, VT_ERROR_TYPE_PRIMARY, fnctLine,
    "VtAlgorithmImplDSAVerify", (char *)0)

  return (status);
}

int VtAlgorithmImplDSASignVerify (
   VtAlgorithmObject *object,
   Pointer info,
   unsigned int flag
   )
{
  int status;
  VoltAlgorithmObject *obj = (VoltAlgorithmObject *)(*object);
  VoltSignClassCtx *ctx;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  /* Set this up to sign, then add verify capabilities.
   */
  VOLT_SET_FNCT_LINE (fnctLine)
  status = VtAlgorithmImplDSASign (object, info, flag);
  if (status == 0)
  {
    ctx = (VoltSignClassCtx *)(obj->classCtx);
    ctx->VerifyData = DSAVerifyData;
    obj->algClass |= VOLT_CLASS_VERIFY;
  }

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, *object, status, 0, 0,
    (char *)0, "VtAlgorithmImplDSASignVerify", fnctLine, (char *)0)

  return (status);
}

int DSAGetDigestObject (
   VoltAlgorithmObject *obj,
   VtAlgorithmObject *digestObject
   )
{
  int status;
  VoltSignClassCtx *ctx = (VoltSignClassCtx *)(obj->classCtx);
  VtAlgorithmObject newObject = (VtAlgorithmObject)0;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* If we don't have an object built, build it.
     */
    if (ctx->digestObject == (VtAlgorithmObject)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateAlgorithmObject (
        obj->voltObject.libraryCtx, VtAlgorithmImplSHA1, (Pointer)0,
        &newObject);
      if (status != 0)
        break;

      ctx->digestObject = newObject;
    }

    *digestObject = ctx->digestObject;
    status = 0;

  } while (0);

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

  VtDestroyAlgorithmObject (&newObject);

  VOLT_LOG_ERROR (
    obj->voltObject.libraryCtx, status, 0, fnctLine,
    "DSAGetDigestObject", (char *)0)

  return (status);
}

void DSASignCtxDestroy (
   Pointer obj,
   Pointer ctx
   )
{
  VoltObject *voltObj;
  VoltLibCtx *libCtx;
  VoltDsaSignCtx *dsaCtx;

  /* Anything to destroy?
   */
  if ( (obj == (Pointer)0) || (ctx == (Pointer)0) )
    return;

  voltObj = (VoltObject *)obj;
  dsaCtx = (VoltDsaSignCtx *)ctx;
  libCtx = (VoltLibCtx *)(voltObj->libraryCtx);

  VtDestroyKeyObject (&(dsaCtx->tempKey));

  /* Don't free the memory, it's part of the full signCtx.
   */
}

void VoltSignCtxDestroy (
   Pointer obj,
   Pointer ctx
   )
{
  VoltObject *voltObj;
  VoltLibCtx *libCtx;
  VoltSignClassCtx *signCtx;

  /* Anything to destroy?
   */
  if ( (obj == (Pointer)0) || (ctx == (Pointer)0) )
    return;

  voltObj = (VoltObject *)obj;
  signCtx = (VoltSignClassCtx *)ctx;
  libCtx = (VoltLibCtx *)(voltObj->libraryCtx);

  VtDestroyAlgorithmObject (&(signCtx->digestObject));

  if (signCtx->LocalSignCtxDestroy != (VCtxDestroy)0)
    signCtx->LocalSignCtxDestroy (obj, signCtx->localSignCtx);
  if (signCtx->PadCtxDestroy != (VCtxDestroy)0)
    signCtx->PadCtxDestroy (obj, signCtx->padCtx);

  Z2Free (ctx);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品婷婷国产综合久久| 日韩精品专区在线影院重磅| 91久久精品日日躁夜夜躁欧美| 色婷婷av一区二区三区之一色屋| 色综合欧美在线| 欧美情侣在线播放| 久久久久久影视| 综合在线观看色| 婷婷综合另类小说色区| 久久99久久久欧美国产| 国产91精品露脸国语对白| www.久久久久久久久| 欧美日韩电影在线| 亚洲精品一区二区三区香蕉| 一区二区三区免费看视频| 免费在线观看日韩欧美| 国产精品一区二区三区乱码| 色婷婷久久久久swag精品| 日韩亚洲电影在线| 亚洲女爱视频在线| 国产在线视频精品一区| 一本久久精品一区二区| 久久丝袜美腿综合| 亚洲一区二区在线免费观看视频| 国产一区二区三区精品欧美日韩一区二区三区| 成人高清视频在线| 亚洲精品一区二区三区四区高清| 亚洲综合免费观看高清完整版| 国产精品99久久久| 欧美成人a视频| 日韩不卡一二三区| 色婷婷激情一区二区三区| 国产日韩欧美高清| 国内成+人亚洲+欧美+综合在线 | 99视频热这里只有精品免费| 精品国产乱码久久久久久1区2区 | 福利一区在线观看| 精品少妇一区二区三区在线视频| 亚洲成人福利片| 欧美性做爰猛烈叫床潮| 亚洲精品中文在线| 一本到不卡免费一区二区| 亚洲欧美日韩一区二区 | 亚洲欧美视频在线观看视频| 成人91在线观看| 亚洲免费资源在线播放| 色爱区综合激月婷婷| 一区二区三区精品久久久| 91在线视频播放| 亚洲一区中文日韩| 日韩一级片网址| 精一区二区三区| 国产精品美女久久久久久2018| 成人精品国产一区二区4080| 国产精品成人免费精品自在线观看 | 一区二区三区加勒比av| 欧美日韩一区二区在线观看视频| 丝袜美腿亚洲综合| 欧美精品一区二区不卡| 成人精品视频一区二区三区尤物| 国产精品国产a| 欧美日韩一级二级三级| 精品一区二区在线播放| 国产精品美女久久久久久久网站| 91麻豆swag| 蜜桃久久久久久| 中文字幕精品一区二区精品绿巨人| 色综合久久久久网| 精品一区二区三区免费观看| 亚洲欧洲一区二区在线播放| 在线观看亚洲一区| 国产一区二区女| 亚洲午夜激情av| 中文字幕免费观看一区| 日韩欧美激情在线| 91久久国产综合久久| 极品瑜伽女神91| 亚洲自拍另类综合| 国产精品国产三级国产普通话蜜臀 | 日韩主播视频在线| 国产精品成人在线观看| 国产精品国产自产拍在线| 日韩一区二区精品葵司在线| 91论坛在线播放| 9i看片成人免费高清| 国产高清成人在线| 精品一区二区三区在线播放| 偷窥少妇高潮呻吟av久久免费| 亚洲男人天堂一区| 国产精品毛片高清在线完整版| 337p粉嫩大胆色噜噜噜噜亚洲| 911精品国产一区二区在线| 一本久久a久久精品亚洲 | 91精品国产免费久久综合| 色中色一区二区| 91免费小视频| 91丨porny丨国产| 91蜜桃网址入口| 91麻豆国产在线观看| 91色在线porny| 色噜噜狠狠成人网p站| 91天堂素人约啪| 欧美色大人视频| 国产福利91精品一区二区三区| 久久99精品国产麻豆婷婷洗澡| 久久99国产精品久久| 国产精选一区二区三区| 99国产精品久久久久久久久久久| 91在线观看成人| 欧美日韩国产三级| 欧美精品一区视频| 亚洲丝袜制服诱惑| 日日嗨av一区二区三区四区| 国产精品88888| 欧美日本免费一区二区三区| 精品福利二区三区| 亚洲黄色免费电影| 日韩成人伦理电影在线观看| 丰满放荡岳乱妇91ww| 色一情一伦一子一伦一区| 91精品国产全国免费观看| 国产日韩欧美在线一区| 亚洲va韩国va欧美va精品| 国产麻豆欧美日韩一区| 欧美日韩一级片网站| 亚洲国产精品国自产拍av| 日韩黄色一级片| 99九九99九九九视频精品| 日韩丝袜美女视频| 一卡二卡欧美日韩| 国产91精品精华液一区二区三区 | 欧美日韩精品电影| 国产精品久久久一本精品| 精品一区二区三区免费| 欧美午夜不卡视频| 亚洲人成人一区二区在线观看 | 色先锋资源久久综合| 久久久久99精品一区| 美女被吸乳得到大胸91| 国产一区二区福利| 精品日产卡一卡二卡麻豆| 亚洲福利一二三区| 色老汉一区二区三区| 亚洲欧美日韩久久精品| 99国产精品国产精品久久| 亚洲国产高清不卡| 国产精品一区二区x88av| 日韩一卡二卡三卡| 免费在线观看视频一区| 日韩视频免费观看高清完整版| 天天综合网天天综合色| 91精品国产色综合久久久蜜香臀| 亚洲成人av中文| 欧美一级高清片| 激情深爱一区二区| 久久免费国产精品| 成人黄色在线视频| 亚洲人成人一区二区在线观看| 在线观看不卡视频| 午夜伊人狠狠久久| 欧美一区二区日韩一区二区| 狂野欧美性猛交blacked| 国产欧美精品一区二区三区四区 | 777久久久精品| 久久av中文字幕片| 中文字幕中文在线不卡住| 色系网站成人免费| 天堂久久久久va久久久久| 精品国产乱码久久久久久老虎| 大美女一区二区三区| 亚洲影视资源网| 久久精品人人做| 在线观看91av| 成人永久看片免费视频天堂| 一区二区三区高清不卡| 精品久久国产老人久久综合| 成人免费毛片片v| 免费观看在线综合| 自拍偷拍国产亚洲| 精品国产亚洲在线| 色综合久久久网| 成人夜色视频网站在线观看| 日日夜夜精品视频天天综合网| 日韩精品国产欧美| 蜜臀av一区二区在线观看| 亚洲成人精品影院| 91女人视频在线观看| 成人午夜免费视频| av电影天堂一区二区在线| 99热这里都是精品| 91小视频免费看| 91麻豆免费看片| 欧美亚洲一区二区三区四区| 在线精品视频免费观看| 欧美丝袜丝交足nylons图片| 欧美日韩久久一区| 日韩一区和二区| 日韩欧美电影一区| 久久人人爽人人爽| 国产精品视频免费|