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

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

?? dhsecret.c

?? IBE是一種非對稱密碼技術
?? C
字號:
/* Copyright 2005-2006, Voltage Security, all rights reserved.
 */

#include "vibecrypto.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "algobj.h"
#include "keyobj.h"
#include "keyagree.h"
#include "dh.h"
#include "errorctx.h"

/* Gets the shared secret data out of a key object.
 *
 * @param object The object from which the data is to be extracted.
 * @param getInfo The address where the function will deposit the
 * pointer to the info.
 * @return an int, 0 if the function completed successfully or a
 * non-zero error code.
 */
static int VOLT_CALLING_CONV VoltKeyGetDHSharedSecret VOLT_PROTO_LIST ((
   VtKeyObject object,
   Pointer *getInfo
));

int VtAlgorithmImplDHKeyAgree (
   VtAlgorithmObject *object,
   Pointer info,
   unsigned int flag
   )
{
  int status;
  unsigned int bufferSize;
  VoltAlgorithmObject *obj = (VoltAlgorithmObject *)(*object);
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  unsigned char *buffer = (unsigned char *)0;
  VoltKeyAgreeClassCtx *ctx;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Check the flag, it should be VOLT_ALG_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_ALG_SET_TYPE_FLAG)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ASSOCIATED_INFO;
    if (info != (Pointer)0)
      break;

    /* Allocate space for the Key Agree Class Ctx.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    bufferSize = sizeof (VoltKeyAgreeClassCtx);
    buffer = (unsigned char *)Z3Malloc (bufferSize);
    if (buffer == (unsigned char *)0)
      break;
    Z2Memset (buffer, 0, bufferSize);

    ctx = (VoltKeyAgreeClassCtx *)buffer;
    ctx->algorithmImpl = VtAlgorithmImplDHKeyAgree;
    ctx->algorithmImplInfo = (Pointer)0;
    ctx->GenerateSharedSecret = VoltDHGenerateSharedSecret;

    obj->algClass = VOLT_CLASS_KEY_AGREE;
    obj->classCtx = (Pointer)ctx;
    obj->ClassCtxDestroy = VoltSimpleCtxDestroy;

    status = 0;

  } while (0);

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

  /* If there was an error, destroy what we created but did not return.
   */
  if (buffer != (unsigned char *)0)
    Z2Free (buffer);

  obj->state = VOLT_STATE_ERROR;

  VOLT_LOG_ERROR_INFO (
    0, *object, status, 0, errorType,
    (char *)0, "VtAlgorithmImplDHKeyAgree", fnctLine, (char *)0)

  return (status);
}

