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

📄 encodeschema.c

📁 IBE是一种非对称密码技术
💻 C
字号:
/* Copyright 2003-2006, Voltage Security, all rights reserved.
 */
#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "idobj.h"
#include "idencode.h"
#include "errorctx.h"

/* Set up the OpenSSL ASN.1 template.
 */
ASN1_SEQUENCE (Asn1SchemaV2) =
{
  ASN1_SIMPLE (Asn1SchemaV2, oid, Asn1ObjectId),
  ASN1_SIMPLE (Asn1SchemaV2, value, ASN1_OCTET_STRING)
} ASN1_SEQUENCE_END (Asn1SchemaV2);

IMPLEMENT_ASN1_FUNCTIONS (Asn1SchemaV2)

int VoltEncodeV2SchemaAlloc (
   VoltLibCtx *libCtx,
   unsigned char *oid,
   unsigned int oidLen,
   unsigned char *encodedValue,
   unsigned int encodedValueLen,
   unsigned char **encodedSchema,
   unsigned int *encodedSchemaLen
   )
{
  int status, asn1Ret;
  unsigned int totalLen;
  Asn1SchemaV2 *v2Schema = (Asn1SchemaV2 *)0;
  unsigned char *buffer = (unsigned char *)0;
  unsigned char *temp;
  VOLT_DECLARE_FNCT_LINE (fnctLine)

  *encodedSchema = (unsigned char *)0;
  *encodedSchemaLen = 0;

  do
  {
    /* Create the struct.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    v2Schema = Asn1SchemaV2_new ();
    if (v2Schema == (Asn1SchemaV2 *)0)
      break;

    /* Set the fields.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    asn1Ret = Asn1ObjectId_set (v2Schema->oid, oid, oidLen);
    if (asn1Ret != 1)
      break;

    VOLT_SET_FNCT_LINE (fnctLine)
    asn1Ret = ASN1_OCTET_STRING_set (
      v2Schema->value, encodedValue, encodedValueLen);
    if (asn1Ret != 1)
      break;

    /* How big does the buffer need to be?
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    totalLen = i2d_Asn1SchemaV2 (v2Schema, (unsigned char **)0);
    if (totalLen == 0)
      break;

    /* Allocate the space.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_MEMORY;
    buffer = (unsigned char *)Z2Malloc (totalLen, 0);
    if (buffer == (unsigned char *)0)
      break;

    /* Encode into the buffer.
     */
    VOLT_SET_FNCT_LINE (fnctLine)
    status = VT_ERROR_INVALID_INPUT;
    temp = buffer;
    totalLen = i2d_Asn1SchemaV2 (v2Schema, &temp);
    if (totalLen == 0)
      break;

    /* If it worked, set the return.
     */
    *encodedSchema = buffer;
    *encodedSchemaLen = totalLen;
    status = 0;

  } while (0);

  if (v2Schema != (Asn1SchemaV2 *)0)
    Asn1SchemaV2_free (v2Schema);

  /* If successful, we're done.
   */
  if (status == 0)
    return (0);

  /* If there was an error, free up the memory we allocated.
   */
  if (buffer != (unsigned char *)0)
    Z2Free (buffer);

  VOLT_LOG_ERROR_INFO (
    libCtx, 0, status, 0, VT_ERROR_TYPE_PRIMARY,
    (char *)0, "VoltEncodeV2SchemaAlloc", fnctLine, (char *)0)

  return (status);
}

⌨️ 快捷键说明

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