1*f5b1c8a1SJohn Marino /* $OpenBSD: comp.h,v 1.7 2014/06/12 15:49:28 deraadt Exp $ */ 2*f5b1c8a1SJohn Marino 3*f5b1c8a1SJohn Marino #ifndef HEADER_COMP_H 4*f5b1c8a1SJohn Marino #define HEADER_COMP_H 5*f5b1c8a1SJohn Marino 6*f5b1c8a1SJohn Marino #include <openssl/crypto.h> 7*f5b1c8a1SJohn Marino 8*f5b1c8a1SJohn Marino #ifdef __cplusplus 9*f5b1c8a1SJohn Marino extern "C" { 10*f5b1c8a1SJohn Marino #endif 11*f5b1c8a1SJohn Marino 12*f5b1c8a1SJohn Marino typedef struct comp_ctx_st COMP_CTX; 13*f5b1c8a1SJohn Marino 14*f5b1c8a1SJohn Marino typedef struct comp_method_st { 15*f5b1c8a1SJohn Marino int type; /* NID for compression library */ 16*f5b1c8a1SJohn Marino const char *name; /* A text string to identify the library */ 17*f5b1c8a1SJohn Marino int (*init)(COMP_CTX *ctx); 18*f5b1c8a1SJohn Marino void (*finish)(COMP_CTX *ctx); 19*f5b1c8a1SJohn Marino int (*compress)(COMP_CTX *ctx, unsigned char *out, unsigned int olen, 20*f5b1c8a1SJohn Marino unsigned char *in, unsigned int ilen); 21*f5b1c8a1SJohn Marino int (*expand)(COMP_CTX *ctx, unsigned char *out, unsigned int olen, 22*f5b1c8a1SJohn Marino unsigned char *in, unsigned int ilen); 23*f5b1c8a1SJohn Marino /* The following two do NOTHING, but are kept for backward compatibility */ 24*f5b1c8a1SJohn Marino long (*ctrl)(void); 25*f5b1c8a1SJohn Marino long (*callback_ctrl)(void); 26*f5b1c8a1SJohn Marino } COMP_METHOD; 27*f5b1c8a1SJohn Marino 28*f5b1c8a1SJohn Marino struct comp_ctx_st { 29*f5b1c8a1SJohn Marino COMP_METHOD *meth; 30*f5b1c8a1SJohn Marino unsigned long compress_in; 31*f5b1c8a1SJohn Marino unsigned long compress_out; 32*f5b1c8a1SJohn Marino unsigned long expand_in; 33*f5b1c8a1SJohn Marino unsigned long expand_out; 34*f5b1c8a1SJohn Marino 35*f5b1c8a1SJohn Marino CRYPTO_EX_DATA ex_data; 36*f5b1c8a1SJohn Marino }; 37*f5b1c8a1SJohn Marino 38*f5b1c8a1SJohn Marino 39*f5b1c8a1SJohn Marino COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); 40*f5b1c8a1SJohn Marino void COMP_CTX_free(COMP_CTX *ctx); 41*f5b1c8a1SJohn Marino int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, 42*f5b1c8a1SJohn Marino unsigned char *in, int ilen); 43*f5b1c8a1SJohn Marino int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, 44*f5b1c8a1SJohn Marino unsigned char *in, int ilen); 45*f5b1c8a1SJohn Marino COMP_METHOD *COMP_rle(void ); 46*f5b1c8a1SJohn Marino COMP_METHOD *COMP_zlib(void ); 47*f5b1c8a1SJohn Marino void COMP_zlib_cleanup(void); 48*f5b1c8a1SJohn Marino 49*f5b1c8a1SJohn Marino #ifdef HEADER_BIO_H 50*f5b1c8a1SJohn Marino #ifdef ZLIB 51*f5b1c8a1SJohn Marino BIO_METHOD *BIO_f_zlib(void); 52*f5b1c8a1SJohn Marino #endif 53*f5b1c8a1SJohn Marino #endif 54*f5b1c8a1SJohn Marino 55*f5b1c8a1SJohn Marino void ERR_load_COMP_strings(void); 56*f5b1c8a1SJohn Marino 57*f5b1c8a1SJohn Marino /* Error codes for the COMP functions. */ 58*f5b1c8a1SJohn Marino 59*f5b1c8a1SJohn Marino /* Function codes. */ 60*f5b1c8a1SJohn Marino #define COMP_F_BIO_ZLIB_FLUSH 99 61*f5b1c8a1SJohn Marino #define COMP_F_BIO_ZLIB_NEW 100 62*f5b1c8a1SJohn Marino #define COMP_F_BIO_ZLIB_READ 101 63*f5b1c8a1SJohn Marino #define COMP_F_BIO_ZLIB_WRITE 102 64*f5b1c8a1SJohn Marino 65*f5b1c8a1SJohn Marino /* Reason codes. */ 66*f5b1c8a1SJohn Marino #define COMP_R_ZLIB_DEFLATE_ERROR 99 67*f5b1c8a1SJohn Marino #define COMP_R_ZLIB_INFLATE_ERROR 100 68*f5b1c8a1SJohn Marino #define COMP_R_ZLIB_NOT_SUPPORTED 101 69*f5b1c8a1SJohn Marino 70*f5b1c8a1SJohn Marino #ifdef __cplusplus 71*f5b1c8a1SJohn Marino } 72*f5b1c8a1SJohn Marino #endif 73*f5b1c8a1SJohn Marino #endif 74