int VoltDHGenerateSharedSecret (
   VoltAlgorithmObject *obj,
   VtKeyObject otherPartyPubKey,
   VtKeyObject myPriKey,
   VtKeyObject sharedSecret,
   VtRandomObject random
   )
{
  int status, cmpResult;
  unsigned int theSecretLen, sign;
  VoltKeyObject *pubKey = (VoltKeyObject *)otherPartyPubKey;
  VoltKeyObject *priKey = (VoltKeyObject *)myPriKey;
  VoltKeyObject *secret = (VoltKeyObject *)sharedSecret;
  VoltMpIntCtx *mpCtx = secret->mpCtx;
  VoltLibCtx *libCtx = (VoltLibCtx *)(secret->voltObject.libraryCtx);
  VtKeyObject tempPub = (VtKeyObject)0;
  VtKeyObject tempPri = (VtKeyObject)0;
  VoltMpInt *result = (VoltMpInt *)0;
  unsigned char *theSecret = (unsigned char *)0;
  VoltDHPublicKey *pubKeyData;
  VtDHPubKeyInfo *pubKeyInfo;
  VoltDHPrivateKey *priKeyData;
  VtDHPriKeyInfo *priKeyInfo;
  VtItem secretItem;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Make sure the keys are DH.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if ((pubKey->keyType & VOLT_KEY_TYPE_MASK_ASYM_ALG) != VOLT_KEY_ALG_DH)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    if ((pubKey->keyType & VOLT_KEY_TYPE_PUBLIC) == 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    if (pubKey->mpCtx == (VoltMpIntCtx *)0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    if ((priKey->keyType & VOLT_KEY_TYPE_MASK_ASYM_ALG) != VOLT_KEY_ALG_DH)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    if ((priKey->keyType & VOLT_KEY_TYPE_PRIVATE) == 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    if (priKey->mpCtx == (VoltMpIntCtx *)0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    if (secret->mpCtx == (VoltMpIntCtx *)0)
      break;

    /* Get the key data in a form we want and make sure the mpCtx in
     * pub and pri matches.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetKeyParam (
      otherPartyPubKey, VtKeyParamDHPublic, (Pointer *)&pubKeyInfo);
    if (status == VT_ERROR_GET_INFO_UNAVAILABLE)
      status = VT_ERROR_INVALID_KEY_OBJ;
    if (status != 0)
      break;

    /* Create a key object we know will possess the key data the way
     * we want it.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateKeyObject (
      secret->voltObject.libraryCtx, VtKeyImplMpCtx,
      (Pointer)(secret->mpCtx), &tempPub);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSetKeyParam (
      tempPub, VtKeyParamDHPublic, (Pointer)pubKeyInfo);
    if (status != 0)
      break;

    pubKey = (VoltKeyObject *)tempPub;
    pubKeyData = (VoltDHPublicKey *)(pubKey->keyData);

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetKeyParam (
      myPriKey, VtKeyParamDHPrivate, (Pointer *)&priKeyInfo);
    if (status == VT_ERROR_GET_INFO_UNAVAILABLE)
      status = VT_ERROR_INVALID_KEY_OBJ;
    if (status != 0)
      break;

    /* Create a key object we know will possess the key data the way
     * we want it.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateKeyObject (
      secret->voltObject.libraryCtx, VtKeyImplMpCtx,
      (Pointer)(secret->mpCtx), &tempPri);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSetKeyParam (
      tempPri, VtKeyParamDHPrivate, (Pointer)priKeyInfo);
    if (status != 0)
      break;

    priKey = (VoltKeyObject *)tempPri;
    priKeyData = (VoltDHPrivateKey *)(priKey->keyData);

    /* Make sure the pub key's base and prime are the same as the pri
     * key's base and prime.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->Compare (
      pubKeyData->primeP, priKeyData->primeP, &cmpResult);
    if (status != 0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    if (cmpResult != 0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->Compare (
      pubKeyData->baseG, priKeyData->baseG, &cmpResult);
    if (status != 0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    if (cmpResult != 0)
      break;

    /* To generate the shared secret, find
     * (otherPub ^ myPri) mod prime. We'll need a result mpInt.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->CreateMpInt ((Pointer)mpCtx, &result);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->ModExp (
      pubKeyData->pubValY, priKeyData->priValX, pubKeyData->primeP,
      result);
    if (status != 0)
      break;

    /* Get the result as a byte array. First, how long.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      result, &sign, (unsigned char *)0, 0, &theSecretLen);
    if (status == 0)
      status = VT_ERROR_GENERAL;
    if (status != VT_ERROR_BUFFER_TOO_SMALL)
      break;

    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    theSecret = (unsigned char *)Z2Malloc (
      theSecretLen, VOLT_MEMORY_SENSITIVE);
    if (theSecret == (unsigned char *)0)
      break;

    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = mpCtx->MpIntToOctetString (
      result, &sign, theSecret, theSecretLen, &theSecretLen);
    if (status != 0)
      break;

    /* Set the secret key object with the shared secret.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    secretItem.data = theSecret;
    secretItem.len = theSecretLen;
    status = VtSetKeyParam (
      sharedSecret, VtKeyParamDHSharedSecret, (Pointer)&secretItem);

  } while (0);

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

  if (result != (VoltMpInt *)0)
    mpCtx->DestroyMpInt (&result);

  VtDestroyKeyObject (&tempPub);
  VtDestroyKeyObject (&tempPri);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, sharedSecret, status, 0, errorType,
    (char *)0, "VtSharedSecretGenDH", fnctLine, (char *)0)

  return (status);
}

int VtKeyParamDHSharedSecret (
   VtKeyObject object,
   Pointer info,
   unsigned int flag
   )
{
  int status;
  VoltKeyObject *obj = (VoltKeyObject *)object;
  VoltLibCtx *libCtx = (VoltLibCtx *)(obj->voltObject.libraryCtx);
  VtItem *keyInfo = (VtItem *)info;
  VtItem *localCopy = (VtItem *)0;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    if (flag == VOLT_KEY_GET_TYPE_FLAG)
    {
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = VoltKeyGetDHSharedSecret (object, (Pointer *)info);
      break;
    }

    /* 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;

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

    VOLT_SET_FNCT_LINE (fnctLine)
    if ( (keyInfo->data == (unsigned char *)0) || (keyInfo->len == 0) )
      break;

    /* Allocate space for a VtItem and the data.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    localCopy = (VtItem *)Z2Malloc (
      sizeof (VtItem) + keyInfo->len, VOLT_MEMORY_SENSITIVE);
    if (localCopy == (VtItem *)0)
      break;

    localCopy->data = ((unsigned char *)localCopy) + sizeof (VtItem);
    Z2Memcpy (localCopy->data, keyInfo->data, keyInfo->len);
    localCopy->len = keyInfo->len;

    obj->voltObject.CloneObject = VoltCloneDHSharedSecret;
    obj->keyData = (Pointer)localCopy;
    obj->KeyDataDestroy = VoltSimpleCtxDestroy;
    obj->keyType =
      VOLT_KEY_ALG_DH | VOLT_KEY_TYPE_AGREE | VOLT_KEY_TYPE_SHARED_SECRET |
      VOLT_KEY_TYPE_DATA;

    status = 0;

  } while (0);

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

  /* If something went wrong, indicate that this object is not usable.
   */
  obj->keyType = 0;

  if (localCopy != (VtItem *)0)
    Z2Free (localCopy);

  VOLT_LOG_ERROR_INFO (
    0, obj, status, 0, errorType,
    (char *)0, "VtKeyParamDHSharedSecret", fnctLine, (char *)0)

  return (status);
}

static int VoltKeyGetDHSharedSecret (
   VtKeyObject object,
   Pointer *getInfo
   )
{
  int status;
  VoltKeyObject *obj = (VoltKeyObject *)object;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* Is there data?
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_GET_INFO_UNAVAILABLE;
    if (obj->keyData == (Pointer)0)
      break;

    /* Is the algorithm DH?
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    if ((obj->keyType & VOLT_KEY_TYPE_MASK_ASYM_ALG) != VOLT_KEY_ALG_DH)
      break;

    /* Check the keyType in the object, if must contain
     * VOLT_KEY_TYPE_SHARED_SECRET.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    if ((obj->keyType & VOLT_KEY_TYPE_SHARED_SECRET) == 0)
      break;

    /* Is the key in data form?
     */
    if ((obj->keyType & VOLT_KEY_TYPE_MASK_DATA) != VOLT_KEY_TYPE_DATA)
    {
      /* The data is not available, does the object have a GetData
       * function?
       */
      VOLT_SET_FNCT_LINE (fnctLine)
      *getInfo = (Pointer)0;
      if (obj->GetKeyData == (VGetKeyData)0)
        break;

      /* Call the Get function.
       */
      VOLT_SET_ERROR_TYPE (errorType, 0)
      VOLT_SET_FNCT_LINE (fnctLine)
      status = obj->GetKeyData ((VtKeyObject)obj, getInfo);
      break;
    }

    *getInfo = obj->keyData;
    status = 0;

  } while (0);

  VOLT_LOG_ERROR_INFO_COMPARE (
    status, 0, object, status, 0, errorType,
    (char *)0, "VoltKeyGetDHSharedSecret", fnctLine, (char *)0)

  return (status);
}

int VoltCloneDHSharedSecret (
   Pointer sourceObject,
   Pointer *destObject
   )
{
  int status;
  VoltKeyObject *obj = (VoltKeyObject *)sourceObject;
  VtKeyObject newKey = (VtKeyObject)0;
  VtItem *getInfo;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  do
  {
    /* We know the source is an object, is it a key object?
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if (VOLT_OBJECT_TYPE_NOT_EQUAL (sourceObject, VOLT_OBJECT_TYPE_KEY))
      break;

    /* Is the object a DH shared secret?
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_KEY_OBJ;
    if ((obj->keyType & VOLT_KEY_TYPE_MASK_ASYM_ALG) != VOLT_KEY_ALG_DH)
      break;
    if ((obj->keyType & VOLT_KEY_TYPE_SHARED_SECRET) == 0)
      break;

    /* Get the DH key data out of the source object.
     */
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtGetKeyParam (
      (VtKeyObject)obj, VtKeyParamDHSharedSecret, (Pointer *)&getInfo);
    if (status != 0)
      break;

    /* Create and set a key object with this data.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtCreateKeyObject (
      obj->voltObject.libraryCtx, VtKeyImplMpCtx, (Pointer)(obj->mpCtx),
      &newKey);
    if (status != 0)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    status = VtSetKeyParam (
      newKey, VtKeyParamDHSharedSecret, (Pointer)getInfo);
    if (status != 0)
      break;

    /* If all that worked, we have our clone.
     */
    *destObject = (Pointer)newKey;

  } while (0);

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

  /* If there was an error, destroy anything we created.
   */
  VtDestroyKeyObject (&newKey);

  VOLT_LOG_ERROR_INFO (
    0, obj, status, 0, 0,
    (char *)0, "VoltCloneDHSharedSecret", fnctLine, (char *)0)

  return (status);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩 欧美一区二区三区| 日韩视频一区在线观看| 亚洲日本在线a| 在线精品亚洲一区二区不卡| 18涩涩午夜精品.www| 99这里都是精品| 亚洲高清久久久| 欧美一区二区播放| 国产麻豆精品视频| 成人免费在线视频观看| 欧美色男人天堂| 久久国产成人午夜av影院| 久久九九国产精品| 在线一区二区三区做爰视频网站| 丝袜美腿成人在线| 国产丝袜在线精品| 欧美日韩免费一区二区三区视频| 久久精品国产亚洲a| 日韩久久一区二区| 在线成人av影院| 国产成人精品aa毛片| 亚洲成在线观看| 久久久久国产精品麻豆| 色欧美片视频在线观看在线视频| 日本亚洲视频在线| 国产精品国产精品国产专区不蜜| 欧美少妇xxx| 福利一区在线观看| 亚洲成人一区在线| 国产精品久久久久久久久搜平片 | 国产精品18久久久久久久久| 亚洲视频在线一区观看| 日韩欧美黄色影院| 91在线观看视频| 国内精品免费在线观看| 亚洲国产精品一区二区www | 亚洲欧美视频一区| 日韩女优av电影| 91久久精品国产91性色tv| 国产在线精品国自产拍免费| 一区二区三区日韩精品视频| 久久精品人人做人人爽人人| 欧美精品乱人伦久久久久久| aaa欧美日韩| 国产丶欧美丶日本不卡视频| 午夜精品久久久久久久蜜桃app| 国产日韩欧美精品一区| 日韩一区二区在线看| 欧美视频在线观看一区二区| 成人性生交大片免费看中文网站| 欧美bbbbb| 亚洲综合一二区| 亚洲欧美偷拍卡通变态| 国产精品三级电影| 久久精品日韩一区二区三区| 欧美v亚洲v综合ⅴ国产v| 欧美男人的天堂一二区| 色综合网色综合| 成a人片国产精品| 国产精品一区一区三区| 久国产精品韩国三级视频| 日韩精品1区2区3区| 亚洲福利电影网| 亚洲精品免费播放| 亚洲欧美国产77777| 国产精品久久久久影视| 欧美国产欧美综合| 欧美极品aⅴ影院| 久久九九国产精品| 欧美激情一二三区| 国产精品色眯眯| 中文字幕一区二区三区乱码在线 | 中文字幕中文字幕一区二区| 国产亲近乱来精品视频| 久久久影视传媒| 国产欧美日韩麻豆91| 国产欧美1区2区3区| 国产精品久久久久久亚洲毛片| 国产精品久久三区| 自拍偷拍欧美精品| 亚洲精品一二三| 亚洲小说春色综合另类电影| 亚洲综合精品久久| 五月婷婷久久丁香| 免费在线观看成人| 韩国av一区二区三区在线观看| 国产毛片精品国产一区二区三区| 国产成人在线视频网站| 成人aaaa免费全部观看| 欧洲激情一区二区| 欧美一区二区三区免费视频| 精品国产三级a在线观看| 久久久99久久| 日韩一区在线播放| 午夜精品福利一区二区三区蜜桃| 日韩精品免费视频人成| 国内久久婷婷综合| aa级大片欧美| 91麻豆精品国产自产在线观看一区 | 国产精品入口麻豆九色| 亚洲麻豆国产自偷在线| 日韩一区欧美二区| 国产精品香蕉一区二区三区| 99re热这里只有精品视频| 欧美天堂亚洲电影院在线播放| 日韩欧美国产综合在线一区二区三区| 久久午夜免费电影| 亚洲乱码中文字幕| 另类专区欧美蜜桃臀第一页| av电影一区二区| 欧美日韩国产高清一区| 久久久久久久久久久久久久久99| 自拍偷拍国产精品| 免费欧美日韩国产三级电影| 成人av一区二区三区| 欧美一区二区二区| 亚洲视频网在线直播| 久久精品噜噜噜成人88aⅴ| 不卡电影一区二区三区| 日韩三级在线免费观看| 国产精品美女久久福利网站 | 日韩一区精品字幕| 不卡在线观看av| 精品国产一区二区国模嫣然| 亚洲综合自拍偷拍| 国产精品99久久久| 欧美久久婷婷综合色| 国产精品美女久久久久久2018| 偷窥少妇高潮呻吟av久久免费| 成人理论电影网| 日韩片之四级片| 亚洲综合999| av在线一区二区| 久久精品一二三| 日韩成人一区二区| 一本到高清视频免费精品| 久久精品视频一区| 九色综合国产一区二区三区| 欧美色涩在线第一页| 亚洲欧洲成人自拍| 国产盗摄一区二区| 久久婷婷色综合| 蜜臀av一级做a爰片久久| 色狠狠综合天天综合综合| 日本一区二区成人在线| 精品一区二区三区免费毛片爱| 欧美日韩国产综合一区二区三区 | 日韩美女视频一区二区在线观看| 亚洲男人的天堂网| jlzzjlzz欧美大全| 国产欧美一区二区精品性| 黄页视频在线91| 欧美草草影院在线视频| 日韩精品电影在线| 制服丝袜亚洲精品中文字幕| 亚洲综合一区二区精品导航| 91高清在线观看| 亚洲免费av高清| 色婷婷久久99综合精品jk白丝| 国产精品久久久久aaaa樱花| 懂色av中文一区二区三区 | 欧美va亚洲va在线观看蝴蝶网| 同产精品九九九| 欧美女孩性生活视频| 丝袜美腿高跟呻吟高潮一区| 欧美电影影音先锋| 免费人成在线不卡| 欧美一区二区三区系列电影| 午夜精品久久久久久久久久| 欧美日韩国产123区| 视频一区二区三区在线| 欧美一区二区在线看| 免费不卡在线观看| 精品国产欧美一区二区| 国产乱一区二区| 国产亚洲一区二区三区在线观看| 国产成人亚洲综合色影视| 中文在线资源观看网站视频免费不卡 | 欧美丰满少妇xxxbbb| 丝袜a∨在线一区二区三区不卡 | 久久伊99综合婷婷久久伊| 国产精品99久久不卡二区| 国产精品动漫网站| 色综合久久88色综合天天| 亚洲成av人片在线观看无码| 91精品欧美一区二区三区综合在| 久久精品国产色蜜蜜麻豆| 久久久国产精品麻豆| 91丨porny丨国产| 亚洲v日本v欧美v久久精品| 日韩欧美一区在线| 成人高清视频免费观看| 亚洲专区一二三| xf在线a精品一区二区视频网站| 成人av在线资源网站| 一区二区三区精品在线| 日韩一级二级三级| 不卡一区二区在线| 亚洲成av人片www| 久久久久久久综合色一本|