xref: /freebsd/crypto/openssl/crypto/comp/comp_lib.c (revision 2be1a816b9ff69588e55be0a84cbe2a31efc0f2f)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <openssl/objects.h>
5 #include <openssl/comp.h>
6 
7 COMP_CTX *COMP_CTX_new(COMP_METHOD *meth)
8 	{
9 	COMP_CTX *ret;
10 
11 	if ((ret=(COMP_CTX *)OPENSSL_malloc(sizeof(COMP_CTX))) == NULL)
12 		{
13 		/* ZZZZZZZZZZZZZZZZ */
14 		return(NULL);
15 		}
16 	memset(ret,0,sizeof(COMP_CTX));
17 	ret->meth=meth;
18 	if ((ret->meth->init != NULL) && !ret->meth->init(ret))
19 		{
20 		OPENSSL_free(ret);
21 		ret=NULL;
22 		}
23 	return(ret);
24 	}
25 
26 void COMP_CTX_free(COMP_CTX *ctx)
27 	{
28 	if(ctx == NULL)
29 	    return;
30 
31 	if (ctx->meth->finish != NULL)
32 		ctx->meth->finish(ctx);
33 
34 	OPENSSL_free(ctx);
35 	}
36 
37 int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
38 	     unsigned char *in, int ilen)
39 	{
40 	int ret;
41 	if (ctx->meth->compress == NULL)
42 		{
43 		/* ZZZZZZZZZZZZZZZZZ */
44 		return(-1);
45 		}
46 	ret=ctx->meth->compress(ctx,out,olen,in,ilen);
47 	if (ret > 0)
48 		{
49 		ctx->compress_in+=ilen;
50 		ctx->compress_out+=ret;
51 		}
52 	return(ret);
53 	}
54 
55 int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
56 	     unsigned char *in, int ilen)
57 	{
58 	int ret;
59 
60 	if (ctx->meth->expand == NULL)
61 		{
62 		/* ZZZZZZZZZZZZZZZZZ */
63 		return(-1);
64 		}
65 	ret=ctx->meth->expand(ctx,out,olen,in,ilen);
66 	if (ret > 0)
67 		{
68 		ctx->expand_in+=ilen;
69 		ctx->expand_out+=ret;
70 		}
71 	return(ret);
72 	}
73