示例#1
0
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;
}
示例#2
0
文件: bindings.c 项目: 0-wiz-0/RHash
/*
 * 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;
}