xref: /freebsd/crypto/openssl/crypto/comp/comp_lib.c (revision e71b70530d95c4f34d8bdbd78d1242df1ba4a945)
1*e71b7053SJung-uk Kim /*
2*e71b7053SJung-uk Kim  * Copyright 1998-2018 The OpenSSL Project Authors. All Rights Reserved.
3*e71b7053SJung-uk Kim  *
4*e71b7053SJung-uk Kim  * Licensed under the OpenSSL license (the "License").  You may not use
5*e71b7053SJung-uk Kim  * this file except in compliance with the License.  You can obtain a copy
6*e71b7053SJung-uk Kim  * in the file LICENSE in the source distribution or at
7*e71b7053SJung-uk Kim  * https://www.openssl.org/source/license.html
8*e71b7053SJung-uk Kim  */
9*e71b7053SJung-uk Kim 
1074664626SKris Kennaway #include <stdio.h>
1174664626SKris Kennaway #include <stdlib.h>
1274664626SKris Kennaway #include <string.h>
1374664626SKris Kennaway #include <openssl/objects.h>
1474664626SKris Kennaway #include <openssl/comp.h>
15*e71b7053SJung-uk Kim #include <openssl/err.h>
16*e71b7053SJung-uk Kim #include "comp_lcl.h"
1774664626SKris Kennaway 
1874664626SKris Kennaway COMP_CTX *COMP_CTX_new(COMP_METHOD *meth)
1974664626SKris Kennaway {
2074664626SKris Kennaway     COMP_CTX *ret;
2174664626SKris Kennaway 
22*e71b7053SJung-uk Kim     if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) {
23*e71b7053SJung-uk Kim         COMPerr(COMP_F_COMP_CTX_NEW, ERR_R_MALLOC_FAILURE);
24*e71b7053SJung-uk Kim         return NULL;
2574664626SKris Kennaway     }
2674664626SKris Kennaway     ret->meth = meth;
276f9291ceSJung-uk Kim     if ((ret->meth->init != NULL) && !ret->meth->init(ret)) {
28ddd58736SKris Kennaway         OPENSSL_free(ret);
2974664626SKris Kennaway         ret = NULL;
3074664626SKris Kennaway     }
31*e71b7053SJung-uk Kim     return ret;
32*e71b7053SJung-uk Kim }
33*e71b7053SJung-uk Kim 
34*e71b7053SJung-uk Kim const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx)
35*e71b7053SJung-uk Kim {
36*e71b7053SJung-uk Kim     return ctx->meth;
37*e71b7053SJung-uk Kim }
38*e71b7053SJung-uk Kim 
39*e71b7053SJung-uk Kim int COMP_get_type(const COMP_METHOD *meth)
40*e71b7053SJung-uk Kim {
41*e71b7053SJung-uk Kim     return meth->type;
42*e71b7053SJung-uk Kim }
43*e71b7053SJung-uk Kim 
44*e71b7053SJung-uk Kim const char *COMP_get_name(const COMP_METHOD *meth)
45*e71b7053SJung-uk Kim {
46*e71b7053SJung-uk Kim     return meth->name;
4774664626SKris Kennaway }
4874664626SKris Kennaway 
4974664626SKris Kennaway void COMP_CTX_free(COMP_CTX *ctx)
5074664626SKris Kennaway {
5174664626SKris Kennaway     if (ctx == NULL)
5274664626SKris Kennaway         return;
5374664626SKris Kennaway     if (ctx->meth->finish != NULL)
5474664626SKris Kennaway         ctx->meth->finish(ctx);
5574664626SKris Kennaway 
56ddd58736SKris Kennaway     OPENSSL_free(ctx);
5774664626SKris Kennaway }
5874664626SKris Kennaway 
5974664626SKris Kennaway int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
6074664626SKris Kennaway                         unsigned char *in, int ilen)
6174664626SKris Kennaway {
6274664626SKris Kennaway     int ret;
636f9291ceSJung-uk Kim     if (ctx->meth->compress == NULL) {
64*e71b7053SJung-uk Kim         return -1;
6574664626SKris Kennaway     }
6674664626SKris Kennaway     ret = ctx->meth->compress(ctx, out, olen, in, ilen);
676f9291ceSJung-uk Kim     if (ret > 0) {
6874664626SKris Kennaway         ctx->compress_in += ilen;
6974664626SKris Kennaway         ctx->compress_out += ret;
7074664626SKris Kennaway     }
71*e71b7053SJung-uk Kim     return ret;
7274664626SKris Kennaway }
7374664626SKris Kennaway 
7474664626SKris Kennaway int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
7574664626SKris Kennaway                       unsigned char *in, int ilen)
7674664626SKris Kennaway {
7774664626SKris Kennaway     int ret;
7874664626SKris Kennaway 
796f9291ceSJung-uk Kim     if (ctx->meth->expand == NULL) {
80*e71b7053SJung-uk Kim         return -1;
8174664626SKris Kennaway     }
8274664626SKris Kennaway     ret = ctx->meth->expand(ctx, out, olen, in, ilen);
836f9291ceSJung-uk Kim     if (ret > 0) {
8474664626SKris Kennaway         ctx->expand_in += ilen;
8574664626SKris Kennaway         ctx->expand_out += ret;
8674664626SKris Kennaway     }
87*e71b7053SJung-uk Kim     return ret;
88*e71b7053SJung-uk Kim }
89*e71b7053SJung-uk Kim 
90*e71b7053SJung-uk Kim int COMP_CTX_get_type(const COMP_CTX* comp)
91*e71b7053SJung-uk Kim {
92*e71b7053SJung-uk Kim     return comp->meth ? comp->meth->type : NID_undef;
9374664626SKris Kennaway }
94