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

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

?? asn1types.c

?? IBE是一種非對稱密碼技術
?? C
?? 第 1 頁 / 共 3 頁
字號:
   */
  status = VoltDecodeTagAndLen (
    (VoltLibCtx *)0, encoding, length, &theTag, &lengthLen, &lenLo, &lenHi,
    sizeof (unsigned int));
  if (status != 0)
    return (0);

  valueLen = (unsigned int)lenLo;

  /* Is the encoding big enough for the alleged lengths?
   */
  totalLen = lengthLen + valueLen + 1;
  if (length < (long)totalLen)
    return (0);

  /* Make sure the tag is OCTET STRING or IMPLICIT (if necessary).
   */
  theTag = 4;
  if (tag != -1)
    theTag = aclass | tag;
  if (encoding[0] != (unsigned char)theTag)
    return (0);

  encoding += (1 + lengthLen);

  /* The OpenSSL engine requires moving the input pointer along.
   */
  (*input) += totalLen;

  /* If there is no algorithm object, just copy the data.
   */
  if (value->cipherObj == (VtAlgorithmObject)0)
  {
    /* If copy by ref, copy the addresses, if copy by value, allocate and
     * copy.
     */
    if ((value->vFlags & VOLT_ASN1_COPY_MASK) == VOLT_ASN1_COPY_DATA)
    {
      value->base.data = (unsigned char *)OPENSSL_malloc (valueLen);
      if (value->base.data == (unsigned char *)0)
        return (0);

      Asn1Memcpy (value->base.data, encoding, valueLen);
    }
    else
    {
      value->base.data = encoding;
    }

    value->base.length = (int)valueLen;

    return (1);
  }

  /* How long is the decrypted data.
   */
  status = VtDecryptFinal (
    value->cipherObj, value->random, encoding, valueLen,
    (unsigned char *)0, 0, &decryptLen);
  if (status != VT_ERROR_BUFFER_TOO_SMALL)
    return (0);

  /* At this point we can't copy by reference. Go ahead and allocate.
   * Set the vFlags.
   */
  if ((value->vFlags & VOLT_ASN1_COPY_MASK) != VOLT_ASN1_COPY_DATA)
  {
    value->vFlags ^= VOLT_ASN1_COPY_REFERENCE;
    value->vFlags |= VOLT_ASN1_COPY_DATA;
  }

  value->base.data = (unsigned char *)OPENSSL_malloc (decryptLen);
  if (value->base.data == (unsigned char *)0)
    return (0);

  status = VtDecryptFinal (
    value->cipherObj, value->random, encoding, valueLen,
    value->base.data, decryptLen, &decryptLen);
  if (status != 0)
    return (0);

  value->base.length = (int)decryptLen;

  /* Clear the context.
   */
  ctx->valid = 0;
  ctx->ret = 0;
  ctx->plen = 0;
  ctx->ptag = 0;
  ctx->pclass = 0;
  ctx->hdrlen = 0;

  return (1);
}

int Asn1EncryptedContentEncode (
   ASN1_VALUE **obj,
   unsigned char **output,
   const ASN1_ITEM *asn1Item,
   int tag,
   int aclass
   )
{
  int status;
  unsigned int valueLen, totalLen, theTag;
  Asn1EncryptedContent *value;  
  unsigned char *encoding;

  if (obj == (ASN1_VALUE **)0)
    return (0);
  if (*obj == (ASN1_VALUE *)0)
    return (0);

  value = (Asn1EncryptedContent *)(*obj);

  value->vFlags |= VOLT_ASN1_COPY_FLAG_FIXED;

  /* We can call this if the object is SET or has been initialized for
   * Encryption/Encoding. Use totalLen as a temp variable.
   */
  totalLen = VOLT_ENC_CONTENT_STATE_MASK & value->state;
  if ( (totalLen == VOLT_ENC_CONTENT_STATE_CREATE) ||
       (totalLen == VOLT_ENC_CONTENT_STATE_INIT_D) )
    return (0);

  if (totalLen == VOLT_ENC_CONTENT_STATE_SET)
  {
    status = VtEncryptInit (value->cipherObj, value->keyObj);
    if (status != 0)
      return (0);
    value->state ^= totalLen;
    value->state |= VOLT_ENC_CONTENT_STATE_INIT_E;
  }

  /* How big will the output be?
   */
  status = VtEncryptFinal (
    value->cipherObj, value->random, value->base.data,
    (unsigned int)(value->base.length), (unsigned char *)0, 0, &valueLen);
  if (status != VT_ERROR_BUFFER_TOO_SMALL)
    return (0);

  totalLen =
    valueLen + VoltDetermineDerLengthLen ((UInt32)valueLen, (UInt32)0) + 1;

  /* If there's no pointer to output, just indicate the length.
   */
  if (output == (unsigned char **)0)
    return (totalLen);

  /* If the caller supplied no buffer, don't do anything.
   */
  if (*output == (unsigned char *)0)
    return (0);

  /* If the caller supplied a pointer, but no buffer, don't do anything.
   */
  if (*output == (unsigned char *)0)
    return (0);

  encoding = *output;

  /* Write the tag and len. The tag is OCTET STRING, unless IMPLICIT.
   */
  theTag = 4;
  if (tag != -1)
    theTag = aclass | tag;
  encoding += VoltWriteDerTagAndLen (
    encoding, theTag, (UInt32)valueLen, (UInt32)0);

  /* Encrypt into the buffer.
   */
  status = VtEncryptFinal (
    value->cipherObj, value->random, value->base.data,
    (unsigned int)(value->base.length), encoding, valueLen, &valueLen);
  if (status != 0)
    return (0);

  /* The OpenSSL engine requires moving the output pointer along.
   */
  (*output) += totalLen;
  return (totalLen);
}

