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

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

?? dsakgimpl.c

?? IBE是一種非對稱密碼技術
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 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 "prime.h"
#include "fipsmodule.h"
#include "surrender.h"
#include "errorctx.h"

/* Set the given public key object with the info given. Use the params
 * in the dsaGenCtx and the public value supplied.
 * <p>This function does no arg checking, it is the responsibility of
 * the caller not to make mistakes.
 *
 * @param libCtx The library context to use.
 * @param dsaGenCtx The Key Gen context, contains the params.
 * @param pubVal The public value.
 * @param pubValLen The length, in bytes, of the public value.
 * @param pubKey The created but empty object to set.
 * @return an int, 0 if the function completed successfully or a
 * non-zero error code.
 */
static int VOLT_CALLING_CONV SetPubKeyObject VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VoltDsaKeyGenCtx *dsaGenCtx,
   unsigned char *pubVal,
   unsigned int pubValLen,
   VtKeyObject pubKey
));

/* Set the given private key object with the info given. Use the params
 * in the dsaGenCtx along with the public and private values supplied.
 * <p>This function does no arg checking, it is the responsibility of
 * the caller not to make mistakes.
 *
 * @param libCtx The library context to use.
 * @param dsaGenCtx The Key Gen context, contains the params.
 * @param priVal The private value.
 * @param priValLen The length, in bytes, of the private value.
 * @param pubVal The public value.
 * @param pubValLen The length, in bytes, of the public value.
 * @param priKey The created but empty object to set.
 * @return an int, 0 if the function completed successfully or a
 * non-zero error code.
 */
static int VOLT_CALLING_CONV SetPriKeyObject VOLT_PROTO_LIST ((
   VoltLibCtx *libCtx,
   VoltDsaKeyGenCtx *dsaGenCtx,
   unsigned char *priVal,
   unsigned int priValLen,
   unsigned char *pubVal,
   unsigned int pubValLen,
   VtKeyObject priKey
));

