typedef struct chunk_t chunk_t;
struct chunk_t
{
  unsigned char *ptr;
  long unsigned int len;
};
extern chunk_t asn1_wrap (chunk_t c, ...);
typedef struct linked_list_t linked_list_t;
chunk_t ietfAttr_list_encode (linked_list_t * list);
extern linked_list_t *groups;
static unsigned char ASN1_group_oid_str[] = {
    0x06
};
static const chunk_t ASN1_group_oid = {
  ASN1_group_oid_str, sizeof (ASN1_group_oid_str)
};
static chunk_t
build_attribute_type (const chunk_t type, chunk_t content)
{
  return type;
}
static chunk_t
build_attributes (void)
{
  return asn1_wrap (build_attribute_type (ASN1_group_oid,
					  ietfAttr_list_encode (groups)));
}
void build_attr_cert (void)
{
  asn1_wrap (build_attributes ());
}
