1*1dcdf01fSchristos /*
2*1dcdf01fSchristos * Copyright 1998-2018 The OpenSSL Project Authors. All Rights Reserved.
3*1dcdf01fSchristos *
4*1dcdf01fSchristos * Licensed under the OpenSSL license (the "License"). You may not use
5*1dcdf01fSchristos * this file except in compliance with the License. You can obtain a copy
6*1dcdf01fSchristos * in the file LICENSE in the source distribution or at
7*1dcdf01fSchristos * https://www.openssl.org/source/license.html
8*1dcdf01fSchristos */
9*1dcdf01fSchristos
1060662d10Schristos #include <stdio.h>
1160662d10Schristos #include <stdlib.h>
1260662d10Schristos #include <string.h>
1360662d10Schristos #include <openssl/objects.h>
1460662d10Schristos #include <openssl/comp.h>
15*1dcdf01fSchristos #include <openssl/err.h>
16*1dcdf01fSchristos #include "comp_local.h"
1760662d10Schristos
COMP_CTX_new(COMP_METHOD * meth)1860662d10Schristos COMP_CTX *COMP_CTX_new(COMP_METHOD *meth)
1960662d10Schristos {
2060662d10Schristos COMP_CTX *ret;
2160662d10Schristos
22*1dcdf01fSchristos if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) {
23*1dcdf01fSchristos COMPerr(COMP_F_COMP_CTX_NEW, ERR_R_MALLOC_FAILURE);
24*1dcdf01fSchristos return NULL;
2560662d10Schristos }
2660662d10Schristos ret->meth = meth;
2760662d10Schristos if ((ret->meth->init != NULL) && !ret->meth->init(ret)) {
2860662d10Schristos OPENSSL_free(ret);
2960662d10Schristos ret = NULL;
3060662d10Schristos }
31*1dcdf01fSchristos return ret;
32*1dcdf01fSchristos }
33*1dcdf01fSchristos
COMP_CTX_get_method(const COMP_CTX * ctx)34*1dcdf01fSchristos const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx)
35*1dcdf01fSchristos {
36*1dcdf01fSchristos return ctx->meth;
37*1dcdf01fSchristos }
38*1dcdf01fSchristos
COMP_get_type(const COMP_METHOD * meth)39*1dcdf01fSchristos int COMP_get_type(const COMP_METHOD *meth)
40*1dcdf01fSchristos {
41*1dcdf01fSchristos return meth->type;
42*1dcdf01fSchristos }
43*1dcdf01fSchristos
COMP_get_name(const COMP_METHOD * meth)44*1dcdf01fSchristos const char *COMP_get_name(const COMP_METHOD *meth)
45*1dcdf01fSchristos {
46*1dcdf01fSchristos return meth->name;
4760662d10Schristos }
4860662d10Schristos
COMP_CTX_free(COMP_CTX * ctx)4960662d10Schristos void COMP_CTX_free(COMP_CTX *ctx)
5060662d10Schristos {
5160662d10Schristos if (ctx == NULL)
5260662d10Schristos return;
5360662d10Schristos if (ctx->meth->finish != NULL)
5460662d10Schristos ctx->meth->finish(ctx);
5560662d10Schristos
5660662d10Schristos OPENSSL_free(ctx);
5760662d10Schristos }
5860662d10Schristos
COMP_compress_block(COMP_CTX * ctx,unsigned char * out,int olen,unsigned char * in,int ilen)5960662d10Schristos int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
6060662d10Schristos unsigned char *in, int ilen)
6160662d10Schristos {
6260662d10Schristos int ret;
6360662d10Schristos if (ctx->meth->compress == NULL) {
64*1dcdf01fSchristos return -1;
6560662d10Schristos }
6660662d10Schristos ret = ctx->meth->compress(ctx, out, olen, in, ilen);
6760662d10Schristos if (ret > 0) {
6860662d10Schristos ctx->compress_in += ilen;
6960662d10Schristos ctx->compress_out += ret;
7060662d10Schristos }
71*1dcdf01fSchristos return ret;
7260662d10Schristos }
7360662d10Schristos
COMP_expand_block(COMP_CTX * ctx,unsigned char * out,int olen,unsigned char * in,int ilen)7460662d10Schristos int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
7560662d10Schristos unsigned char *in, int ilen)
7660662d10Schristos {
7760662d10Schristos int ret;
7860662d10Schristos
7960662d10Schristos if (ctx->meth->expand == NULL) {
80*1dcdf01fSchristos return -1;
8160662d10Schristos }
8260662d10Schristos ret = ctx->meth->expand(ctx, out, olen, in, ilen);
8360662d10Schristos if (ret > 0) {
8460662d10Schristos ctx->expand_in += ilen;
8560662d10Schristos ctx->expand_out += ret;
8660662d10Schristos }
87*1dcdf01fSchristos return ret;
88*1dcdf01fSchristos }
89*1dcdf01fSchristos
COMP_CTX_get_type(const COMP_CTX * comp)90*1dcdf01fSchristos int COMP_CTX_get_type(const COMP_CTX* comp)
91*1dcdf01fSchristos {
92*1dcdf01fSchristos return comp->meth ? comp->meth->type : NID_undef;
9360662d10Schristos }
94