int DSAGenerateKeyPair (
   VtKeyObject priKey,
   VtKeyObject pubKey,
   VtRandomObject random
   )
{
  int status;
  unsigned int pubValLen;
  VoltKeyObject *priObj = (VoltKeyObject *)priKey;
  VoltKeyObject *pubObj = (VoltKeyObject *)pubKey;
  VoltLibCtx *libCtx = (VoltLibCtx *)(priObj->voltObject.libraryCtx);
  VtRandomObject rand = (VtRandomObject)0;
  VtRandomObject randomToUse;
  VoltDsaKeyGenCtx *dsaGenCtx = (VoltDsaKeyGenCtx *)(priObj->localGenerateCtx);
  VtParameterObject paramGen = (VtParameterObject)0;
  VtDSAParamInfo *getParams;
  VtFips186PrngInfo randInfo;
  VoltSurrenderCtx *surrCtx = (VoltSurrenderCtx *)0;
  unsigned char *pubVal = (unsigned char *)0;
  unsigned char xkey[VOLT_DSA_XKEY_LEN];
  unsigned char xseed[VOLT_DSA_XSEED_LEN];
  unsigned char priValBuf[VOLT_DSA_PRI_VAL_LEN];
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* If there's no random object, get one from the libCtx.
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_NO_RANDOM_OBJECT;
    randomToUse = random;
    if (random == (VtRandomObject)0)
    {
      randomToUse = (VtRandomObject)VoltGetLibCtxInfo (
        (VtLibCtx)libCtx, VOLT_LIB_CTX_INFO_TYPE_RANDOM);

      if (randomToUse == (VtRandomObject)0)
        break;
    }

    /* Make sure the random object is valid.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_RANDOM_OBJ;
    if (VOLT_OBJECT_TYPE_NOT_EQUAL (randomToUse, VOLT_OBJECT_TYPE_RANDOM))
      break;

    /* If there's a surrender ctx, call the Surrender function.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_GET_OBJECT_SURR_CTX (surrCtx, priObj);
    /* If the surrenderCallback was not in the private key, is it in
     * the public key?
     */
    if (surrCtx == (VoltSurrenderCtx *)0)
    {
      VOLT_GET_OBJECT_SURR_CTX (surrCtx, pubObj);
    }
    VOLT_CALL_SURRENDER (surrCtx, VT_SURRENDER_FNCT_DSA_KEY_GEN, 0, 1)

    /* If we don't have params yet, generate them.
     */
    if (dsaGenCtx->primeP.data[0] == 0)
    {
      /* Create the DSA param object.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtCreateParameterObject (
        priObj->voltObject.libraryCtx, VtParameterImplMpCtx,
        (Pointer)(pubKey->mpCtx), &paramGen);
      if (status != 0)
        break;

      /* Set the parameter object with the surrender ctx.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltSetObjectSurrenderCtx ((VoltObject *)paramGen, surrCtx);
      if (status != 0)
        break;

      /* Generate. Use pubValLen as a temp variable.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      pubValLen = 1024;
      status = VtGenerateParameters (
        VtParamGenImplDSAParams, (Pointer)&pubValLen, randomToUse, paramGen);
      if (status != 0)
        break;

      /* Get the params.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtGetParameterParam (
        paramGen, VtParameterParamDSAParams, (Pointer *)&getParams);
      if (status != 0)
        break;

      /* Copy them into the key gen ctx.
       */
      Z2Memcpy (
        dsaGenCtx->primeP.data, getParams->primeP.data,
        getParams->primeP.len);
      dsaGenCtx->primeP.len = getParams->primeP.len;
      Z2Memcpy (
        dsaGenCtx->subprimeQ.data, getParams->subprimeQ.data,
        getParams->subprimeQ.len);
      dsaGenCtx->subprimeQ.len = getParams->subprimeQ.len;
      Z2Memcpy (
        dsaGenCtx->baseG.data, getParams->baseG.data,
        getParams->baseG.len);
      dsaGenCtx->baseG.len = getParams->baseG.len;
    }

    /* Generate XKEY and XSEED.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGenerateRandomBytes (randomToUse, xkey, VOLT_DSA_XKEY_LEN);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGenerateRandomBytes (randomToUse, xseed, VOLT_DSA_XSEED_LEN);
    if (status != 0)
      break;

    /* Build a random object that will generate the random x in a FIPS
     * prescibed manner.
     */
    randInfo.variation = FIPS_186_PRNG_3_1_CERTIFY;
    randInfo.mpCtx = (VtMpIntCtx)(priObj->mpCtx);
    randInfo.primeQ.data = dsaGenCtx->subprimeQ.data;
    randInfo.primeQ.len = dsaGenCtx->subprimeQ.len;
    randInfo.XKEY.data = xkey;
    randInfo.XKEY.len = VOLT_DSA_XKEY_LEN;
    
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateRandomObject (
      priObj->voltObject.libraryCtx, VtRandomImplFips186Prng,
      (Pointer)&randInfo, &rand);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSeedRandom (rand, xseed, VOLT_DSA_XSEED_LEN);
    if (status != 0)
      break;

    /* Generate the random x.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGenerateRandomBytes (rand, priValBuf, VOLT_DSA_PRI_VAL_LEN);
    if (status != 0)
      break;

    VOLT_CALL_SURRENDER (surrCtx, VT_SURRENDER_FNCT_DSA_KEY_GEN, 0, 2)

    /* Generate the public value from the private value.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VoltGeneratePubValAlloc (
      libCtx, dsaGenCtx->mpCtx, &(dsaGenCtx->primeP), &(dsaGenCtx->baseG),
      priValBuf, VOLT_DSA_PRI_VAL_LEN, &pubVal, &pubValLen);
    if (status != 0)
      break;

    /* Build the public key object of the pair.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = SetPubKeyObject (
      libCtx, dsaGenCtx, pubVal, pubValLen, pubKey);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = SetPriKeyObject (
      libCtx, dsaGenCtx, priValBuf, VOLT_DSA_PRI_VAL_LEN,
      pubVal, pubValLen, priKey);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VoltTestDsaKeyPair (
      libCtx, surrCtx, pubKey, priKey, randomToUse);

  /* If we're building this for the FIPS shared library, we want to set
   * the FIPS error.
   */
#if VOLT_BUILD == VOLT_BUILD_FIPS_SHARED
    if (status == VT_ERROR_UNMATCHED_KEY_PAIR)
    {
      VoltSetFipsError (VT_ERROR_FIPS_DSA_PAIR_GEN);
      status = VT_ERROR_FIPS_DSA_PAIR_GEN;
    }
#endif  /* VOLT_BUILD == VOLT_BUILD_FIPS_SHARED */
    if (status != 0)
      break;

    VOLT_CALL_SURRENDER (surrCtx, VT_SURRENDER_FNCT_DSA_KEY_GEN, 0, 0)

  } while (0);

  VtDestroyParameterObject (&paramGen);
  VtDestroyRandomObject (&rand);

  if (pubVal != (unsigned char *)0)
    Z2Free (pubVal);

  Z2Memset (priValBuf, 0, VOLT_DSA_PRI_VAL_LEN);
  Z2Memset (xkey, 0, VOLT_DSA_XKEY_LEN);
  Z2Memset (xseed, 0, VOLT_DSA_XSEED_LEN);

  VOLT_LOG_ERROR_COMPARE (
    status, (VtLibCtx)libCtx, status, errorType, fnctLine,
    "DSAGenerateKeyPair", (char *)0)

  return (status);
}

