1e71b7053SJung-uk Kim /*
2*b077aed3SPierre Pronchery * Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved.
3e71b7053SJung-uk Kim *
4*b077aed3SPierre Pronchery * Licensed under the Apache License 2.0 (the "License"). You may not use
5e71b7053SJung-uk Kim * this file except in compliance with the License. You can obtain a copy
6e71b7053SJung-uk Kim * in the file LICENSE in the source distribution or at
7e71b7053SJung-uk Kim * https://www.openssl.org/source/license.html
8e71b7053SJung-uk Kim */
9e71b7053SJung-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>
15e71b7053SJung-uk Kim #include <openssl/err.h>
1617f01e99SJung-uk Kim #include "comp_local.h"
1774664626SKris Kennaway
COMP_CTX_new(COMP_METHOD * meth)1874664626SKris Kennaway COMP_CTX *COMP_CTX_new(COMP_METHOD *meth)
1974664626SKris Kennaway {
2074664626SKris Kennaway COMP_CTX *ret;
2174664626SKris Kennaway
22e71b7053SJung-uk Kim if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) {
23*b077aed3SPierre Pronchery ERR_raise(ERR_LIB_COMP, ERR_R_MALLOC_FAILURE);
24e71b7053SJung-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 }
31e71b7053SJung-uk Kim return ret;
32e71b7053SJung-uk Kim }
33e71b7053SJung-uk Kim
COMP_CTX_get_method(const COMP_CTX * ctx)34e71b7053SJung-uk Kim const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx)
35e71b7053SJung-uk Kim {
36e71b7053SJung-uk Kim return ctx->meth;
37e71b7053SJung-uk Kim }
38e71b7053SJung-uk Kim
COMP_get_type(const COMP_METHOD * meth)39e71b7053SJung-uk Kim int COMP_get_type(const COMP_METHOD *meth)
40e71b7053SJung-uk Kim {
41e71b7053SJung-uk Kim return meth->type;
42e71b7053SJung-uk Kim }
43e71b7053SJung-uk Kim
COMP_get_name(const COMP_METHOD * meth)44e71b7053SJung-uk Kim const char *COMP_get_name(const COMP_METHOD *meth)
45e71b7053SJung-uk Kim {
46e71b7053SJung-uk Kim return meth->name;
4774664626SKris Kennaway }
4874664626SKris Kennaway
COMP_CTX_free(COMP_CTX * ctx)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
COMP_compress_block(COMP_CTX * ctx,unsigned char * out,int olen,unsigned char * in,int ilen)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) {
64e71b7053SJung-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 }
71e71b7053SJung-uk Kim return ret;
7274664626SKris Kennaway }
7374664626SKris Kennaway
COMP_expand_block(COMP_CTX * ctx,unsigned char * out,int olen,unsigned char * in,int ilen)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) {
80e71b7053SJung-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 }
87e71b7053SJung-uk Kim return ret;
88e71b7053SJung-uk Kim }
89e71b7053SJung-uk Kim
COMP_CTX_get_type(const COMP_CTX * comp)90e71b7053SJung-uk Kim int COMP_CTX_get_type(const COMP_CTX* comp)
91e71b7053SJung-uk Kim {
92e71b7053SJung-uk Kim return comp->meth ? comp->meth->type : NID_undef;
9374664626SKris Kennaway }
94