⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icserver.c

📁 IBE是一种非对称密码技术
💻 C
📖 第 1 页 / 共 2 页
字号:
        if (node->children[j]->node_type != IC_XML_NODE_TAG)
          continue;

        if (Z2Strcmp(node->children[j]->tag_name, "vs:privateKey") == 0)
        {
          privKeyNode = node->children[j];
        }
        else if (Z2Strcmp(node->children[j]->tag_name, "vs:authToken") == 0)
        {
          authTokenNode = node->children[j];
        }
        else if (Z2Strcmp(node->children[j]->tag_name, "vs:cert") == 0)
        {
          certNode = node->children[j];
        }
        else if (Z2Strcmp(node->children[j]->tag_name, "vs:location") == 0)
        {
          VOLT_SET_FNCT_LINE (fnctLine)
          icTableGet (
            node->children[j]->attributes, "url", &url, libCtx);
          if (url == (char *)0)
            goto cleanup1;
          else
          {
            VOLT_SET_ERROR_TYPE (errorType, 0)
            VOLT_SET_FNCT_LINE (fnctLine)
            status = Z2Strdup (url, &(responseData->url));
            if (status != 0)
              goto cleanup1;
          }
        } 
      }
    }
  }
  
  if (authTokenNode != (icXmlNode *) 0)
  {
    /* Should have one TEXT child
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    if ( (authTokenNode->num_children != 1) ||
         (authTokenNode->children[0]->node_type != IC_XML_NODE_TEXT) )
      goto cleanup1;
    
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = Z2Strdup (
      authTokenNode->children[0]->text, &(responseData->authToken));
    if (status != 0)
      goto cleanup1;
  }

  if (privKeyNode != (icXmlNode *) 0)
  {
    /* Should have one TEXT child
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    if ( (privKeyNode->num_children != 1) ||
         (privKeyNode->children[0]->node_type != IC_XML_NODE_TEXT) )
      goto cleanup1;
    
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = icBase64Decode (
      &(responseData->privateKey), &(responseData->privateKeyLen),
      privKeyNode->children[0]->text, -1, libCtx);
    if (status != 0)
       goto cleanup1;
   }

  if (certNode != (icXmlNode *) 0)
  {
    /* Should have one TEXT child
     */
    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    if ( (certNode->num_children != 1) ||
         (certNode->children[0]->node_type != IC_XML_NODE_TEXT) )
      goto cleanup1;
    
    VOLT_SET_ERROR_TYPE (errorType, 0)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = icBase64Decode (
      &certDer, &len, certNode->children[0]->text, -1, libCtx);
    if (status != 0)
      goto cleanup1;

    VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_ENCODING;
    ptr = certDer;
    responseData->asn1Cert = d2i_Asn1X509Cert ((void *)0, &ptr, len);
    if (responseData->asn1Cert == (Asn1X509Cert *)0)
      goto cleanup1;
  }

  /* Consistency check on responseData
   */
  status = 0;

  VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
  VOLT_SET_FNCT_LINE (fnctLine)
  if ( ((*code == IC_SERVER_KEY_RETURNED_RESPONSE) &&
        (responseData->privateKey == (void*) 0)) ||
       ((*code == IC_SERVER_TOKEN_RETURNED_RESPONSE) &&
        (responseData->authToken == (void*) 0)) ||
       ((*code == IC_SERVER_TOKEN_RETURNED_RESPONSE) &&
        (responseData->id == (void*) 0)) ||
       ((*code == IC_SERVER_GOTO_URL_RESPONSE) &&
        (responseData->url == (void*) 0)) )
    status = VT_ERROR_INVALID_INPUT;

cleanup1:

  icXmlParserFree (&parser, libCtx);
  icInputStreamFree (&bufStream, libCtx);
  if (certDer != (unsigned char *)0)
    Z2Free (certDer);

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

  if (responseData->authToken != (char *)0)
  {
    Z2Free (responseData->authToken);
    responseData->authToken = (char *)0;
  }
  if (responseData->privateKey != (unsigned char *)0)
  {
    Z2Free (responseData->privateKey);
    responseData->privateKey = (unsigned char *)0;
  }
  if (responseData->id != (unsigned char *)0)
  {
    Z2Free (responseData->id);
    responseData->id = (unsigned char *)0;
  }
  if (responseData->asn1Cert != (Asn1X509Cert *)0)
  {
    Asn1X509Cert_free (responseData->asn1Cert);
    responseData->asn1Cert = (Asn1X509Cert *)0;
  }
  if (responseData->url != (char *)0)
  {
    Z2Free (responseData->url);
    responseData->url = (char *)0;
  }

  VOLT_LOG_ERROR (
    (VtLibCtx)libCtx, status, errorType, fnctLine,
    "icParseServerResponse", (char *)0)

  return (status);
}

