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

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

?? fipsprime.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 "mpint.h"
#include "prime.h"
#include "errorctx.h"

int VoltGeneratePrimeFips (
   unsigned int primeSizeBits,
   VtRandomObject random,
   unsigned char *SEED,
   unsigned int *seedLen,
   VoltMpInt *prime
   )
{
  int status, count;
  unsigned int bufferSize, digestLen, index, limit;
  unsigned int bitMask, bitSet, isPrime;
  VoltMpIntCtx *mpCtx = (VoltMpIntCtx *)(prime->mpCtx);
  VoltLibCtx *libCtx = (VoltLibCtx *)(mpCtx->voltObject.libraryCtx);
  VtAlgorithmObject sha1 = (VtAlgorithmObject)0;
  unsigned char *buffer = (unsigned char *)0;
  unsigned char digest[40];
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  /* How many bytes do we generate.
   */
  bufferSize = (primeSizeBits + 7) / 8;
  *seedLen = bufferSize;

  do
  {
    /* Currently, the toolkit is supporting only 160 bit primes to be
     * generated using the FIPS technique
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_PARAM_LENGTH;
    if (primeSizeBits != 160)
      break;

    /* Build a buffer to hold the starting point.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    buffer = (unsigned char *)Z2Malloc (bufferSize, VOLT_MEMORY_SENSITIVE);
    if (buffer == (unsigned char *)0)
      break;

    /* Create a mask for the first byte. Depending on the bit length,
     * we may want to trim some bits off the top.
     */
    bitSet = primeSizeBits % 8;
    if (bitSet == 0)
      bitSet = 8;
    bitMask = 0xff >> (8 - bitSet);
    /* Make sure the msbit is set. Create a value to OR with the first
     * byte that will set the msbit.
     */
    bitSet = 1 << (bitSet - 1);

    /* Build the SHA-1 digest object to be used in step 2 below.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateAlgorithmObject (
      (VtLibCtx)libCtx, VtAlgorithmImplSHA1, (Pointer)0, &sha1);
    if (status != 0)
      break;

    count = 0;
    isPrime = 1;
    do
    {
      /* Step 1: "Choose an arbitrary sequence ... call it SEED."
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtGenerateRandomBytes (random, SEED, bufferSize); 
      if (status != 0)
        break;

      /* Step 2: Compute U.
       */
      Z2Memcpy (buffer, SEED, bufferSize);

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtDigestInit (sha1);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtDigestFinal (
        sha1, buffer, bufferSize, digest, sizeof (digest), &digestLen);
      if (status != 0)
        break;

      /* Add 1 to SEED (don't carry beyond the most significant byte).
       */
      for (index = bufferSize; index > 0; --index)
      {
        buffer[index - 1] += 1;
        if (buffer[index - 1] != 0)
          break;
      }

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtDigestInit (sha1);
      if (status != 0)
        break;

      VOLT_SET_FNCT_LINE (fnctLine)
      status = VtDigestFinal (
        sha1, buffer, bufferSize, digest + digestLen,
        sizeof (digest) - digestLen, &digestLen);
      if (status != 0)
        break;

      /* XOR the two digests.
       */
      limit = digestLen;
      if (digestLen > bufferSize)
        limit = bufferSize;
      for (index = 0; index < limit; ++index)
        buffer[index] = digest[index] ^ digest[index + digestLen];

      /* Step 3: Form q.
       */
      buffer[0] &= (unsigned char)bitMask;
      buffer[0] |= (unsigned char)bitSet;
      buffer[bufferSize - 1] |= 1;

      /* Set the MpInt to this value.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = mpCtx->OctetStringToMpInt (0, buffer, bufferSize, prime);
      if (status != 0)
        break;

      /* Step 4: Run Rabin-Miller on this value.
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltRabinMillerTest (
        prime, primeSizeBits, VOLT_RABIN_MILLER_COUNT_186_2,
        random, &isPrime);
      if (status != 0)
        break;

      /* If this came back prime, we're done.
       */
      if (isPrime != 0)
        break;

      /* Step 5: The Rabin-Miller test indicates that the number is not
       * prime, get a new random starting point. But first, don't run
       * this test forever.  Try up to 1000000 times.
       */
      VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VT_ERROR_NO_PRIME_FOUND;
      count++;
      if (count > 1000000)
        break;

    } while (1);

  } while (0);

  VtDestroyAlgorithmObject (&sha1);
  Z2Memset (digest, 0, sizeof (digest));
  if (buffer != (unsigned char *)0)
    Z2Free (buffer);

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

  return (status);
}