int Asn1CommonNew (
   ASN1_VALUE **obj,
   const ASN1_ITEM *asn1Item
   )
{
  VoltAsn1String *retVal = (VoltAsn1String *)0;

  if (obj == (ASN1_VALUE **)0)
    return (0);
  *obj = (ASN1_VALUE *)0;

  /* Build an empty VoltAsn1String struct.
   */
  retVal = (VoltAsn1String *)OPENSSL_malloc (sizeof (VoltAsn1String));
  if (retVal == (VoltAsn1String *)0)
    return (0);

  retVal->base.length = 0;
  retVal->base.type = 0;
  retVal->base.data = (unsigned char *)0;
  retVal->base.flags = 0;
  retVal->vFlags = 0;
  *obj = (ASN1_VALUE *)retVal;

  return (1);
}

void Asn1CommonFree (
   ASN1_VALUE **obj,
   const ASN1_ITEM *asn1Item
   )
{
  VoltAsn1String *value;

  /* Anything to free?
   */
  if (obj == (ASN1_VALUE **)0)
    return;
  if (*obj == (ASN1_VALUE *)0)
    return;

  value = (VoltAsn1String *)(*obj);

  /* If copy by value, overwrite and free.
   */
  if ((value->vFlags & VOLT_ASN1_COPY_MASK) == VOLT_ASN1_COPY_DATA)
  {
    if (value->base.data != (unsigned char *)0)
    {
      Asn1Memset (value->base.data, 0, (unsigned int)(value->base.length));
      OPENSSL_free (value->base.data);
    }
  }
  OPENSSL_free (value);
  *obj = (ASN1_VALUE *)0;
}

void Asn1CommonClear (
   ASN1_VALUE **obj,
   const ASN1_ITEM *asn1Item
   )
{
  VoltAsn1String *value;

  /* Anything to free?
   */
  if (obj == (ASN1_VALUE **)0)
    return;
  if (*obj == (ASN1_VALUE *)0)
    return;

  value = (VoltAsn1String *)(*obj);

  /* If copy by value, overwrite and free.
   */
  if ((value->vFlags & VOLT_ASN1_COPY_MASK) == VOLT_ASN1_COPY_DATA)
  {
    if (value->base.data != (unsigned char *)0)
    {
      Asn1Memset (value->base.data, 0, (unsigned int)(value->base.length));
      OPENSSL_free (value->base.data);
    }
  }
  value->base.data = (unsigned char *)0;
  value->base.length = 0;
}

int Asn1CommonSet (
   VoltAsn1String *value,
   unsigned char *data,
   unsigned int len
   )
{
  if (value == (VoltAsn1String *)0)
    return (0);

  Asn1CommonClear ((ASN1_VALUE **)&value, (const ASN1_ITEM *)0);
  value->vFlags |= VOLT_ASN1_COPY_FLAG_FIXED;

  if ( (data == (unsigned char *)0) || (len == 0) )
    return (1);

  /* If copy by ref, copy the addresses, if copy by value, allocate and
   * copy.
   */
  if ((value->vFlags & VOLT_ASN1_COPY_MASK) == VOLT_ASN1_COPY_DATA)
  {
    value->base.data = (unsigned char *)OPENSSL_malloc (len);
    if (value->base.data == (unsigned char *)0)
      return (0);
    Asn1Memcpy (value->base.data, data, len);
  }
  else
  {
    value->base.data = data;
  }
  value->base.length = len;

  return (1);
}

