2023-11-23 06:23:29 +03:00
/*
2007-08-29 17:07:03 +04:00
Unix SMB / CIFS implementation .
DATA BLOB
2011-06-10 16:59:23 +04:00
Copyright ( C ) Andrew Tridgell 2001
Copyright ( C ) Andrew Bartlett 2001
2007-08-29 17:07:03 +04:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 3 of the License , or
( at your option ) any later version .
2023-11-23 06:23:29 +03:00
2007-08-29 17:07:03 +04:00
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
2023-11-23 06:23:29 +03:00
2007-08-29 17:07:03 +04:00
You should have received a copy of the GNU General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
2023-11-23 06:23:29 +03:00
/* This is a public header file that is installed as part of Samba.
* If you remove any functions or change their signature , update
2008-04-01 18:18:31 +04:00
* the so version number . */
2007-08-29 17:07:03 +04:00
# ifndef _SAMBA_DATABLOB_H_
# define _SAMBA_DATABLOB_H_
2007-08-31 02:25:59 +04:00
# ifndef _PUBLIC_
# define _PUBLIC_
# endif
# include <talloc.h>
2014-09-22 13:31:23 +04:00
# include <stdbool.h>
2007-09-16 23:14:46 +04:00
# include <stdint.h>
2007-08-31 02:25:59 +04:00
2007-08-29 17:07:03 +04:00
/* used to hold an arbitrary blob of data */
typedef struct datablob {
uint8_t * data ;
size_t length ;
} DATA_BLOB ;
2007-08-31 02:25:59 +04:00
/* by making struct ldb_val and DATA_BLOB the same, we can simplify
a fair bit of code */
# define ldb_val datablob
2014-11-08 17:15:41 +03:00
# define data_blob(ptr, size) data_blob_named(ptr, size, "DATA_BLOB: " __location__)
# define data_blob_talloc(ctx, ptr, size) data_blob_talloc_named(ctx, ptr, size, "DATA_BLOB: " __location__)
# define data_blob_dup_talloc(ctx, blob) data_blob_talloc_named(ctx, (blob).data, (blob).length, "DATA_BLOB: " __location__)
2007-08-29 17:07:03 +04:00
/**
construct a data blob , must be freed with data_blob_free ( )
you can pass NULL for p and get a blank data blob
* */
_PUBLIC_ DATA_BLOB data_blob_named ( const void * p , size_t length , const char * name ) ;
/**
construct a data blob , using supplied TALLOC_CTX
* */
_PUBLIC_ DATA_BLOB data_blob_talloc_named ( TALLOC_CTX * mem_ctx , const void * p , size_t length , const char * name ) ;
/**
2023-11-23 06:23:29 +03:00
construct a zero data blob , using supplied TALLOC_CTX .
2007-08-29 17:07:03 +04:00
use this sparingly as it initialises data - better to initialise
yourself if you want specific data in the blob
* */
_PUBLIC_ DATA_BLOB data_blob_talloc_zero ( TALLOC_CTX * mem_ctx , size_t length ) ;
/**
free a data blob
* */
_PUBLIC_ void data_blob_free ( DATA_BLOB * d ) ;
/**
clear a DATA_BLOB ' s contents
* */
_PUBLIC_ void data_blob_clear ( DATA_BLOB * d ) ;
/**
free a data blob and clear its contents
* */
_PUBLIC_ void data_blob_clear_free ( DATA_BLOB * d ) ;
/**
check if two data blobs are equal
* */
_PUBLIC_ int data_blob_cmp ( const DATA_BLOB * d1 , const DATA_BLOB * d2 ) ;
2022-02-17 05:35:42 +03:00
/**
check if two data blobs are equal , where the time taken should not depend on the
contents of either blob .
* */
2022-05-11 02:39:14 +03:00
_PUBLIC_ bool data_blob_equal_const_time ( const DATA_BLOB * d1 , const DATA_BLOB * d2 ) ;
2022-02-17 05:35:42 +03:00
2007-08-29 17:07:03 +04:00
/**
print the data_blob as hex string
* */
2009-11-04 09:42:53 +03:00
_PUBLIC_ char * data_blob_hex_string_upper ( TALLOC_CTX * mem_ctx , const DATA_BLOB * blob ) ;
/**
print the data_blob as hex string
* */
_PUBLIC_ char * data_blob_hex_string_lower ( TALLOC_CTX * mem_ctx , const DATA_BLOB * blob ) ;
2007-08-29 17:07:03 +04:00
/**
useful for constructing data blobs in test suites , while
avoiding const warnings
* */
_PUBLIC_ DATA_BLOB data_blob_string_const ( const char * str ) ;
2008-10-13 07:20:26 +04:00
/**
useful for constructing data blobs in test suites , while
avoiding const warnings
2023-11-23 06:23:51 +03:00
includes the terminating null character ( as opposed to data_blob_string_const )
2008-10-13 07:20:26 +04:00
* */
_PUBLIC_ DATA_BLOB data_blob_string_const_null ( const char * str ) ;
2007-08-29 17:07:03 +04:00
/**
2023-11-23 06:23:29 +03:00
* Create a new data blob from const data
2007-08-29 17:07:03 +04:00
*/
_PUBLIC_ DATA_BLOB data_blob_const ( const void * p , size_t length ) ;
/**
realloc a data_blob
* */
_PUBLIC_ bool data_blob_realloc ( TALLOC_CTX * mem_ctx , DATA_BLOB * blob , size_t length ) ;
/**
append some data to a data blob
* */
_PUBLIC_ bool data_blob_append ( TALLOC_CTX * mem_ctx , DATA_BLOB * blob ,
const void * p , size_t length ) ;
2021-12-10 04:59:22 +03:00
/**
pad the length of a data blob to a multiple of
' pad ' . ' pad ' must be a power of two .
* */
_PUBLIC_ bool data_blob_pad ( TALLOC_CTX * mem_ctx , DATA_BLOB * blob ,
size_t pad ) ;
2008-10-12 03:46:15 +04:00
extern const DATA_BLOB data_blob_null ;
2007-08-29 17:07:03 +04:00
# endif /* _SAMBA_DATABLOB_H_ */