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

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

?? opensslbntype.c

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

typedef struct ThreadLocalBNContextInfo
{
  struct ThreadLocalBNContextInfo*  next;
  VtLibCtx                          libCtx;
  Pointer                           threadLocalKey;
  int                               refCount;
} ThreadLocalBNContextInfo;

static ThreadLocalBNContextInfo*    gBNContextInfoList;

int VOLT_CALLING_CONV DeleteThreadLocalBNCtx (
  VoltThreadCtx *threadCtx,
  Pointer threadLocalData
)
{
  if (threadLocalData != (Pointer)0)
  {
    BN_CTX_free((BN_CTX*)threadLocalData);
  }
  
  return 0;
}

int VtMpIntImplOpenSSL (
   VtMpIntCtx *mpCtx,
   Pointer info,
   unsigned int flag
   )
{
  int status, status2;
  VoltMpIntCtx *ctx = (VoltMpIntCtx *)(*mpCtx);
  VtLibCtx libCtx;
  VoltThreadCtx* threadCtx;
  Pointer toolkitLock;
  ThreadLocalBNContextInfo* contextInfo;
  int acquiredLock = 0;
  //BN_CTX *bnCtx = (BN_CTX *)0;
  VOLT_DECLARE_FNCT_LINE (fnctLine)
  VOLT_DECLARE_ERROR_TYPE (errorType)

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

    /* The associated info should be NULL pointer.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ASSOCIATED_INFO;
    if (info != (Pointer)0)
      break;

    libCtx = ctx->voltObject.libraryCtx;
    threadCtx = libCtx->threadCtx;
    
    VOLT_SET_ERROR_TYPE(errorType, 0)

    VOLT_SET_FNCT_LINE (fnctLine)
    status = threadCtx->GetToolkitLock(threadCtx, &toolkitLock);
    if (status != 0)
      break;
      
    VOLT_SET_FNCT_LINE (fnctLine)
    status = threadCtx->AcquireLock(threadCtx, toolkitLock);
    if (status != 0)
      break;
    
    acquiredLock = 1;
    
    /* First search through list to see if there's already a
     * thread-local variable for this library context
     */
    contextInfo = gBNContextInfoList;
    while (contextInfo != (ThreadLocalBNContextInfo*)0)
    {
      if (contextInfo->libCtx == libCtx)
        break;
      contextInfo = contextInfo->next;
    }
  
    /* Create a new info entry if necessary */
    if (contextInfo == (ThreadLocalBNContextInfo*)0)
    {
      VOLT_SET_FNCT_LINE (fnctLine)
      contextInfo = (ThreadLocalBNContextInfo*)
        Z3Malloc(sizeof(ThreadLocalBNContextInfo));
      if (contextInfo == (ThreadLocalBNContextInfo*)0)
      {
        VOLT_SET_ERROR_TYPE(errorType, VT_ERROR_TYPE_PRIMARY)
        status = VT_ERROR_MEMORY;
        break;
      }
      
      Z2Memset(contextInfo, 0, sizeof(ThreadLocalBNContextInfo));

      contextInfo->libCtx = libCtx;
      
      /* Create the thread-local key. We do this per-libCtx,
       * because the thread-local key is associated with a
       * particular library context and cannot, in general,
       * be shared safely across multiple contexts.
       */
      VOLT_SET_FNCT_LINE(fnctLine)
      status = threadCtx->CreateThreadLocalKey(threadCtx,
        DeleteThreadLocalBNCtx, &contextInfo->threadLocalKey);
      if (status != 0)
        break;
      
      /* Link it into the BN context info list */
      contextInfo->next = gBNContextInfoList;
      gBNContextInfoList = contextInfo;
    }
    
    contextInfo->refCount++;

    #if 0
    status = VT_ERROR_MEMORY;
    bnCtx = BN_CTX_new ();
    if (bnCtx == (BN_CTX *)0)
      break;
    #endif
    
    /* Set the fields of the mpCtx.
     */
    ctx->MpIntImpl = VtMpIntImplOpenSSL;
    ctx->CreateMpInt = OpenSSLBnWrapCreateMpInt;
    ctx->DestroyMpInt = OpenSSLBnWrapDestroyMpInt;
    ctx->OctetStringToMpInt = OpenSSLBnWrapOctetStringToMpInt;
    ctx->IntToMpInt = OpenSSLBnWrapIntToMpInt;
    ctx->MpIntToMpInt = OpenSSLBnWrapMpIntToMpInt;
    ctx->MpIntToOctetString = OpenSSLBnWrapMpIntToOctetString;
    ctx->MpIntToInt = OpenSSLBnWrapMpIntToInt;
    ctx->Compare = OpenSSLBnWrapCompare;
    ctx->EvenOddZeroPositiveNegative =
      OpenSSLBnWrapEvenOddZeroPositiveNegative;
    ctx->GetBitLength = OpenSSLBnWrapGetBitLength;
    ctx->SetBit = OpenSSLBnWrapSetBit;
    ctx->GetBit = OpenSSLBnWrapGetBit;
    ctx->ShiftLeftBits = OpenSSLBnWrapShiftLeftBits;
    ctx->ShiftRightBits = OpenSSLBnWrapShiftRightBits;
    ctx->Add = OpenSSLBnWrapAdd;
    ctx->Subtract = OpenSSLBnWrapSubtract;
    ctx->Multiply = OpenSSLBnWrapMultiply;
    ctx->Square = OpenSSLBnWrapSquare;
    ctx->Divide = OpenSSLBnWrapDivide;
    ctx->GCD = OpenSSLBnWrapGCD;
    ctx->ModReduce = OpenSSLBnWrapModReduce;
    ctx->ModInvert = OpenSSLBnWrapModInvert;
    ctx->ModExp = OpenSSLBnWrapModExp;
    /* OpenSSL does not supply a CRT function, use the Volt version.
     */
    ctx->ModExpCRT = VoltModExpCRT;
    /* This implementation has no GeneratePrime.
     */

    ctx->localCtx = contextInfo->threadLocalKey;
    ctx->LocalCtxDestroy = OpenSSLBnWrapLocalCtxDestroy;

    status = 0;

  } while (0);

  if (acquiredLock)
  {
    status2 = threadCtx->ReleaseLock(threadCtx, toolkitLock);
  }
  
  VOLT_LOG_ERROR_COMPARE (
    status, libCtx, status, errorType,
    fnctLine, "VtMpIntImplOpenSSL", (char *)0)

  return (status);
}