int Asn1CommonDecode (
   ASN1_VALUE **obj,
   const unsigned char **input,
   long length,
   const ASN1_ITEM *asn1Item,
   int tag,
   int aclass,
   char opt,
   ASN1_TLC *ctx
   )
{
  int status, asn1Ret;
  unsigned int lengthLen, valueLen, totalLen, theTag;
  UInt32 lenLo, lenHi;
  VoltAsn1String *value = (VoltAsn1String *)0;
  unsigned char *encoding = (unsigned char *)(*input);

  if (obj == (ASN1_VALUE **)0)
    return (0);
  if (*obj != (ASN1_VALUE *)0)
    value = (VoltAsn1String *)(*obj);

  Asn1CommonClear (obj, asn1Item);

  /* What are the lengths?
   */
  status = VoltDecodeTagAndLen (
    (VoltLibCtx *)0, encoding, length, &theTag, &lengthLen, &lenLo, &lenHi,
    sizeof (unsigned int));
  if (status != 0)
    return (0);

  valueLen = (unsigned int)lenLo;

  /* Is the encoding big enough for the alleged lengths?
   */
  totalLen = lengthLen + valueLen + 1;
  if (length < (long)totalLen)
    return (0);

  /* The OpenSSL engine requires moving the input pointer along.
   */
  (*input) += totalLen;

  /* If there is an underlying type, copy only the value. If not, copy
   * everything.
   */
  if (asn1Item->utype != 0)
  {
    /* Make sure the tag in the encoding is what we're expecting.
     */
    theTag = (unsigned int)(asn1Item->utype);
    if (tag != -1)
      theTag = aclass | tag;
    if (encoding[0] != (unsigned char)theTag)
      return (0);
    totalLen = valueLen;
    encoding += (1 + lengthLen);
  }

  /* Is there an object? If not, create one.
   */
  if (value == (VoltAsn1String *)0)
  {
    asn1Ret = Asn1CommonNew ((ASN1_VALUE **)&value, asn1Item);
    if (asn1Ret != 1)
      return (0);
    *obj = (ASN1_VALUE *)value;
  }
  value->vFlags |= VOLT_ASN1_COPY_FLAG_FIXED;

  /* If copy by ref, copy the addresses, if copy by value, allocate and
   * copy.
   */
  if ((value->vFlags & VOLT_ASN1_COPY_MASK) == VOLT_ASN1_COPY_DATA)
  {
    /* Copy into the object.
     */
    value->base.data = (unsigned char *)OPENSSL_malloc (totalLen);
    if (value->base.data == (unsigned char *)0)
      return (0);

    Asn1Memcpy (value->base.data, encoding, totalLen);
  }
  else
  {
    value->base.data = encoding;
  }

  value->base.length = (int)totalLen;

  /* Clear the context.
   */
  ctx->valid = 0;
  ctx->ret = 0;
  ctx->plen = 0;
  ctx->ptag = 0;
  ctx->pclass = 0;
  ctx->hdrlen = 0;

  return (1);
}

int Asn1CommonEncode (
   ASN1_VALUE **obj,
   unsigned char **output,
   const ASN1_ITEM *asn1Item,
   int tag,
   int aclass
   )
{
  unsigned int totalLen, theTag;
  VoltAsn1String *value = (VoltAsn1String *)(*obj);  
  unsigned char *encoding;

  value->vFlags |= VOLT_ASN1_COPY_FLAG_FIXED;

  /* If there is an underlying type, encode the tag and length.
   */
  totalLen = (unsigned int)(value->base.length);
  if (asn1Item->utype != 0)
  {
    totalLen += VoltDetermineDerLengthLen ((UInt32)totalLen, (UInt32)0) + 1;
    /* Is this implicit?
     */
    theTag = (unsigned int)(asn1Item->utype);
    if (tag != -1)
      theTag = aclass | tag;
  }

  /* If there's no pointer to output, just indicate the length.
   */
  if (output == (unsigned char **)0)
    return (totalLen);

  /* If the caller supplied no buffer, don't do anything.
   */
  if (*output == (unsigned char *)0)
    return (0);

  encoding = *output;

  /* If there is an underlying type, write the tag and len.
   */
  if (asn1Item->utype != 0)
    encoding += VoltWriteDerTagAndLen (
      encoding, theTag, (UInt32)(value->base.length), (UInt32)0);

  /* Simply copy the data into the buffer.
   */
  if ( (value->base.data != (unsigned char *)0) && (value->base.length != 0) )
    Asn1Memcpy (
      encoding, value->base.data, (unsigned int)(value->base.length));

  /* The OpenSSL engine requires moving the output pointer along.
   */
  (*output) += totalLen;
  return (totalLen);
}

