Hasher::hashStatus_t Hasher::hash(const string& filename, string& hash) { unsigned rhashType; switch( p_hashType ) { case tth: rhashType = RHASH_TTH; break; case md5: rhashType = RHASH_MD5; break; case sha1: rhashType = RHASH_SHA1; break; default: LOG(logError) << "Hasher called with no hash algorithm selected"; return noHashSelected; } unsigned char digest[64]; int res = rhash_file(rhashType, filename.c_str(), digest); if( res < 0 ) { LOG(logError) << "LibRHash error: " << strerror(errno); return hashError; } char output[130]; size_t length = 0; if( p_hashType == tth ) length = rhash_print_bytes(output, digest, rhash_get_digest_size(rhashType), RHPR_BASE32); else length = rhash_print_bytes(output, digest, rhash_get_digest_size(rhashType), RHPR_HEX); hash = string(output, length); LOG(logDetailed) << "Calculated " << rhash_get_name(rhashType) << " hash of file " << filename << ": " << hash; return hashSuccess; }
/* * Class: org_sf_rhash_Bindings * Method: rhash_print_bytes * Signature: (JI)[B */ JNIEXPORT jbyteArray JNICALL Java_org_sf_rhash_Bindings_rhash_1print_1bytes (JNIEnv *env, jclass clz, jlong ptr, jint flags) { Digest obj = TO_DIGEST(ptr); char output[130]; int len = rhash_print_bytes(output, obj->hash_data, obj->hash_len, flags); jbyteArray arr = (*env)->NewByteArray(env, len); (*env)->SetByteArrayRegion(env, arr, 0, len, (jbyte*)output); return arr; }