asn1_error_code k5_asn1_encode_bytestring(asn1buf *buf, unsigned char *const *val, size_t len, size_t *len_out) { if (len > 0 && val == NULL) return ASN1_MISSING_FIELD; *len_out = len; return asn1buf_insert_octetstring(buf, len, *val); }
asn1_error_code asn1_encode_opaque(asn1buf *buf, unsigned int len, const void *val, unsigned int *retlen) { asn1_error_code retval; retval = asn1buf_insert_octetstring(buf, len, val); if (retval) return retval; *retlen = len; return 0; }
asn1_error_code k5_asn1_encode_bitstring(asn1buf *buf, unsigned char *const *val, size_t len, size_t *len_out) { asn1_error_code ret; ret = asn1buf_insert_octetstring(buf, len, *val); if (ret) return ret; *len_out = len + 1; return asn1buf_insert_octet(buf, '\0'); }
asn1_error_code asn1_encode_bitstring(asn1buf *buf, unsigned int len, const void *val, unsigned int *retlen) { asn1_error_code retval; unsigned int length; retval = asn1buf_insert_octetstring(buf, len, val); if (retval) return retval; retval = asn1buf_insert_octet(buf, 0); if (retval) return retval; retval = asn1_make_tag(buf, UNIVERSAL, PRIMITIVE, ASN1_BITSTRING, len+1, &length); if (retval) return retval; *retlen = len + 1 + length; return 0; }
static asn1_error_code encode_bytestring_with_tag(asn1buf *buf, unsigned int len, const void *val, int tag, unsigned int *retlen) { asn1_error_code retval; unsigned int length; if (len > 0 && val == 0) return ASN1_MISSING_FIELD; retval = asn1buf_insert_octetstring(buf, len, val); if (retval) return retval; retval = asn1_make_tag(buf, UNIVERSAL, PRIMITIVE, tag, len, &length); if (retval) return retval; *retlen = len + length; return 0; }