int VoltGeneratePubValAlloc (
   VoltLibCtx *libCtx,
   VoltMpIntCtx *mpCtx,
   VtItem *primeP,
   VtItem *baseG,
   unsigned char *priVal,
   unsigned int priValLen,
   unsigned char **pubVal,
   unsigned int *pubValLen
   )
{
  int status;
  unsigned int sign, bufferSize;
  unsigned char *buffer = (unsigned char *)0;
  VoltMpInt *modulus = (VoltMpInt *)0;
  VoltMpInt *base = (VoltMpInt *)0;
  VoltMpInt *expo = (VoltMpInt *)0;
  VoltMpInt *result = (VoltMpInt *)0;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Build the MPInt's containing the modulus, base and exponent.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->CreateMpInt ((Pointer)mpCtx, &modulus);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av不卡在线观看| 精品国产免费久久| 国产·精品毛片| 国产一区不卡精品| 国产精品 欧美精品| 国产成人综合亚洲91猫咪| 国产在线看一区| 国产福利91精品| av亚洲精华国产精华精| va亚洲va日韩不卡在线观看| 国产超碰在线一区| 91亚洲国产成人精品一区二区三| 成人黄色国产精品网站大全在线免费观看 | 在线视频中文字幕一区二区| 91成人在线观看喷潮| 欧美影视一区二区三区| 8x福利精品第一导航| 精品免费国产二区三区| 国产亚洲一区二区在线观看| 亚洲欧洲韩国日本视频| 午夜精品在线视频一区| 国内精品不卡在线| 91在线观看高清| 欧美一区二区三区在线观看| 久久九九影视网| 亚洲少妇中出一区| 美日韩一区二区| 国产成人av电影| 欧美乱妇23p| 国产欧美一区二区精品忘忧草| 综合电影一区二区三区| 日本中文字幕一区二区有限公司| 精品一区二区三区免费| 91一区在线观看| 精品国产不卡一区二区三区| 亚洲人成在线播放网站岛国| 美日韩黄色大片| 在线观看国产91| 久久精子c满五个校花| 亚洲一区二区三区中文字幕 | eeuss影院一区二区三区| 欧美日韩三级视频| 亚洲国产精品高清| 免费人成在线不卡| 日本韩国欧美一区二区三区| 久久综合av免费| 日韩av成人高清| 在线看国产一区| 最新日韩av在线| 国产精品影视网| 91精品在线免费观看| 欧美三级电影一区| 色婷婷综合五月| 精品视频123区在线观看| 欧美一级在线免费| 亚洲午夜私人影院| 懂色av一区二区夜夜嗨| 日韩一区二区三区精品视频| 亚洲另类色综合网站| 国产精品综合在线视频| 日韩欧美激情在线| 天天综合天天综合色| 在线免费观看视频一区| 中文字幕精品三区| 国产大陆a不卡| 337p日本欧洲亚洲大胆精品| 免费在线观看视频一区| 91久久精品一区二区| 最新中文字幕一区二区三区| 国产jizzjizz一区二区| 久久久久久久网| 美国毛片一区二区三区| 51精品视频一区二区三区| 亚洲成人激情综合网| 欧美日韩第一区日日骚| 亚洲大片精品永久免费| 欧美日韩国产在线观看| 一区二区三区视频在线观看| 色中色一区二区| 亚洲在线观看免费| 欧美日韩高清一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 毛片一区二区三区| 日韩免费看的电影| 国产一区二区三区久久悠悠色av| 久久久精品影视| 丁香六月综合激情| 一区二区三区中文字幕精品精品| 欧美优质美女网站| 美女性感视频久久| 久久久久久一级片| 一本大道综合伊人精品热热 | 免费久久精品视频| 国产婷婷一区二区| 91麻豆视频网站| 日韩极品在线观看| 欧美国产视频在线| 欧美调教femdomvk| 精品一二线国产| 亚洲桃色在线一区| 欧美成人一区二区三区在线观看| 国产精品中文字幕日韩精品| 中文字幕一区二区5566日韩| 欧美日韩国产a| 国产成人在线色| 亚洲6080在线| 欧美激情综合五月色丁香小说| 色综合 综合色| 国产一区二区三区免费在线观看| 亚洲色图丝袜美腿| 精品sm捆绑视频| 欧美亚洲高清一区二区三区不卡| 看电影不卡的网站| 亚洲精品视频在线观看免费| 日韩美女主播在线视频一区二区三区 | 亚洲国产裸拍裸体视频在线观看乱了| 欧美一区国产二区| 色婷婷综合久久久中文一区二区| 五月综合激情网| 中文字幕第一区综合| 欧美日韩一区视频| 99精品在线免费| 国产一区二区三区视频在线播放| 亚洲成人免费在线观看| 国产精品久久久久久久久晋中| 91.成人天堂一区| 在线观看av不卡| 成人精品高清在线| 国产精品综合视频| 日韩激情av在线| 亚洲狠狠丁香婷婷综合久久久| 久久久精品欧美丰满| 日韩精品一区国产麻豆| 欧美日韩精品一区二区三区蜜桃 | 99久久久久久| 极品瑜伽女神91| 久久99精品久久久久久久久久久久| 亚洲精品免费看| ...av二区三区久久精品| 中文无字幕一区二区三区| 精品欧美一区二区久久| 91精品欧美一区二区三区综合在| 99久久免费视频.com| 成人性生交大片免费看中文网站| 精品一区二区成人精品| 六月丁香综合在线视频| 日韩国产精品91| 日av在线不卡| 麻豆精品一区二区三区| 午夜精品久久久久久久蜜桃app| 一区二区三区在线观看网站| 亚洲日本中文字幕区| 亚洲手机成人高清视频| 国产精品乱码一区二区三区软件| 国产无一区二区| 中文字幕乱码日本亚洲一区二区| 国产亚洲欧美日韩俺去了| 精品播放一区二区| 中文字幕精品一区| 亚洲老司机在线| 一二三区精品福利视频| 亚洲福利电影网| 青青草国产精品亚洲专区无| 蜜臀av一级做a爰片久久| 国产在线乱码一区二区三区| 从欧美一区二区三区| 99综合影院在线| 在线不卡免费欧美| 久久免费看少妇高潮| 国产精品久久久久久久久快鸭 | 欧美视频一区二区| 欧美一区二区三区系列电影| 日韩美一区二区三区| 久久久www成人免费毛片麻豆 | 另类小说视频一区二区| 国产麻豆91精品| 99re热这里只有精品免费视频 | 久久综合九色综合欧美98| 国产欧美精品区一区二区三区 | 欧洲色大大久久| 欧美一级理论片| 亚洲国产高清不卡| 日韩av一二三| 成人午夜视频免费看| 欧美色图免费看| 国产亚洲一区字幕| 亚洲午夜久久久久| 国产成人精品免费在线| 91福利精品第一导航| 久久久国产午夜精品| 樱桃国产成人精品视频| 国产一区二区不卡在线| 欧美性欧美巨大黑白大战| 精品国产乱码久久久久久夜甘婷婷| 中文字幕一区二区三区视频| 久久电影网电视剧免费观看| 色哟哟国产精品免费观看| 久久久精品国产免大香伊| 亚洲成精国产精品女| 成人sese在线|