1 /* 2 * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 /* Dispatch functions for Blowfish cipher modes ecb, cbc, ofb, cfb */ 11 12 /* 13 * BF low level APIs are deprecated for public use, but still ok for internal 14 * use. 15 */ 16 #include "internal/deprecated.h" 17 18 #include "cipher_blowfish.h" 19 #include "prov/implementations.h" 20 #include "prov/providercommon.h" 21 22 #define BF_FLAGS PROV_CIPHER_FLAG_VARIABLE_LENGTH 23 24 static OSSL_FUNC_cipher_freectx_fn blowfish_freectx; 25 static OSSL_FUNC_cipher_dupctx_fn blowfish_dupctx; 26 27 static void blowfish_freectx(void *vctx) 28 { 29 PROV_BLOWFISH_CTX *ctx = (PROV_BLOWFISH_CTX *)vctx; 30 31 ossl_cipher_generic_reset_ctx((PROV_CIPHER_CTX *)vctx); 32 OPENSSL_clear_free(ctx, sizeof(*ctx)); 33 } 34 35 static void *blowfish_dupctx(void *ctx) 36 { 37 PROV_BLOWFISH_CTX *in = (PROV_BLOWFISH_CTX *)ctx; 38 PROV_BLOWFISH_CTX *ret; 39 40 if (!ossl_prov_is_running()) 41 return NULL; 42 43 ret = OPENSSL_malloc(sizeof(*ret)); 44 if (ret == NULL) { 45 ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); 46 return NULL; 47 } 48 *ret = *in; 49 50 return ret; 51 } 52 53 /* bf_ecb_functions */ 54 IMPLEMENT_var_keylen_cipher(blowfish, BLOWFISH, ecb, ECB, BF_FLAGS, 128, 64, 0, block) 55 /* bf_cbc_functions */ 56 IMPLEMENT_var_keylen_cipher(blowfish, BLOWFISH, cbc, CBC, BF_FLAGS, 128, 64, 64, block) 57 /* bf_ofb_functions */ 58 IMPLEMENT_var_keylen_cipher(blowfish, BLOWFISH, ofb64, OFB, BF_FLAGS, 128, 8, 64, stream) 59 /* bf_cfb_functions */ 60 IMPLEMENT_var_keylen_cipher(blowfish, BLOWFISH, cfb64, CFB, BF_FLAGS, 128, 8, 64, stream) 61