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

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

?? dsakgtype.c

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

/* This routine does the work. It allocates and fills in the contexts.
 *
 * @param obj The algorithm object to set.
 * @param primeSizeBits The size of the primeP in bits.
 * @param paramInfo Contains the params from which the keys will be
 * generated.
 * @return an int, 0 if the function completed successfully or a
 * non-zero error code.
 */
static int VOLT_CALLING_CONV SetObjectDSAKeyGen VOLT_PROTO_LIST ((
   VoltKeyObject *obj,
   unsigned int primeSizeBits,
   VtDSAParamInfo *paramInfo
));

int VtKeyPairGenDSAAndParams (
   VtKeyObject object,
   Pointer info,
   unsigned int flag,
   VtRandomObject random
   )
{
  int status;
  unsigned int primeSizeBits;
  VoltKeyObject *obj = (VoltKeyObject *)object;
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VtDSAParamInfo paramInfo;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  Z2Memset (&paramInfo, 0, sizeof (paramInfo));

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

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

    /* The associated info should be a pointer to an unsigned int.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ASSOCIATED_INFO;
    if (info == (Pointer)0)
      break;

    primeSizeBits = *((unsigned int *)info);

    /* For now we support only 1024 bits.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    if (primeSizeBits != 1024)
      break;

    /* If using this KeyGenImpl, the key must already have an mpCtx
     * loaded.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if (obj->mpCtx == (VoltMpIntCtx *)0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = SetObjectDSAKeyGen (obj, primeSizeBits, &paramInfo);

  } while (0);

  /* If everything worked, return 0.
   */
  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 something went wrong, indicate that this object is not usable.
   */
  obj->keyType = 0;

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

  return (status);
}

int VtKeyPairGenDSA (
   VtKeyObject object,
   Pointer info,
   unsigned int flag,
   VtRandomObject random
   )
{
  int status;
  unsigned int msByte, primeSizeBits;
  VoltKeyObject *obj = (VoltKeyObject *)object;
  VtParameterObject pObj = (VtParameterObject)info;
  VtDSAParamInfo *paramInfo;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

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

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

    /* The associated info should be a parameter object.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ASSOCIATED_INFO;
    if (info == (Pointer)0)
      break;

    /* Get the params.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetParameterParam (
      pObj, VtParameterParamDSAParams, (Pointer *)&paramInfo);
    if (status != 0)
    {
      if (status == VT_ERROR_GET_INFO_UNAVAILABLE)
        status = VT_ERROR_INVALID_ASSOCIATED_INFO;
      break;
    }

    /* How big is the subprime?
     */
    primeSizeBits = 8;
    msByte = (unsigned int)(paramInfo->subprimeQ.data[0]) & 0xff;
    while ((msByte & 0x80) == 0)
    {
      msByte <<= 1;
      primeSizeBits--;
    }
    primeSizeBits += (paramInfo->subprimeQ.len - 1) * 8;
    if (primeSizeBits != 160)
      break;

    /* How big is the prime?
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ASSOCIATED_INFO;
    primeSizeBits = 8;
    msByte = (unsigned int)(paramInfo->primeP.data[0]) & 0xff;
    while ((msByte & 0x80) == 0)
    {
      msByte <<= 1;
      primeSizeBits--;
    }
    primeSizeBits += (paramInfo->primeP.len - 1) * 8;
    if (primeSizeBits != 1024)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = SetObjectDSAKeyGen (obj, primeSizeBits, paramInfo);

  } while (0);

  /* If everything worked, return 0.
   */
  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 something went wrong, indicate that this object is not usable.
   */
  obj->keyType = 0;

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

  return (status);
}

