Beispiel #1
0
int main(int argc, char const *argv[])
{
	long value;
	int ret, len, i;
	unsigned char *bitstr = "8";
	unsigned char buf2[16];
	unsigned char *buf = NULL, *p;
	ASN1_BIT_STRING *a, *q;
	a = ASN1_BIT_STRING_new();
	printf("len = %d\n", a->length);
	ASN1_BIT_STRING_set(a, bitstr, strlen(bitstr));

	len = i2d_ASN1_BIT_STRING(a, NULL);
	p = buf =malloc(sizeof(unsigned char) * len);
	len = i2d_ASN1_BIT_STRING(a, &buf);
	printf("after i2d der content len = %d\n", len);
	printf("len = %d\n", len);

	for (i = 0; i < len; ++i)
	{
		/* code */
		printf("%02x\n", p[i]);
	}
	printf("\n");

	q = d2i_ASN1_BIT_STRING(&a, &p, len);
	printf("after d2i length = %d\n", q->length);
	for (i = 0; i < q->length; ++i)
	{
		printf("%02x\t", q->data[i]);
	}
	printf("\n");
	ASN1_BIT_STRING_free(a);
	return 0;
}
Beispiel #2
0
int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass)
	{
	int ret,r,constructed;
	unsigned char *p;

	if (a == NULL)  return(0);

	if (tag == V_ASN1_BIT_STRING)
		return(i2d_ASN1_BIT_STRING(a,pp));
		
	ret=a->length;
	r=ASN1_object_size(0,ret,tag);
	if (pp == NULL) return(r);
	p= *pp;

	if ((tag == V_ASN1_SEQUENCE) || (tag == V_ASN1_SET))
		constructed=1;
	else
		constructed=0;
	ASN1_put_object(&p,constructed,ret,tag,xclass);
	memcpy(p,a->data,a->length);
	p+=a->length;
	*pp= p;
	return(r);
	}