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; }
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); }