39 #include <sys/types.h>
40 #include <netinet/in.h>
43 #include <openssl/evp.h>
44 #include <openssl/opensslv.h>
45 #if OPENSSL_VERSION_NUMBER < 0x10100000L
48 #if OPENSSL_VERSION_NUMBER >= 0x30000000L
49 #include <openssl/provider.h>
63 virtual int Decrypt(
const char *key,
70 virtual int Encrypt(
const char *key,
77 XrdCryptoLite_bf32(
const char deType) :
XrdCryptoLite(deType, 4) {}
78 ~XrdCryptoLite_bf32() {}
85 int XrdCryptoLite_bf32::Decrypt(
const char *key,
92 unsigned char ivec[8] = {0,0,0,0,0,0,0,0};
95 int dLen = srcLen -
sizeof(crc32);
99 if (dstLen <= (
int)
sizeof(crc32) || dstLen < srcLen)
return -EINVAL;
103 EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
104 EVP_DecryptInit_ex(ctx, EVP_bf_cfb64(), NULL, NULL, NULL);
105 EVP_CIPHER_CTX_set_padding(ctx, 0);
106 EVP_CIPHER_CTX_set_key_length(ctx, keyLen);
107 EVP_DecryptInit_ex(ctx, NULL, NULL, (
unsigned char *)key, ivec);
108 EVP_DecryptUpdate(ctx, (
unsigned char *)dst, &wLen,
109 (
unsigned char *)src, srcLen);
110 EVP_DecryptFinal_ex(ctx, (
unsigned char *)dst, &wLen);
111 EVP_CIPHER_CTX_free(ctx);
115 memcpy(&crc32, dst+dLen,
sizeof(crc32));
116 crc32 = ntohl(crc32);
129 int XrdCryptoLite_bf32::Encrypt(
const char *key,
136 unsigned char buff[4096], *bP, *mP = 0, ivec[8] = {0,0,0,0,0,0,0,0};
139 int dLen = srcLen +
sizeof(crc32);
143 if (dstLen-srcLen < (
int)
sizeof(crc32) || srcLen <= 0)
return -EINVAL;
147 if (dLen <= (
int)
sizeof(buff)) bP = buff;
148 else {
if (!(mP = (
unsigned char *)malloc(dLen)))
return -ENOMEM;
154 memcpy(bP, src, srcLen);
156 crc32 = htonl(crc32);
157 memcpy((bP+srcLen), &crc32,
sizeof(crc32));
161 EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
162 EVP_EncryptInit_ex(ctx, EVP_bf_cfb64(), NULL, NULL, NULL);
163 EVP_CIPHER_CTX_set_padding(ctx, 0);
164 EVP_CIPHER_CTX_set_key_length(ctx, keyLen);
165 EVP_EncryptInit_ex(ctx, NULL, NULL, (
unsigned char *)key, ivec);
166 EVP_EncryptUpdate(ctx, (
unsigned char *)dst, &wLen, bP, dLen);
167 EVP_EncryptFinal_ex(ctx, (
unsigned char *)dst, &wLen);
168 EVP_CIPHER_CTX_free(ctx);
184 #if OPENSSL_VERSION_NUMBER < 0x10100000L
189 static struct configThreadid {
197 #if OPENSSL_VERSION_NUMBER >= 0x30000000L
206 static struct loadProviders {
208 EVP_MD *mdp = EVP_MD_fetch(NULL,
"SHA2-256", NULL);
209 if (mdp) EVP_MD_free(mdp);
211 (void) OSSL_PROVIDER_load(NULL,
"legacy");
XrdCryptoLite * XrdCryptoLite_New_bf32(const char Type)
virtual int Encrypt(const char *key, int keyLen, const char *src, int srcLen, char *dst, int dstLen)=0
virtual int Decrypt(const char *key, int keyLen, const char *src, int srcLen, char *dst, int dstLen)=0
static uint32_t CRC32(const unsigned char *data, int count)
static const char * Init()