/*-
 * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
 * Redistribution and modifications are permitted subject to BSD license.
 */
#ifndef	_OCTET_STRING_H_
#define	_OCTET_STRING_H_

#include <constr_TYPE.h>

typedef struct OCTET_STRING {
	uint8_t *buf;	/* Buffer with consecutive OCTET_STRING bits */
	int size;	/* Size of the buffer */

	ber_dec_ctx_t _ber_dec_ctx;	/* Parsing across buffer boundaries */
} OCTET_STRING_t;

extern asn1_TYPE_descriptor_t asn1_DEF_OCTET_STRING;

ber_type_decoder_f OCTET_STRING_decode_ber;
der_type_encoder_f OCTET_STRING_encode_der;
asn_struct_print_f OCTET_STRING_print;
asn_struct_print_f OCTET_STRING_print_ascii;
asn_struct_free_f OCTET_STRING_free;

/***********************************
 * Some handy conversion routines. *
 ***********************************/

/*
 * This function clears the previous value of the OCTET STRING (if any)
 * and then allocates a new memory and makes s point to the newly allocated
 * memory. If size = -1, the size of the original string will be determined
 * using strlen(str).
 * If str equals to NULL, the function will silently clear the
 * current contents of the OCTET STRING.
 * Returns 0 if it was possible to perform operation, -1 otherwise.
 */
int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size);

/*
 * Allocate and fill the new OCTET STRING and return a pointer to the newly
 * allocated object. NULL is permitted in str: the function will just allocate
 * empty OCTET STRING.
 */
OCTET_STRING_t *OCTET_STRING_new_fromBuf(const char *str, int size);

/* Handy conversion from the C string into the OCTET STRING. */
#define	OCTET_STRING_fromString(s, str)	OCTET_STRING_fromBuf(s, str, -1);
#define	OCTET_STRING_fromString(s, str)	OCTET_STRING_fromBuf(s, str, -1);

#endif	/* _OCTET_STRING_H_ */
