37 #include <sys/types.h>
38 #include <netinet/in.h>
41 #include <openssl/evp.h>
42 #include <openssl/opensslv.h>
43 #if OPENSSL_VERSION_NUMBER >= 0x30000000L
44 #include <openssl/provider.h>
58 virtual int Decrypt(
const char *key,
65 virtual int Encrypt(
const char *key,
87 unsigned char ivec[8] = {0,0,0,0,0,0,0,0};
90 int dLen = srcLen -
sizeof(crc32);
94 if (dstLen <= (
int)
sizeof(crc32) || dstLen < srcLen)
return -EINVAL;
98 EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
99 EVP_DecryptInit_ex(ctx, EVP_bf_cfb64(), NULL, NULL, NULL);
100 EVP_CIPHER_CTX_set_padding(ctx, 0);
101 EVP_CIPHER_CTX_set_key_length(ctx, keyLen);
102 EVP_DecryptInit_ex(ctx, NULL, NULL, (
unsigned char *)key, ivec);
103 EVP_DecryptUpdate(ctx, (
unsigned char *)dst, &wLen,
104 (
unsigned char *)src, srcLen);
105 EVP_DecryptFinal_ex(ctx, (
unsigned char *)dst, &wLen);
106 EVP_CIPHER_CTX_free(ctx);
110 memcpy(&crc32, dst+dLen,
sizeof(crc32));
111 crc32 = ntohl(crc32);
131 unsigned char buff[4096], *bP, *mP = 0, ivec[8] = {0,0,0,0,0,0,0,0};
134 int dLen = srcLen +
sizeof(crc32);
138 if (dstLen-srcLen < (
int)
sizeof(crc32) || srcLen <= 0)
return -EINVAL;
142 if (dLen <= (
int)
sizeof(buff)) bP = buff;
143 else {
if (!(mP = (
unsigned char *)malloc(dLen)))
return -ENOMEM;
149 memcpy(bP, src, srcLen);
151 crc32 = htonl(crc32);
152 memcpy((bP+srcLen), &crc32,
sizeof(crc32));
156 EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
157 EVP_EncryptInit_ex(ctx, EVP_bf_cfb64(), NULL, NULL, NULL);
158 EVP_CIPHER_CTX_set_padding(ctx, 0);
159 EVP_CIPHER_CTX_set_key_length(ctx, keyLen);
160 EVP_EncryptInit_ex(ctx, NULL, NULL, (
unsigned char *)key, ivec);
161 EVP_EncryptUpdate(ctx, (
unsigned char *)dst, &wLen, bP, dLen);
162 EVP_EncryptFinal_ex(ctx, (
unsigned char *)dst, &wLen);
163 EVP_CIPHER_CTX_free(ctx);
177 #if OPENSSL_VERSION_NUMBER >= 0x30000000L
186 static struct loadProviders {
188 EVP_MD *mdp = EVP_MD_fetch(NULL,
"SHA2-256", NULL);
189 if (mdp) EVP_MD_free(mdp);
191 (void) OSSL_PROVIDER_load(NULL,
"legacy");
XrdCryptoLite * XrdCryptoLite_New_bf32(const char Type)
virtual int Decrypt(const char *key, int keyLen, const char *src, int srcLen, char *dst, int dstLen)
virtual int Encrypt(const char *key, int keyLen, const char *src, int srcLen, char *dst, int dstLen)
XrdCryptoLite_bf32(const char deType)
static uint32_t CRC32(const unsigned char *data, int count)