void Asn1SetObjectCopyFlag (
   VoltAsn1String *asn1Obj,
   unsigned int copyFlag
   )
{
  unsigned int theFlag;

  /* Examine only the COPY bits.
   */
  theFlag = copyFlag & VOLT_ASN1_COPY_MASK;

  if (asn1Obj == (VoltAsn1String *)0)
    return;

  /* If the vFlags says the copy flag is FIXED, don't do anything.
   */
  if ((asn1Obj->vFlags & VOLT_ASN1_COPY_FLAG_FIXED) != 0)
    return;

  theFlag = VOLT_ASN1_COPY_DATA;
  if (copyFlag != VOLT_ASN1_COPY_DATA)
    theFlag = VOLT_ASN1_COPY_REFERENCE;

  asn1Obj->vFlags |= theFlag;
}

void Asn1Memcpy (
   unsigned char *dest,
   unsigned char *source,
   unsigned int count
   )
{
  unsigned int index;

  if ( (source == (unsigned char *)0) ||
    (dest == (unsigned char *)0) ||
    (count == 0) )
    return;

  /* Not the most efficient, but portable (no system calls).
   */
  for (index = 0; index < count; ++index)
    dest[index] = source[index];
}

void Asn1Memset (
   unsigned char *dest,
   unsigned int value,
   unsigned int count
   )
{
  unsigned int index;
  unsigned char val;

  if ( (dest == (unsigned char *)0) ||
    (count == 0) )
    return;

  /* Not the most efficient, but portable (no system calls).
   */
  val = (unsigned char)value;
  for (index = 0; index < count; ++index)
    dest[index] = val;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人电影天堂| 欧美精品一二三四| 成人激情小说网站| 91在线观看免费视频| 粉嫩高潮美女一区二区三区| 成人av在线资源网站| 91黄色小视频| 欧美一区2区视频在线观看| 日韩你懂的电影在线观看| 日韩精品一区在线| 亚洲欧美色图小说| 久草这里只有精品视频| 91麻豆精品秘密| 日韩午夜精品视频| 亚洲丝袜另类动漫二区| 日韩精品成人一区二区三区| 国产麻豆91精品| 91精品国产91久久久久久一区二区| 久久久久久久久久久久久女国产乱 | av在线一区二区三区| 337p亚洲精品色噜噜狠狠| 日本一区二区三区在线不卡| 三级一区在线视频先锋| 91麻豆123| 国产婷婷色一区二区三区| 视频一区二区欧美| 91高清视频免费看| 亚洲欧美偷拍三级| 成人高清视频在线观看| 2020国产精品久久精品美国| 日韩黄色免费网站| 欧美美女一区二区在线观看| 亚洲情趣在线观看| 91热门视频在线观看| 亚洲视频一区在线观看| 成人黄色免费短视频| 国产欧美日本一区视频| 国产99久久久国产精品免费看 | 男女激情视频一区| 欧美一区二区三区喷汁尤物| 视频一区视频二区中文| 678五月天丁香亚洲综合网| 日韩电影在线看| 久久一夜天堂av一区二区三区| 国产精品美女久久久久久2018| 97成人超碰视| 一区二区久久久| 欧美一区二区私人影院日本| 久热成人在线视频| 亚洲丝袜自拍清纯另类| 制服丝袜亚洲色图| 17c精品麻豆一区二区免费| 福利91精品一区二区三区| 中文字幕欧美一| 欧美性生活大片视频| 日韩和欧美一区二区| 精品国产乱码久久久久久图片 | 欧美日韩免费一区二区三区视频| 天堂蜜桃91精品| 国产精品萝li| 日韩精品在线一区二区| 国产福利不卡视频| 日韩av中文在线观看| 中文字幕在线观看一区| 欧美成人三级在线| 欧美精品在线观看播放| av不卡在线观看| 国产91色综合久久免费分享| 午夜影院久久久| 一区二区三区av电影| 国产精品美女久久久久aⅴ| 欧美mv和日韩mv国产网站| 99国产精品99久久久久久| 国产乱子伦视频一区二区三区| 日本大胆欧美人术艺术动态| 亚洲一区二区五区| 亚洲精品综合在线| 国产精品久久久99| 中文字幕欧美区| 国产欧美精品一区二区三区四区| 日韩一级片在线播放| 欧美日韩www| 欧美精品777| 精品福利一区二区三区免费视频| 日韩欧美激情四射| 欧美精品一区二区三区蜜桃| 国产香蕉久久精品综合网| 欧美不卡123| 欧美成人精品3d动漫h| 日韩欧美二区三区| 国产日韩欧美亚洲| 亚洲欧洲av色图| 亚洲高清免费一级二级三级| 日韩电影在线免费观看| 精品一区二区在线免费观看| 成人一级片在线观看| 色综合久久久久| 精品999在线播放| 欧美精品一区二区三区视频| 国产精品另类一区| 日韩成人一级大片| 91在线国产福利| 欧美成人高清电影在线| 亚洲日本电影在线| 大尺度一区二区| 欧美日韩色一区| 欧美国产综合一区二区| 男人操女人的视频在线观看欧美| 99久久伊人网影院| 日韩美女视频在线| 婷婷中文字幕综合| 色www精品视频在线观看| 久久久久国产一区二区三区四区| 亚洲精品第一国产综合野| 国产ts人妖一区二区| 精品国产三级电影在线观看| 日韩国产在线观看| 7777精品伊人久久久大香线蕉完整版 | 日韩欧美视频一区| 美脚の诱脚舐め脚责91| 欧美一区三区二区| 美腿丝袜一区二区三区| 日韩一级欧美一级| 国产一区在线观看麻豆| 亚洲精品一区二区三区四区高清| 亚洲国产一区二区a毛片| 在线观看网站黄不卡| 一区二区三区 在线观看视频| 91蜜桃在线观看| 亚洲一区二区三区视频在线播放| 91蝌蚪porny九色| 午夜精品福利在线| 日韩三级免费观看| 国产高清在线观看免费不卡| 国产精品欧美一级免费| 91国产免费观看| 久久99国内精品| 亚洲欧美日本韩国| 91精品国产麻豆国产自产在线| 青草国产精品久久久久久| 国产亲近乱来精品视频| 欧美亚洲动漫精品| 国产一区二区三区免费播放| 国产精品久久久久久久久搜平片| 欧美亚洲高清一区二区三区不卡| 热久久久久久久| 亚洲欧美怡红院| 精品av久久707| 欧美老人xxxx18| 91视频在线观看| 国产麻豆成人精品| 午夜久久久久久| 亚洲色图视频免费播放| 精品久久久久久久久久久久久久久 | 日韩精品成人一区二区三区| 久久精品日产第一区二区三区高清版 | 国产欧美日产一区| 国产精品免费观看视频| 日韩欧美激情一区| 日韩午夜电影av| 欧美一区二区精品在线| 欧美四级电影网| 欧美专区日韩专区| 在线欧美一区二区| 91偷拍与自偷拍精品| 99re这里只有精品6| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 亚洲综合丁香婷婷六月香| 中文字幕制服丝袜一区二区三区| 久久亚洲私人国产精品va媚药| 日韩午夜av一区| 国产亚洲精品7777| 亚洲国产经典视频| 亚洲精品网站在线观看| 136国产福利精品导航| 亚洲视频在线一区二区| 亚洲精品免费在线| 亚洲国产三级在线| 蜜桃久久久久久久| 国产精品白丝jk黑袜喷水| 成人av资源下载| 日韩免费在线观看| www激情久久| 亚洲激情成人在线| 美国三级日本三级久久99| 精东粉嫩av免费一区二区三区| 久久爱www久久做| 成人禁用看黄a在线| 在线观看免费亚洲| 26uuu亚洲综合色欧美 | 99国产精品一区| 91精品婷婷国产综合久久| 中文字幕乱码一区二区免费| 亚洲高清在线视频| 99精品视频在线观看免费| 91精品国产综合久久蜜臀| 中文字幕一区二区三区av | 91精品啪在线观看国产60岁| 欧美激情一区二区三区全黄| 性久久久久久久|