void OpenSSLBnWrapLocalCtxDestroy (
   Pointer obj,
   Pointer ctx
   )
{
  int status;
  VtMpIntCtx mpCtx;
  VtLibCtx libCtx;
  VoltThreadCtx* threadCtx;
  Pointer toolkitLock;
  ThreadLocalBNContextInfo* contextInfo;
  ThreadLocalBNContextInfo* previousContextInfo;
  
  /* Anything to destroy?
   */
  if ( (obj == (Pointer)0) || (ctx == (Pointer)0) )
    return;

  mpCtx = (VtMpIntCtx) obj;
  
  libCtx = mpCtx->voltObject.libraryCtx;
  threadCtx = libCtx->threadCtx;
  
  status = threadCtx->GetToolkitLock(threadCtx, &toolkitLock);
  status = threadCtx->AcquireLock(threadCtx, toolkitLock);
  
  contextInfo = gBNContextInfoList;
  previousContextInfo = (ThreadLocalBNContextInfo*)0;
  while (contextInfo != (ThreadLocalBNContextInfo*)0)
  {
    if (contextInfo->libCtx == libCtx)
    {
      contextInfo->refCount--;
      if (contextInfo->refCount == 0)
      {
        status = threadCtx->DestroyThreadLocalKey(threadCtx,
          &contextInfo->threadLocalKey);
        if (previousContextInfo == (ThreadLocalBNContextInfo*)0)
          gBNContextInfoList = contextInfo->next;
        else
          previousContextInfo->next = contextInfo->next;
        Z2Free(contextInfo);
      }
      break;
    }
    previousContextInfo = contextInfo;
    contextInfo = contextInfo->next;
  }
  
  status = threadCtx->ReleaseLock(threadCtx, toolkitLock);
  //BN_CTX_free ((BN_CTX *)ctx);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久中文综合久久97| 国产精品萝li| 中文字幕欧美一| 成人福利电影精品一区二区在线观看| 日韩欧美电影在线| 国产日产精品1区| ●精品国产综合乱码久久久久| 亚洲国产成人私人影院tom| 亚洲精品视频在线观看网站| 蜜桃av一区二区三区电影| 国产成人啪免费观看软件| 欧美视频一区二区三区四区| 亚洲无线码一区二区三区| 欧美日本韩国一区二区三区视频| 亚洲主播在线观看| 欧美电影影音先锋| 久久99精品久久久久久久久久久久| 亚洲精品一区二区在线观看| 国产精品影视网| 亚洲欧美一区二区三区国产精品| 欧美性视频一区二区三区| 日韩成人精品视频| 久久亚洲一级片| 99在线精品一区二区三区| 亚洲精品在线三区| 另类调教123区| 亚洲乱码中文字幕综合| 国产精品1区2区3区在线观看| 欧美在线观看视频一区二区| 国产成人精品亚洲777人妖 | 色综合 综合色| 丰满少妇在线播放bd日韩电影| 麻豆久久一区二区| 欧美一区二区视频在线观看2020| 亚洲精品伦理在线| 中文字幕在线一区免费| 日韩亚洲欧美中文三级| 91在线国产观看| 国产精品538一区二区在线| 日本亚洲最大的色成网站www| 亚洲欧洲综合另类在线| 一区二区在线看| 欧美年轻男男videosbes| 亚洲影院久久精品| 欧美精品丝袜久久久中文字幕| 日本美女一区二区三区视频| 日韩欧美国产小视频| 国产精品中文有码| 中文字幕一区二区三区蜜月| 亚洲另类在线一区| 欧美精品 国产精品| 成年人国产精品| 欧美日韩国产片| 一区二区三区久久| 欧美在线观看一区二区| 国产精品123区| 亚洲精品高清视频在线观看| 99re6这里只有精品视频在线观看| 一区二区三区.www| 亚洲高清免费视频| 日韩欧美123| 美腿丝袜一区二区三区| 日韩视频免费观看高清完整版 | 欧美日韩亚洲综合在线| 日韩欧美中文字幕精品| 天堂一区二区在线| 日韩亚洲欧美中文三级| 99视频在线精品| 一区二区三区精品久久久| 精品国产一区二区亚洲人成毛片| www.爱久久.com| 在线观看国产日韩| 日韩一区二区三区电影在线观看| 国产亚洲综合色| 一区二区三区国产豹纹内裤在线| 日本亚洲电影天堂| 色婷婷激情久久| 国产免费成人在线视频| 亚欧色一区w666天堂| 亚洲国产高清在线| 精品久久久久久最新网址| 宅男噜噜噜66一区二区66| 久久亚洲一级片| 日韩毛片在线免费观看| 亚洲一区二区视频| 日韩1区2区3区| 日本午夜一本久久久综合| 亚洲视频在线观看三级| 五月天中文字幕一区二区| √…a在线天堂一区| 欧美日韩国产高清一区二区| 老司机免费视频一区二区| 亚洲三级免费电影| 亚洲国产激情av| 日韩欧美亚洲一区二区| 欧美日韩精品一区视频| 亚洲一区自拍偷拍| 国产亚洲自拍一区| 91福利国产成人精品照片| 日本伊人色综合网| 免费视频一区二区| 三级欧美韩日大片在线看| 国产情人综合久久777777| 精品少妇一区二区三区视频免付费 | 亚洲色图色小说| 亚洲美女偷拍久久| 久久精品国产亚洲5555| 3d成人动漫网站| 久久精品夜色噜噜亚洲aⅴ| 国产在线视频精品一区| 久久久99久久| av男人天堂一区| 亚洲国产欧美日韩另类综合| 欧美性受xxxx| 国产美女视频一区| 国产精品女主播av| 韩国v欧美v亚洲v日本v| 337p亚洲精品色噜噜噜| 国产精品乱人伦一区二区| 国产麻豆91精品| 久久中文娱乐网| 紧缚捆绑精品一区二区| 精品裸体舞一区二区三区| 日本午夜精品一区二区三区电影| 国产高清久久久| 日韩欧美色电影| 久久99精品久久久久久久久久久久| 东方欧美亚洲色图在线| 91传媒视频在线播放| 91精品国产入口在线| 日韩成人免费电影| 欧美性感一区二区三区| 亚洲国产一二三| 国产成人亚洲综合a∨婷婷图片 | 9191成人精品久久| 久久综合国产精品| 久久精品国产精品亚洲精品| 欧美精品久久99久久在免费线| 亚洲伦在线观看| 欧美激情资源网| 欧美高清视频一二三区 | 国产精品久久久久天堂| 亚洲精品一区二区三区福利| 欧美天堂一区二区三区| 不卡视频一二三| 欧美aⅴ一区二区三区视频| 91精品麻豆日日躁夜夜躁| 一区二区三区精品在线观看| 91精品国产综合久久小美女| 久久99精品国产.久久久久久 | 成年人网站91| 久久精品在线免费观看| 偷偷要91色婷婷| 一本色道久久综合亚洲91| 亚洲视频香蕉人妖| 欧美性受xxxx黑人xyx| 欧美成人精品福利| 看国产成人h片视频| 国产一区二区三区综合| 91精品国产色综合久久ai换脸 | 7777精品伊人久久久大香线蕉 | 日韩精品一区二区三区视频| 亚洲国产综合人成综合网站| 欧美在线观看视频在线| 亚洲激情图片qvod| 欧美mv日韩mv亚洲| 色婷婷av一区二区三区大白胸| 亚洲一区二区三区小说| 精品久久久久久久久久久久久久久久久| 久久国产精品露脸对白| 日本一区二区免费在线| 国产一区二区不卡老阿姨| 99久久综合精品| 精品国产123| 日韩av午夜在线观看| 91久久精品一区二区二区| 亚洲免费在线看| 成人av免费在线播放| 久久久久99精品国产片| 毛片av中文字幕一区二区| 91网址在线看| 一区二区三区自拍| 91影院在线免费观看| 国产精品久久久一本精品| 国产乱子伦一区二区三区国色天香| 精品国产髙清在线看国产毛片| 婷婷国产v国产偷v亚洲高清| 在线观看区一区二| 亚洲自拍都市欧美小说| 91美女片黄在线观看91美女| 亚洲一区二区精品3399| 欧美性欧美巨大黑白大战| 亚洲乱码国产乱码精品精可以看| 成人综合婷婷国产精品久久蜜臀 | 日韩色在线观看| 日本欧美加勒比视频| 欧美一区二区三区视频在线观看| 日本一不卡视频| 欧美一级一区二区| 久久精品国产亚洲一区二区三区|