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);