int OBJ_create(const char *oid, const char *sn, const char *ln)
  {
  int ok=0;
  ASN1_OBJECT *op=NULL;
  unsigned char *buf;
  int i;

  i=a2d_ASN1_OBJECT(NULL,0,oid,-1);
  if (i <= 0) return(0);

  if ((buf=(unsigned char *)OPENSSL_malloc(i)) == NULL)
    {
    OBJerr(OBJ_F_OBJ_CREATE,ERR_R_MALLOC_FAILURE);
    return(0);
    }
  i=a2d_ASN1_OBJECT(buf,i,oid,-1);
  if (i == 0)
    goto err;
  op=(ASN1_OBJECT *)ASN1_OBJECT_create(OBJ_new_nid(1),buf,i,sn,ln);
  if (op == NULL) 
    goto err;
  ok=OBJ_add_object(op);
err:
  ASN1_OBJECT_free(op);
  OPENSSL_free(buf);
  return(ok);
  }
Exemple #2
0
/* Create a new NID when we have no OID for that mechanism */
static int
t4_add_NID(char *sn, char *ln)
{
	ASN1_OBJECT	*o;
	int		nid;

	if ((o = ASN1_OBJECT_create(OBJ_new_nid(1), (unsigned char *)"",
	    1, sn, ln)) == NULL) {
		T4err(T4_F_ADD_NID, T4_R_ASN1_OBJECT_CREATE);
		return (0);
	}

	/* Will return NID_undef on error */
	nid = OBJ_add_object(o);
	ASN1_OBJECT_free(o);

	return (nid);
}