char *Encryption::DecryptUsernamePassword(const char* encrypted_buffer, unsigned int buffer_size, int mode) { if(decrypt_func) { return decrypt_func(encrypted_buffer, buffer_size, mode); } return NULL; }
static ssize_t purple_aes_cipher_decrypt(PurpleCipher *cipher, const guchar input[], size_t in_len, guchar output[], size_t out_size) { PurpleAESCipherPrivate *priv = PURPLE_AES_CIPHER_GET_PRIVATE(cipher); purple_aes_cipher_crypt_func decrypt_func; gboolean succ; ssize_t out_len; if (priv->failure) return -1; if (in_len > out_size) { purple_debug_error("cipher-aes", "Output buffer too small\n"); return -1; } if ((in_len % PURPLE_AES_BLOCK_SIZE) != 0 || in_len == 0) { purple_debug_error("cipher-aes", "Malformed data\n"); return -1; } #if defined(PURPLE_AES_USE_GNUTLS) decrypt_func = purple_aes_cipher_gnutls_decrypt; #elif defined(PURPLE_AES_USE_NSS) decrypt_func = purple_aes_cipher_nss_decrypt; #else purple_debug_error("cipher-aes", "No matching decrypt_func\n"); return -1; #endif succ = decrypt_func(input, output, in_len, priv->iv, priv->key, priv->key_size); if (!succ) { memset(output, 0, in_len); return -1; } out_len = purple_aes_cipher_unpad_pkcs7(output, in_len); if (out_len < 0) { memset(output, 0, in_len); return -1; } return out_len; }