void VoltAddValueToBuffer (
   unsigned char *buffer,
   unsigned int bufferLen,
   UInt32 increment
   )
{
  unsigned int indexB, indexI;
  unsigned char carry, val;
  unsigned char vector[4];

  VOLT_SET_UINT32 (increment, vector)

  /* Add the four words of the increment to the low four words of the
   * buffer.
   */
  carry = 0;
  for (indexI = 4, indexB = bufferLen; indexI > 0; --indexI, --indexB)
  {
    val = carry + vector[indexI - 1];
    if (val >= carry)
      carry = 0;
    buffer[indexB - 1] += val;
    if (buffer[indexB - 1] < val)
      carry = 1;
  }

  /* If there's no carry, we're done.
   */
  if (carry == 0)
    return;

  /* Propagate the carry through the buffer (ignoring any carry beyond
   * the most significant byte.
   */
  for (; indexB > 0; --indexB)
  {
    buffer[indexB - 1] += 1;
    if (buffer[indexB - 1] != 0)
      break;
  }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆精品视频| 国产成人综合自拍| 欧美午夜电影网| 综合av第一页| 99国产一区二区三精品乱码| 国产欧美日本一区视频| 久久99精品一区二区三区| 欧美一区二区三区视频| 青草国产精品久久久久久| 91精品国产91久久久久久最新毛片| 亚洲一区二区三区免费视频| 色狠狠av一区二区三区| 亚洲主播在线观看| 欧美系列亚洲系列| 日韩精品成人一区二区三区| 正在播放亚洲一区| 麻豆久久久久久| 久久婷婷一区二区三区| 国产mv日韩mv欧美| 中文字幕一区视频| 色婷婷久久一区二区三区麻豆| 亚洲免费观看高清完整版在线 | 国产精品情趣视频| 成人黄色小视频| 成人免费在线视频| 日本高清成人免费播放| 视频一区二区中文字幕| 91精品国产入口在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品国产一区二区三区忘忧草| 国产在线国偷精品免费看| 国产色产综合产在线视频| a亚洲天堂av| 亚洲一区二区三区影院| 91精品中文字幕一区二区三区| 久久国产精品72免费观看| 久久午夜色播影院免费高清| 成人av电影在线播放| 亚洲综合在线第一页| 欧美一区在线视频| 国产精品亚洲一区二区三区在线 | 看国产成人h片视频| 久久精品一区二区三区不卡 | 精品视频在线免费看| 蜜臀av一区二区| 中文字幕欧美三区| 欧美在线免费播放| 麻豆精品在线观看| 国产精品久久久久久户外露出 | 99re66热这里只有精品3直播| 亚洲国产欧美在线| 亚洲精品在线观| 91久久人澡人人添人人爽欧美 | 亚洲愉拍自拍另类高清精品| 日韩亚洲欧美一区二区三区| 国产成人精品一区二区三区网站观看| 亚洲视频在线观看三级| 欧美一区二区三区在线电影| 国产成人精品午夜视频免费| 亚洲午夜久久久久| 久久蜜臀精品av| 一本一道久久a久久精品| 久久91精品久久久久久秒播| 亚洲视频狠狠干| 日韩三级在线免费观看| 91麻豆自制传媒国产之光| 久久精品国产一区二区| 亚洲男人的天堂av| 精品国精品自拍自在线| 91精品办公室少妇高潮对白| 国产资源精品在线观看| 亚洲国产成人精品视频| 欧美国产日韩一二三区| 欧美日本一道本在线视频| 国产91高潮流白浆在线麻豆| 午夜av电影一区| 亚洲色图欧美在线| 亚洲精品一区二区三区蜜桃下载| 日本高清不卡在线观看| 国产成人夜色高潮福利影视| 午夜久久电影网| 亚洲欧美偷拍卡通变态| 国产色综合久久| 日韩视频免费直播| 欧美三级日韩在线| 91丨九色porny丨蝌蚪| 国产综合成人久久大片91| 婷婷中文字幕一区三区| 中文字幕亚洲欧美在线不卡| 精品国产在天天线2019| 欧美日韩国产高清一区二区| av欧美精品.com| 国产精品一区二区男女羞羞无遮挡| 性做久久久久久免费观看欧美| 国产精品乱码一区二区三区软件| 日韩午夜激情av| 欧美视频日韩视频| 91在线精品一区二区三区| 国产剧情一区在线| 美女视频网站久久| 亚洲一区二区在线视频| 国产精品卡一卡二| 久久久五月婷婷| 日韩亚洲欧美中文三级| 91麻豆精品国产91久久久久| 欧美性生活影院| 色综合久久中文综合久久97| 成人性色生活片| 国产老妇另类xxxxx| 麻豆久久久久久久| 美女网站视频久久| 日韩vs国产vs欧美| 婷婷国产在线综合| 婷婷夜色潮精品综合在线| 一区二区三区在线观看国产| 国产精品电影一区二区三区| 久久久久久麻豆| 久久久综合视频| 久久久精品免费观看| 欧美成人精精品一区二区频| 日韩三级在线免费观看| 日韩免费观看高清完整版 | 免费看欧美女人艹b| 日本中文字幕不卡| 五月婷婷激情综合网| 天天亚洲美女在线视频| 爽好多水快深点欧美视频| 香蕉久久夜色精品国产使用方法| 亚洲午夜激情网站| 午夜日韩在线电影| 午夜精品福利视频网站| 午夜国产不卡在线观看视频| 婷婷夜色潮精品综合在线| 视频一区二区不卡| 免费在线观看成人| 久久97超碰色| 国内成人精品2018免费看| 国产精品亚洲成人| 丁香六月综合激情| 99久久久久久99| 欧美伊人精品成人久久综合97 | 欧美一区中文字幕| 精品国产一区二区三区忘忧草 | 欧美性受xxxx黑人xyx性爽| 欧美三级中文字幕| 日韩三级伦理片妻子的秘密按摩| 91精品国产综合久久久久久久 | 欧美亚洲动漫另类| 欧美日韩成人综合| 欧美成人在线直播| 欧美激情一区在线| 亚洲精品免费视频| 石原莉奈在线亚洲三区| 久久99精品久久久| 成人夜色视频网站在线观看| 91视视频在线观看入口直接观看www | 99久久精品免费精品国产| 日本韩国一区二区| 欧美一区三区四区| 久久综合av免费| 亚洲日本在线观看| 天堂一区二区在线| 国产伦精品一区二区三区视频青涩 | 欧美日韩亚洲高清一区二区| 日韩一级精品视频在线观看| 亚洲精品一线二线三线无人区| 国产精品美女www爽爽爽| 亚洲综合视频网| 美脚の诱脚舐め脚责91| 成人高清免费观看| 欧美伊人久久久久久午夜久久久久| 日韩一区二区麻豆国产| 国产精品麻豆一区二区| 婷婷成人激情在线网| 国产成人在线影院| 欧美婷婷六月丁香综合色| 欧美成人精品1314www| 亚洲人成人一区二区在线观看| 日韩中文字幕麻豆| 丁香婷婷深情五月亚洲| 欧美丝袜丝nylons| 久久综合成人精品亚洲另类欧美| 亚洲女性喷水在线观看一区| 免费日韩伦理电影| av男人天堂一区| 欧美刺激脚交jootjob| 亚洲女同ⅹxx女同tv| 美女国产一区二区三区| 91丝袜美腿高跟国产极品老师| 欧美一级高清片在线观看| 国产精品二三区| 麻豆精品久久精品色综合| 91麻豆自制传媒国产之光| 亚洲精品在线观| 亚洲第一主播视频| 成人免费va视频| 日韩无一区二区| 亚洲国产综合在线| 福利91精品一区二区三区| 欧美精品精品一区|