static int SetObjectDSAKeyGen (
   VoltKeyObject *obj,
   unsigned int primeSizeBits,
   VtDSAParamInfo *paramInfo
   )
{
  int status;
  unsigned int bufferSize, primePLen, subprimeQLen, baseGLen;
  unsigned char *buffer = (unsigned char *)0;
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VoltDsaKeyGenCtx *dsaGenCtx;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* If we have params, get the lengths from them. If not, use
     * defaults.
     */
    if (paramInfo->primeP.data != (unsigned char *)0)
    {
      primePLen = paramInfo->primeP.len;
      subprimeQLen = paramInfo->subprimeQ.len;
      baseGLen = paramInfo->baseG.len;
    }
    else
    {
      primePLen = (primeSizeBits + 7) / 8;
      subprimeQLen = 20;
      baseGLen = primePLen;
    }

    /* Allocate enough space for a DsaKeyGenCtx. The buffers after the
     * struct will be byte arrays, so no need to worry about alignment.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    bufferSize =
      sizeof (VoltDsaKeyGenCtx) + primePLen + subprimeQLen + baseGLen;
    buffer = (unsigned char *)Z2Malloc (bufferSize, VOLT_MEMORY_SENSITIVE);
    if (buffer == (unsigned char *)0)
      break;
    Z2Memset (buffer, 0, bufferSize);

    /* Locate the context.
     */
    dsaGenCtx = (VoltDsaKeyGenCtx *)buffer;

    /* Populate the context.
     */
    dsaGenCtx->mpCtx = (VtMpIntCtx)(obj->mpCtx);
    dsaGenCtx->primeSizeBits = primeSizeBits;
    dsaGenCtx->primeP.data = buffer + sizeof (VoltDsaKeyGenCtx);
    dsaGenCtx->subprimeQ.data = dsaGenCtx->primeP.data + primePLen;
    dsaGenCtx->baseG.data = dsaGenCtx->subprimeQ.data + subprimeQLen;

    /* Copy the params, if we have them.
     */
    if (paramInfo->primeP.data != (unsigned char *)0)
    {
      Z2Memcpy (dsaGenCtx->primeP.data, paramInfo->primeP.data, primePLen);
      dsaGenCtx->primeP.len = primePLen;
      Z2Memcpy (
        dsaGenCtx->subprimeQ.data, paramInfo->subprimeQ.data, subprimeQLen);
      dsaGenCtx->subprimeQ.len = subprimeQLen;
      Z2Memcpy (dsaGenCtx->baseG.data, paramInfo->baseG.data, baseGLen);
      dsaGenCtx->baseG.len = baseGLen;
    }

    obj->keyType = VOLT_KEY_ALG_DSA | VOLT_KEY_TYPE_GEN_PAIR;
    obj->GenerateKey = DSAGenerateKeyPair;
    obj->localGenerateCtx = (Pointer)dsaGenCtx;
    obj->LocalGenerateCtxDestroy = VoltSimpleCtxDestroy;

    status = 0;

  } while (0);

  /* If everything worked, return 0.
   */
  if (status == 0)
    return (0);

  /* If something went wrong, destroy anything we created and indicate
   * that this object is not usable.
   */
  if (buffer != (unsigned char *)0)
    Z2Free (buffer);

  obj->keyType = 0;

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

  return (status);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久户外露出 | 狠狠狠色丁香婷婷综合久久五月| 蜜桃av一区二区三区电影| 成人av中文字幕| 制服视频三区第一页精品| 国产精品第五页| 国产成人免费视频网站高清观看视频 | 亚洲a一区二区| 国产精品亚洲视频| 欧美一区二区视频免费观看| 亚洲天堂网中文字| 国产精品99久久久久久久女警 | 国产精品嫩草影院com| 美女mm1313爽爽久久久蜜臀| 色婷婷狠狠综合| 国产三级欧美三级| 久久 天天综合| 欧美在线小视频| 亚洲欧洲一区二区三区| 国产成人av一区二区三区在线 | 欧美日韩大陆在线| 一区二区激情小说| 色狠狠av一区二区三区| 中文字幕一区日韩精品欧美| 国产福利一区在线| 国产香蕉久久精品综合网| 一级女性全黄久久生活片免费| 99热国产精品| 国产精品免费免费| 成人精品鲁一区一区二区| 国产午夜精品美女毛片视频| 国产精品夜夜爽| 国产精品动漫网站| 日本韩国欧美国产| 一区二区三区色| 一本大道av一区二区在线播放 | 欧美日韩一区二区三区不卡| 亚洲免费av高清| 欧美日韩一区二区三区四区| 天堂蜜桃一区二区三区| 91精品免费在线| 狠狠狠色丁香婷婷综合激情| 国产午夜精品一区二区三区嫩草| 国产.欧美.日韩| 欧美激情艳妇裸体舞| 99久久久精品| 一区二区在线观看视频 | 99精品视频在线免费观看| 国产精品美女视频| 日本道在线观看一区二区| 亚洲国产综合在线| 精品国产电影一区二区| 国产99久久久久| 亚洲精品乱码久久久久久久久| 欧美三级视频在线观看| 美女一区二区视频| 中文av字幕一区| 在线观看av不卡| 精品一区二区三区在线视频| 欧美国产精品中文字幕| 色av成人天堂桃色av| 男人的天堂久久精品| 欧美精品一区二区三区高清aⅴ| 不卡影院免费观看| 日韩影视精彩在线| 中文字幕av免费专区久久| 欧美三区在线视频| 国内精品第一页| 亚洲精品大片www| 精品久久久久久久久久久院品网| 不卡的av在线| 美女视频黄久久| 亚洲人成人一区二区在线观看 | 美国十次了思思久久精品导航| 国产欧美一区二区精品仙草咪| 欧美性生活大片视频| 国产另类ts人妖一区二区| 亚洲综合在线电影| 国产视频911| 制服.丝袜.亚洲.另类.中文 | 欧美日韩精品电影| 成人精品免费看| 日韩av电影天堂| 亚洲精品国产品国语在线app| 欧美xxxx在线观看| 欧美色老头old∨ideo| 粉嫩蜜臀av国产精品网站| 日韩精品成人一区二区三区| 中文字幕在线一区免费| 精品国产乱码久久久久久久| 欧美三级日韩三级| 99精品偷自拍| 处破女av一区二区| 另类专区欧美蜜桃臀第一页| 亚洲美女淫视频| 国产精品短视频| 中文字幕乱码久久午夜不卡| 日韩片之四级片| 欧美区视频在线观看| 色婷婷久久久久swag精品| 国产成人精品免费视频网站| 激情久久五月天| 久久99这里只有精品| 日韩1区2区3区| 三级不卡在线观看| 肉色丝袜一区二区| 亚洲国产aⅴ成人精品无吗| 亚洲日穴在线视频| 国产精品国产三级国产普通话99| 国产蜜臀av在线一区二区三区| 日韩你懂的在线观看| 欧美一二三四在线| 日韩一级片网址| 日韩欧美在线网站| 欧美va在线播放| 亚洲精品一区二区三区99| 精品日韩一区二区| 久久久精品影视| 国产欧美久久久精品影院| 久久精品人人做人人综合| 久久人人97超碰com| 国产欧美日韩亚州综合| 国产精品午夜久久| 亚洲国产成人一区二区三区| 中文字幕一区二区三区在线播放| 中文字幕一区二区日韩精品绯色| 国产精品家庭影院| 一区二区三区在线高清| 亚洲福利视频导航| 久久国产人妖系列| 国产精品亚洲第一区在线暖暖韩国| 国内精品写真在线观看 | 九九九精品视频| 国产麻豆视频一区| 成人av电影在线| 欧美日韩一区二区三区不卡| 欧美一区二区三区在线观看视频| 精品国产成人系列| 国产精品麻豆久久久| 亚洲一区二区视频| 国产美女久久久久| 99国产一区二区三精品乱码| 欧美系列日韩一区| 日韩精品一区二区三区中文精品| 欧美激情综合在线| 亚洲va在线va天堂| 国产精品一区二区在线观看不卡| av成人动漫在线观看| 欧美日韩在线播放一区| 亚洲精品在线观看网站| 玉米视频成人免费看| 免费在线成人网| 91丨porny丨国产入口| 9191精品国产综合久久久久久| 久久影院视频免费| 亚洲女人的天堂| 九色综合狠狠综合久久| av一区二区三区在线| 日韩一区二区三区在线| 综合电影一区二区三区| 免费高清成人在线| 欧亚洲嫩模精品一区三区| 久久嫩草精品久久久久| 午夜伦欧美伦电影理论片| 国产成人小视频| 日韩一区二区免费高清| 综合久久久久综合| 国产一区二区91| 欧美久久高跟鞋激| 亚洲人成人一区二区在线观看| 激情综合亚洲精品| 欧美精品乱人伦久久久久久| 国产精品久久久久久福利一牛影视| 蜜桃视频在线观看一区二区| 色香蕉久久蜜桃| 欧美精彩视频一区二区三区| 美国三级日本三级久久99| 欧美视频自拍偷拍| 亚洲精品乱码久久久久久日本蜜臀| 从欧美一区二区三区| 国产日韩一级二级三级| 老司机一区二区| 69久久99精品久久久久婷婷 | 18成人在线视频| 国产风韵犹存在线视精品| 日韩一区二区免费在线观看| 一区二区久久久久| 在线视频国内自拍亚洲视频| 国产精品国产三级国产aⅴ入口| 国产精品一二二区| 国产欧美日本一区二区三区| 国产乱码字幕精品高清av| 精品少妇一区二区三区| 麻豆精品视频在线观看免费| 91.成人天堂一区| 日本亚洲欧美天堂免费| 69堂国产成人免费视频| 蜜芽一区二区三区| 日韩精品一区二区三区三区免费| 免费三级欧美电影|