/usr/include/afflib/afflib.h is in libafflib-dev 3.7.5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 | #ifndef _AFFLIB_H_
#define _AFFLIB_H_
/*
* afflib.h:
*
* This file describes the public AFFLIB interface.
* The interface to reading AFF files and Raw files.
*
* Copyright (c) 2005-2006
* Simson L. Garfinkel and Basis Technology, Inc.
* All rights reserved.
*
* This code is derrived from software contributed by
* Simson L. Garfinkel
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Simson L. Garfinkel
* and Basis Technology Corp.
* 4. Neither the name of Simson Garfinkel, Basis Technology, or other
* contributors to this program may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY SIMSON GARFINKEL, BASIS TECHNOLOGY,
* AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL SIMSON GARFINKEL, BAIS TECHNOLOGy,
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/* Figure out what kind of OS we are running on */
/* These are both needed; no need to bother with affconfig.h #defines */
#include <stdio.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#else
#ifdef _MSC_VER
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#endif
#endif
#include <sys/types.h>
#ifdef HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
#ifdef linux
/* Horrible lossage stuff for largefile support under Linux */
#define _LARGEFILE_SOURCE 1
#define _FILE_OFFSET_BITS 64
#endif
#ifdef HAVE_INTTYPES_H
#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS
#endif
#include <inttypes.h>
#else
#ifdef _MSC_VER
#define PRIu32 "I32u"
#endif
#endif
/** WIN32 is defined by the NMAKE makefile for Visual C++ under Windows and by mingw **/
#ifdef WIN32
#include <basetsd.h>
#include <io.h> // gets isatty
/* These aren't needed for mingw */
#if !defined(__MINGW_H)
#ifndef _UINT64_T_DECLARED
typedef unsigned __int64 uint64_t; /* 64-bit types Types */
#define _UINT64_T_DECLARED
#endif
#ifndef _INT64_T_DECLARED
typedef __int64 int64_t;
#define _INT64_T_DECLARED
#endif
#endif
#ifndef PRId64
#define PRId64 "I64d"
#endif
#ifndef PRIi64
#define PRIi64 "I64i"
#endif
#ifndef PRIu64
#define PRIu64 "I64u"
#endif
#endif
/** END OF WIN32 DEFINES **/
#define I64d PRIi64
#define I64u PRIu64
/* If our types still aren't defined, give some kind of error
*/
struct affcallback_info;
struct aff_pagebuf {
int64_t pagenum; // -1 means no page loaded
unsigned char *pagebuf; // where the data is; size is image_pagesize
size_t pagebuf_bytes; // number of bytes in the pagebuf that are valid.
uint32_t pagenum_valid:1; // buffer contains data
uint32_t pagebuf_valid:1; // buffer contains data
uint32_t pagebuf_dirty:1; // data was modified
int last; // when the page was last visited
};
struct af_vnode_info {
uint64_t imagesize; // size of this image
int pagesize; // what is the natural page size?
uint32_t supports_compression:1; // supports writing compressed segments
uint32_t has_pages:1; // does system support page segments?
uint32_t supports_metadata:1; // does it support metadata?
uint32_t is_raw:1; // file is raw
uint32_t use_eof:1; // should we use the EOF flag?
uint32_t at_eof:1; // are we at the EOF?
uint32_t changable_pagesize:1; // pagesize can be changed at any time
uint32_t changable_sectorsize:1; // sectorsize can be changed at any time
uint32_t cannot_decrypt:1; // encrypted pages cannot be decrypted becuase passphrase is invalid
uint32_t segment_count_total;
uint32_t page_count_total;
uint32_t segment_count_signed;
uint32_t segment_count_encrypted;
uint32_t page_count_encrypted;
}; //
/* All of this stuff should be hidden inside a single private structure... */
typedef struct _AFFILE AFFILE;
/* The information that is provided in the aff callback */
struct affcallback_info {
int info_version; // version number for this segment
AFFILE *af; // v1: the AFFILE responsibile for the callback
int phase; // v1: 1 = before compress; 2 = after compressing;
// 3 = before writing; 4 = after writing
int64_t pagenum; // v1: page number being written
int bytes_to_write; // v1: >0 if we are going to write bytes
int bytes_written; // v1: >0 if bytes were written
int compressed; // v1: >0 if bytes were/will be compressed
int compression_alg; // v1: compression algorithm
int compression_level; // v1: compression level
};
/* Utility Functions */
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __never_defined__
}
#endif
/****************************************************************
***
*** Intended user AFF interface
***
****************************************************************/
const char * af_version(void); // returns AFF Version Number
/* af_file stream functions */
AFFILE *af_open(const char *filename,int flags,int mode);
AFFILE *af_freopen(FILE *file); // reopen a raw file as an AFFILE
AFFILE *af_popen(const char *command,const char *type); // no need to use pclose(); af_close() is fine
int af_close(AFFILE *af);
void af_set_error_reporter(AFFILE *af,void (*reporter)(const char *fmt,...));
void af_stats(AFFILE *af,FILE *f); // print stats to f
void af_set_cachesize(AFFILE *af,int max); // how much memory can the cache use?
int af_vstat(AFFILE *af,struct af_vnode_info *vni); // does the stat
void af_perror(const char *fname); // print the error string to stderr
void af_err(int code,const char *fname,...); // like err(), but will also print AFF-specific errors
/* Generic set/get option routines; this replaces individual options in previous implementations.
* af==0 to set global options. Return the previous value.
*/
int af_set_option(AFFILE *af,int option,int value);
#define AF_OPTION_AUTO_ENCRYPT 1 // 1 = auto-encrypt
#define AF_OPTION_AUTO_DECRYPT 2 // 1 = auto-decrypt
// The following are not implemented yet
#define AF_OPTION_PIECEWISE_MD5 3 // 1 = automatically write pagen_md5 segments
#define AF_OPTION_PIECEWISE_SHA1 4 // 1 = automatically write pagen_md5 segments
#define AF_OPTION_PIECEWISE_SHA256 5 // 1 = automatically write pagen_md5 segments
#define AF_OPTION_DISABLE_RDLOCK 6 // 1 = do not read lock, but report that it should have locked.
/* Special AFOPEN flags for af_open_with */
#define AF_OPEN_PRIMITIVE (1<<31) // only open primtive, not compound files
#define AF_BADBLOCK_FILL (1<<30) // fill unallocated (sparse) with BADBLOCK flag
#define AF_HALF_OPEN (1<<29) // return af before calling af->v->open;
#define AF_NO_CRYPTO (1<<28) // disable encryption layer
/* navigating within the data segments as if they were a single file */
#ifdef _WIN32
SSIZE_T af_read(AFFILE *af,unsigned char *buf,SSIZE_T count);
#else
ssize_t af_read(AFFILE *af,unsigned char *buf,ssize_t count);
#endif
uint64_t af_seek(AFFILE *af,int64_t pos,int whence); // returns new position
uint64_t af_tell(AFFILE *af);
int af_eof(AFFILE *af); // is the virtual file at the end?
/* Additional routines for writing */
void af_set_callback(AFFILE *af, void (*cb)(struct affcallback_info *acbi));
void af_enable_compression(AFFILE *af,int type,int level); // set/gunset compression for writing
int af_compression_type(AFFILE *af);
int af_write(AFFILE *af,unsigned char *buf,size_t count);
const unsigned char *af_badflag(AFFILE *af); // return the pattern used to identify bad sectors
int af_is_badsector(AFFILE *af,const unsigned char *buf); // 0 if not, 1 if it is, -1 if error
/* Misc. Functions */
const char *af_ext(const char *filename); // return the extension of str including the dot
int af_ext_is(const char *filename,const char *ext);
const char *af_filename(AFFILE *af); // returns the filename of an open stream.
int af_identify(AFFILE *af); // returns type of AFFILE pointer
/* Accessor Functions */
int64_t af_get_imagesize(AFFILE *af); // byte # of last mapped byte in image, or size of device;
// returns -1 if error
int af_get_pagesize(AFFILE *af); // returns page size, or -1
int af_set_acquisition_date(AFFILE *af,time_t t); // sets AF_ACQUISITION_DATE
#define af_imagesize(af) af_get_imagesize(af) // backwards compatiability
int af_get_segq(AFFILE *af,const char *name,int64_t *quad);/* Get/set 8-byte values */
int af_update_segq(AFFILE *af,const char *name,int64_t quad);
/****************************************************************
* Functions for manipulating the AFFILE as if it were a name/value database.
****************************************************************/
/* get functions:
* get the named segment.
* If arg!=0, set *arg to be the segment's flag.
* if data==0, don't return it.
* if datalen && *datalen==0, return the size of the data segment.
*** Returns 0 on success,
*** -1 on end of file. (AF_ERROR_EOF)
*** -2 if *data is not large enough to hold the segment (AF_ERROR_DATASMALL)
*** -3 file is corrupt or other internal error. (AF_ERROR_CORRUPT)
*/
int af_get_seg(AFFILE *af,const char *name,uint32_t *arg,
unsigned char *data,size_t *datalen);
int af_get_next_seg(AFFILE *af,char *segname,size_t segname_len,
uint32_t *arg, unsigned char *data, size_t *datalen);
int af_rewind_seg(AFFILE *af); // rewind seg pointer to beginning
/*
* af_update_seg() should be your primary routine for writing new values.
*/
/* Writing arbitrary name/value pairs */
int af_update_seg(AFFILE *af,const char *segname,uint32_t arg,
const unsigned char *value,uint32_t vallen);
#ifdef HAVE_OPENSSL_BIO_H
/* Write a memory bio to a segment */
#include <openssl/bio.h>
int af_update_seg_frombio(AFFILE *af,const char *segname,uint32_t arg,BIO *bio);
#endif
/* Delete functions */
int af_del_seg(AFFILE *af,const char *name); // complete delete of first name
// returns 0 if success, -1 if seg not found
/* Segname parse functions.
* af_segname_page_number:
* - Returns page number if segment name is a page #, and -1 if it is not
* af_segname_hash_page_number:
* - Returns page number if segment name is a page hash, sets hash function
* to be the function used.
*/
int64_t af_segname_page_number(const char *name); // return -1 if it is not a page number
int64_t af_segname_hash_page_number(const char *name,char *hash,int hashlen); // return -1 if it is not a hash page #
int af_display_as_quad(const char *segname); // afflib recommends displaying this segment as an 8-byte quad
int af_display_as_hex(const char *segname); // afflib recommends displaying this segment as a hex-string
/****************************************************************/
/* Crypto */
/* AFF Base Encryption */
int af_SHA256(const unsigned char *buf,size_t buflen,unsigned char md[32]); // return 0 if success, -1 if no cipher
int af_set_aes_key(AFFILE *af,const unsigned char *userKey,const int bits);
int af_cannot_decrypt(AFFILE *af); // encrypted pages are present which cannot be decrypted
int af_has_encrypted_segments(AFFILE *af);
int af_is_encrypted_segment(const char *segname);
/* AFF Passphrase Encryption */
int af_establish_aes_passphrase(AFFILE *af,const char *passphrase);
int af_change_aes_passphrase(AFFILE *af,const char *oldphrase,const char *newphrase);
int af_use_aes_passphrase(AFFILE *af,const char *passphrase);
int af_save_aes_key_with_passphrase(AFFILE *af,const char *passphrase, const unsigned char affkey[32]);
int af_get_aes_key_from_passphrase(AFFILE *af,const char *passphrase, unsigned char affkey[32]);
/* PKI Signing */
int af_set_sign_files(AFFILE *af,const char *keyfile,const char *certfile);
int af_sign_seg3(AFFILE *af,const char *segname, uint32_t arg,
const unsigned char *data,uint32_t datalen,uint32_t signmode);
int af_sign_seg(AFFILE *af,const char *segname);
int af_sign_all_unsigned_segments(AFFILE *af); //
int af_sig_verify_seg(AFFILE *af,const char *segname); // see below for return codes
int af_is_signature_segment(const char *segname);
/* PKI sealing */
int af_set_seal_certificates(AFFILE *af,const char *certfiles[],int numcertfiles);
int af_seal_affkey_using_certificates(AFFILE *af,const char *certfiles[],int numcertfiles, unsigned char affkey[32]);//
int af_set_unseal_keybuffer(AFFILE *af,const char *key); // take key from a buffer
int af_set_unseal_keyfile(AFFILE *af,const char *keyfile); // take key from a file
int af_get_affkey_using_keyfile(AFFILE *af, const char *private_keyfile,unsigned char affkey[32]);
#ifdef HAVE_OPENSSL_EVP_H
#include <openssl/evp.h>
int af_sig_verify_seg2(AFFILE *af,const char *segname,EVP_PKEY *pubkey,unsigned char *sigbuf,
size_t sigbuf_len,int sigmode);
int af_hash_verify_seg2(AFFILE *af,const char *segname,unsigned char *sigbuf_,size_t sigbuf_len_,int sigmode);
#define AF_HASH_VERIFIES 0
#endif
#define AF_SIGNATURE_MODE0 0x0000 // signature is for segname, arg, data in segment
#define AF_SIGNATURE_MODE1 0x0001 // signature is for segname, 0 arg, uncompressed data in segment
#define AF_SIGNATURE_DELETE 0xFFFF // signature is invalid; delete segment
/* Metadata access */
/* Compression amounts */
#define AF_COMPRESSION_MIN 1
#define AF_COMPRESSION_DEFAULT -1
#define AF_COMPRESSION_MAX 9
#define AF_COMPRESSION_MIN 1
/****************************************************************
*** AF segment names that you might be interested in...
****************************************************************/
#define AF_IGNORE "" // ignore segments with 0-length name
#define AF_DIRECTORY "dir" // the directory
#define AF_RAW_IMAGE_FILE_EXTENSION "raw_image_file_extension"
#define AF_PAGES_PER_RAW_IMAGE_FILE "pages_per_raw_image_file"
#define AF_PAGESIZE "pagesize" // page data size, in bytes, stored in arg
#define AF_IMAGESIZE "imagesize" // last logical byte in image, stored as a 64-bit number
#define AF_BADSECTORS "badsectors" // number of bad sectors
#define AF_SECTORSIZE "sectorsize" // in bytes, stored in arg
#define AF_DEVICE_SECTORS "devicesectors"// stored as a 64-bit number
#define AF_BADFLAG "badflag" // data used to mark a bad sector
#define AF_PAGE "page%"I64d // segment flag indicates compression (replaces seg%d)
#define AF_PAGE_MD5 AF_PAGE"_md5" // md5 hash of page
#define AF_PAGE_SHA1 AF_PAGE"_sha1" // sha1 hash of page
#define AF_PAGE_SHA256 AF_PAGE"_sha256"// sha256 hash of page
#define AF_PARITY0 "parity0" // parity page of all bytes
#define AF_BATCH_NAME "batch_name"
#define AF_BATCH_ITEM_NAME "batch_item_name"
#define AF_BLANKSECTORS "blanksectors" // all NULs; 8-bytes
#define AF_AFF_FILE_TYPE "aff_file_type" // contents should be "AFF", "AFM" or "AFD"
#define AF_AFFKEY "affkey_aes256" // segment for AES256 session key encrypted with sha of the passphrase
#define AF_AFFKEY_EVP "affkey_evp%d" // segment for encrypted affkey
#define AF_AES256_SUFFIX "/aes256" // suffix for encrypted segments
#define AF_SIG256_SUFFIX "/sha256" // suffix for signature segments
#define AF_SIGN256_CERT "cert-sha256" // segment name for image creator's public key
#define AF_PARITY0_SIG "parity0/sha256" // signature for parity segment
/* Chain of custody segments */
#define AF_BOM_SEG "affbom%d"
/* Deprecated terminology; pages were originally called data segments */
#define AF_SEG_D "seg%"I64d // segment flag indicates compression (deprecated)
#define AF_SEGSIZE_D "segsize" // segment data size (deprecated)
/* Bill of Materials */
#define AF_XML_AFFBOM "affbom"
#define AF_XML_DATE "date"
#define AF_XML_SIGNING_CER "signingcert"
#define AF_XML_SEGMENT_HASH "segmenthash"
/* AFF Flags */
/* Flags for 8-byte segments */
#define AF_SEG_QUADWORD 0x0002
/* Flags for selecting compression algorithm to try */
#define AF_COMPRESSION_ALG_NONE 0 // don't compress
#define AF_COMPRESSION_ALG_ZLIB 1 // try to compress with zlib
#define AF_COMPRESSION_ALG_LZMA 2 // try to compress with LZMA
/* Arg Flags for data pages; this is stored in 'flag' of data segment */
#define AF_PAGE_COMPRESSED 0x0001
#define AF_PAGE_COMP_MAX 0x0002 // compressed at maximum; nice to know
#define AF_PAGE_COMP_ALG_MASK 0x00F0 // up to 16 compression algorithms may be used
#define AF_PAGE_COMP_ALG_ZLIB 0x0000
#define AF_PAGE_COMP_ALG_BZIP 0x0010 // not implemented; why bother?
#define AF_PAGE_COMP_ALG_LZMA 0x0020 // high compression but pretty slow
#define AF_PAGE_COMP_ALG_ZERO 0x0030 // Data segment is a 4-byte value of # of NULLs.
#define AF_MD5 "md5" // stores image md5
#define AF_SHA1 "sha1" // stores image sha1
#define AF_SHA256 "sha256" // stores image sha256
#define AF_CREATOR "creator" // progname of the program that created the AFF file
/* segment names: imaging */
#define AF_CASE_NUM "case_num" // case number
#define AF_IMAGE_GID "image_gid" // 128-bit unique number
#define AF_ACQUISITION_ISO_COUNTRY "acquisition_iso_country" // ISO country code
#define AF_ACQUISITION_COMMAND_LINE "acquisition_commandline" // actual command line used to create the image
#define AF_ACQUISITION_DATE "acquisition_date" // YYYY-MM-DD HH:MM:SS TZT
#define AF_ACQUISITION_NOTES "acquisition_notes" // notes made while imaging
#define AF_ACQUISITION_DEVICE "acquisition_device" // device used to do the imaging
#define AF_ACQUISITION_SECONDS "acquisition_seconds" // stored in arg
#define AF_ACQUISITION_TECHNICIAN "acquisition_tecnician"
#define AF_ACQUISITION_MACADDR "acquisition_macaddr"
#define AF_ACQUISITION_DMESG "acquisition_dmesg"
// mac addresses are store in ASCII as a list of lines that end with \n,
// for example, "00:03:93:14:c5:04\n"
// It is all the mac addresses that were on the acquisition system
// DMESG is the output from the "dmesg" command at the time of acquisition
/* segment names: device hardware */
#define AF_AFFLIB_VERSION "afflib_version" // version of AFFLIB that made this file
#define AF_DEVICE_MANUFACTURER "device_manufacturer"
#define AF_DEVICE_MODEL "device_model" // string for ident from drive
#define AF_DEVICE_SN "device_sn" // string of drive capabilities
#define AF_DEVICE_FIRMWARE "device_firmware" // string of drive capabilities
#define AF_DEVICE_SOURCE "device_source" // string
#define AF_CYLINDERS "cylinders" // quad with # cylinders
#define AF_HEADS "heads" // quad with # heads
#define AF_SECTORS_PER_TRACK "sectors_per_track"// quad with # sectors/track
#define AF_LBA_SIZE "lbasize"
#define AF_HPA_PRESENT "hpa_present" // flag = 1 or 0
#define AF_DCO_PRESENT "dco_present" // flag = 1 or 0
#define AF_LOCATION_IN_COMPUTER "location_in_computer" // text, where it was found
#define AF_DEVICE_CAPABILITIES "device_capabilities" // string; human-readable
#define AF_MAX_NAME_LEN 64 // segment names should not be larger than this
/* AFF error codes */
#define AF_ERROR_NO_ERROR 0
#define AF_ERROR_EOF -1
#define AF_ERROR_DATASMALL -2
#define AF_ERROR_TAIL -3 // no tail, or error reading tail
#define AF_ERROR_SEGH -4 // no head, or error reading head
#define AF_ERROR_NAME -5 // segment name invalid
#define AF_ERROR_INVALID_ARG -6 // argument invalid
#define AF_ERROR_NO_AES -7 // AES support is not compiled in
#define AF_ERROR_AES_TOO_SMALL -8 // and AES-encrypted segment was too small
#define AF_ERROR_KEY_SET -9 // a key was already set
#define AF_ERROR_AFFKEY_EXISTS -10 // a key already exists in file an attempt was made to establish
#define AF_ERROR_AFFKEY_NOT_EXIST -11 // a key does not exist and an attempt was made to use it.
#define AF_ERROR_AFFKEY_WRONG_VERSION -12
#define AF_ERROR_WRONG_PASSPHRASE -13
#define AF_ERROR_RNG_FAIL -13
#define AF_ERROR_HASH_FAIL -14
#define AF_ERROR_NO_SHA256 -15
#define AF_SIG_GOOD 0
#define AF_ERROR_SIG_BAD -15
#define AF_ERROR_SIG_NO_CERT -16
#define AF_ERROR_SIG_CANNOT_READ_PUBLIC_KEY -17
#define AF_ERROR_SIG_DATAREAD_ERROR -18
#define AF_ERROR_SIG_MALLOC -19
#define AF_ERROR_SIG_READ_ERROR -20
#define AF_ERROR_SIG_SIG_SEG -21 // can't verify the signature on a signature segment
#define AF_ERROR_SIG_NOT_COMPILED -22 // afflib compiled without signature support
/* AFF environment variables */
#define AFFLIB_CACHE_STATS "AFFLIB_CACHE_STATS" // make non-zero to dump stats to STDERR at end
#define AFFLIB_CACHE_DEBUG "AFFLIB_CACHE_DEBUG" // make "1" to dump a trace of cache events to stderr
#define AFFLIB_CACHE_PAGES "AFFLIB_CACHE_PAGES" // Size of the page cache
#define AFFLIB_CACHE_PAGES_DEFAULT 32 // default number of cache pages
#define AFFLIB_BIGTMP "AFFLIB_BIGTMP" // default directory to put very big files for test programs
#define AFFLIB_TRACEFILE "AFFLIB_TRACEFILE" // If set, send a record of all activity to the location
/* passphrases for single-key cryptography */
#define AFFLIB_PASSPHRASE "AFFLIB_PASSPHRASE"
#define AFFLIB_PASSPHRASE_FILE "AFFLIB_PASSPHRASE_FILE"
#define AFFLIB_PASSPHRASE_FD "AFFLIB_PASSPHRASE_FD"
/* passphrases for signing keys */
#define AFFLIB_PEM_SIGNING_PASSPHRASE "AFFLIB_PEM_SIGNING_PASSPHRASE"
/* passphrases for sealing keys */
#define AFFLIB_DECRYPTING_PRIVATE_KEYFILE "AFFLIB_DECRYPTING_PRIVATE_KEYFILE"
extern FILE *af_trace; // fd to trace to
/****************************************************************
*** Not AFF functions at all, but placed here for convenience.
****************************************************************/
const char *af_hexbuf(char *dst,int dst_len,const unsigned char *bin,int bytes,int format_flag);
/* af_hexbuf formats: */
#define AF_HEXBUF_NO_SPACES 0
#define AF_HEXBUF_SPACE2 0x0001 // space every 2 characters
#define AF_HEXBUF_SPACE4 0x0002 // space every 4 characters
#define AF_HEXBUF_UPPERCASE 0x1000 // uppercase
#define AF_HEXBUF_LINEBREAK 0x2000 // break every 80 cols
/****************************************************************
*** Internal implementation details below.
****************************************************************/
#ifdef __never_defined__
{
#endif
#ifdef __cplusplus
}
#endif
#endif
|