1 /* 2 * Copyright 2019-2023 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 #include <openssl/rc4.h> 11 #include <openssl/md5.h> 12 #include "prov/ciphercommon.h" 13 14 typedef struct prov_rc4_hmac_md5_ctx_st { 15 PROV_CIPHER_CTX base; /* Must be first */ 16 union { 17 OSSL_UNION_ALIGN; 18 RC4_KEY ks; 19 } ks; 20 MD5_CTX head, tail, md; 21 size_t payload_length; 22 size_t tls_aad_pad_sz; 23 } PROV_RC4_HMAC_MD5_CTX; 24 25 typedef struct prov_cipher_hw_rc4_hmac_md5_st { 26 PROV_CIPHER_HW base; /* Must be first */ 27 int (*tls_init)(PROV_CIPHER_CTX *ctx, unsigned char *aad, size_t aad_len); 28 void (*init_mackey)(PROV_CIPHER_CTX *ctx, const unsigned char *key, 29 size_t len); 30 31 } PROV_CIPHER_HW_RC4_HMAC_MD5; 32 33 const PROV_CIPHER_HW *ossl_prov_cipher_hw_rc4_hmac_md5(size_t keybits); 34 35 void rc4_md5_enc(RC4_KEY *key, const void *in0, void *out, 36 MD5_CTX *ctx, const void *inp, size_t blocks); 37