--- a/libpurple/plugins/perl/common/Cipher.xs Fri Oct 18 20:09:56 2013 +0530 +++ b/libpurple/plugins/perl/common/Cipher.xs Sun Oct 20 15:37:08 2013 +0530 @@ -216,3 +216,108 @@ Purple::Cipher purple_rc4_cipher_new() + +MODULE = Purple::Cipher PACKAGE = Purple::Hash PREFIX = purple_hash_ +PROTOTYPES: ENABLE + +gchar_own* +purple_http_digest_calculate_response(algorithm, method, digest_uri, qop, entity, nonce, nonce_count, client_nonce, session_key) + const gchar* algorithm + const gchar* method + const gchar* digest_uri + const gchar* qop + const gchar* entity + const gchar* nonce + const gchar* nonce_count + const gchar* client_nonce + const gchar* session_key + +gchar_own* +purple_http_digest_calculate_session_key(algorithm, username, realm, password, nonce, client_nonce) + const gchar* algorithm + const gchar* username + const gchar* realm + const gchar* password + const gchar* nonce + const gchar* client_nonce + +void +purple_hash_reset(hash) + Purple::Hash hash + +void +purple_hash_append(Purple::Hash hash, guchar *data, size_t length(data)) + PROTOTYPE: $$ + +gboolean +purple_hash_digest(hash, digest) + Purple::Hash hash + SV *digest + PREINIT: + guchar *buff = NULL; + size_t digest_size; + CODE: + digest_size = purple_hash_get_digest_size(hash); + SvUPGRADE_common(digest, SVt_PV); + buff = (guchar *)SvGROW(digest, digest_size); + if (purple_hash_digest(hash, buff, digest_size)) { + SvCUR_set(digest, digest_size); + SvPOK_only(digest); + RETVAL = 1; + } else { + SvSetSV_nosteal(digest, &PL_sv_undef); + RETVAL = 0; + } + OUTPUT: + RETVAL + +gboolean +purple_hash_digest_to_str(hash, digest_s) + Purple::Hash hash + SV *digest_s + PREINIT: + gchar *buff = NULL; + size_t digest_size, str_len; + CODE: + digest_size = purple_hash_get_digest_size(hash); + str_len = 2 * digest_size; + SvUPGRADE_common(digest_s, SVt_PV); + buff = SvGROW(digest_s, str_len + 1); + if (purple_hash_digest_to_str(hash, buff, str_len + 1)) { + SvCUR_set(digest_s, str_len); + SvPOK_only(digest_s); + RETVAL = 1; + } else { + SvSetSV_nosteal(digest_s, &PL_sv_undef); + RETVAL = 0; + } + OUTPUT: + RETVAL + +size_t +purple_hash_get_block_size(hash) + Purple::Hash hash + +MODULE = Purple::Hash PACKAGE = Purple::MD4Hash PREFIX = purple_md4_hash_ +PROTOTYPES: ENABLE + +Purple::Hash +purple_md4_hash_new() + +MODULE = Purple::Hash PACKAGE = Purple::MD5Hash PREFIX = purple_md5_hash_ +PROTOTYPES: ENABLE + +Purple::Hash +purple_md5_hash_new() + +MODULE = Purple::Hash PACKAGE = Purple::SHA1Hash PREFIX = purple_sha1_hash_ +PROTOTYPES: ENABLE + +Purple::Hash +purple_sha1_hash_new() + +MODULE = Purple::Hash PACKAGE = Purple::SHA256Hash PREFIX = purple_sha256_hash_ +PROTOTYPES: ENABLE + +Purple::Hash +purple_sha256_hash_new()