int icDistrictToServer (
   unsigned char *district,
   char **ret1,
   VoltLibCtx *libCtx
   )
{
  int status;
  unsigned int defNameLen, domainLen;
  char *domain = (char *)0;
  char *ret = (char *)0;
  char *temp, *dot;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *ret1 = (char *)0;
  dot = ".";

  VOLT_SET_ERROR_TYPE (errorType, 0)
  VOLT_SET_FNCT_LINE (fnctLine)
  status = icGetDomainFromDistrict (district, &domain, libCtx);
  if (status != 0)
    goto cleanup2;

  defNameLen = Z2Strlen (IC_SERVER_DEFAULT_SERVER_NAME);
  domainLen = Z2Strlen (domain);

  VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
  VOLT_SET_FNCT_LINE (fnctLine)
  status = VT_ERROR_MEMORY;
  ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
  if (ret == (char *)0)
    goto cleanup2;

  temp = ret;
  Z2Memcpy (temp, IC_SERVER_DEFAULT_SERVER_NAME, defNameLen);
  temp += defNameLen;
  Z2Memcpy (temp, dot, 1);
  temp++;
  Z2Memcpy (temp, domain, domainLen + 1);

  *ret1 = ret;

  status = 0;

cleanup2:

  if (domain != (char *)0)
    Z2Free (domain);

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

  return (status);
}

int icDistrictToParameterServer (
   unsigned char *district,
   char **ret1,
   VoltLibCtx *libCtx
   )
{
  int status;
  unsigned int defNameLen, domainLen;
  char *domain = (char *)0;
  char *temp, *ret, *dot;
  VOLT_DECLARE_ERROR_TYPE (errorType)
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *ret1 = (char *)0;
  dot = ".";

  VOLT_SET_ERROR_TYPE (errorType, 0)
  VOLT_SET_FNCT_LINE (fnctLine)
  status = icGetDomainFromDistrict (district, &domain, libCtx);
  if (status != 0)
    goto cleanup3;

  defNameLen = Z2Strlen(IC_SERVER_DEFAULT_PARAMS_SERVER_NAME);
  domainLen = Z2Strlen (domain);

  VOLT_SET_ERROR_TYPE (errorType, VT_ERROR_TYPE_PRIMARY)
  VOLT_SET_FNCT_LINE (fnctLine)
  status = VT_ERROR_MEMORY;
  ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
  if (ret == (char *)0)
    goto cleanup3;

  temp = ret;
  Z2Memcpy (temp, IC_SERVER_DEFAULT_PARAMS_SERVER_NAME, defNameLen);
  temp += defNameLen;
  Z2Memcpy (temp, dot, 1);
  temp++;
  Z2Memcpy (temp, domain, domainLen + 1);

  *ret1 = ret;

  status = 0;

cleanup3:

  if (domain != (char *)0)
    Z2Free (domain);

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

  return (status);
}

int icDomainToServer (
   unsigned char *domain,
   char **ret1,
   VoltLibCtx *libCtx
   )
{
  int status;
  unsigned int defNameLen, domainLen;
  char *ret = (char *)0;
  char *nullChar, *temp;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *ret1 = (char *)0;
  nullChar = "\0";

  defNameLen = Z2Strlen (IC_SERVER_DEFAULT_SERVER_NAME);
  domainLen = Z2Strlen (domain);

  VOLT_SET_FNCT_LINE (fnctLine)
  status = VT_ERROR_MEMORY;
  ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
  if (ret == (char *)0)
    goto errorcode1;

  temp = ret;
  Z2Memcpy (temp, IC_SERVER_DEFAULT_SERVER_NAME, defNameLen);
  temp += defNameLen;
  Z2Memcpy (temp, nullChar, 1);
  temp++;
  Z2Memcpy (temp, domain, domainLen + 1);

  *ret1 = ret;

  status = 0;

errorcode1:

  VOLT_LOG_ERROR_COMPARE (
    status, (VtLibCtx)libCtx, status, VT_ERROR_TYPE_PRIMARY, fnctLine,
    "icDomainToServer", (char *)0)

  return (status);
}

int icDomainToParameterServer (
   unsigned char *domain,
   char **ret1,
   VoltLibCtx *libCtx
   )
{
  int status;
  unsigned int defNameLen, domainLen;
  char *ret = (char *)0;
  char *dot, *temp;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *ret1 = (char *)0;
  dot = ".";

  defNameLen = Z2Strlen (IC_SERVER_DEFAULT_PARAMS_SERVER_NAME);
  domainLen = Z2Strlen (domain);

  VOLT_SET_FNCT_LINE (fnctLine)
  status = VT_ERROR_MEMORY;
  ret = (char *)Z3Malloc (defNameLen + domainLen + 2);
  if (ret == (char*) 0)
    goto errorcode;

  temp = ret;

  Z2Memcpy (temp, IC_SERVER_DEFAULT_PARAMS_SERVER_NAME, defNameLen);
  temp += defNameLen;
  Z2Memcpy (temp, dot, 1);
  temp++;
  Z2Memcpy (temp, domain, domainLen + 1);

  *ret1 = ret;

  status = 0;

errorcode:

  VOLT_LOG_ERROR_COMPARE (
    status, (VtLibCtx)libCtx, status, VT_ERROR_TYPE_PRIMARY, fnctLine,
    "icDomainToParameterServer", (char *)0)

  return (status);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -