Skip to content

Usage Guide

Drazail edited this page Oct 31, 2020 · 2 revisions

Cross Platform API

Native hashing is only implemented on Android, however, until I get around writing native modules for other platforms ( or if some kind soul makes a PR), you can use JSHash and JSHmac:


NOTE

if you are using expo, JSHash and JSHmac should work out of the box, native implementations however, will require you to eject the project.


Hash Algorithm :

"MD2" | "MD5"| "SHA-1"| "SHA-224" | "SHA-256" | "SHA-384" | "SHA-512"| "keccak"

HMac Algorithm :

"HmacMD5" | "HmacSHA1" | "HmacSHA224" | "HmacSHA256" | "HmacSHA384" | "HmacSHA512"

API:

JSHash(message: string, algorithm: string):Promise<string>;
JSHmac(message: string, secret: string, algorithm: string): Promise<string>;

Example :

import { JSHash, JSHmac, CONSTANTS } from "react-native-hash";

JSHash("message", CONSTANTS.HashAlgorithms.sha256)
  .then(hash => console.log(hash))
  .catch(e => console.log(e));

JSHmac("message", "SecretKey", CONSTANTS.HmacAlgorithms.HmacSHA256)
  .then(hash => console.log(hash))
  .catch(e => console.log(e));
  • keccak implementation defaults to 512 and is not tested against all attack vectors.

check out the example for more information.


Android

Hash Algorithm :

"md2" | "md5" | "sha1" | "sha224" | "sha256" | "sha384" | "sha512"

HMAC Algorithm :

"HmacMD5" | "HmacSHA1" | "HmacSHA224" | "HmacSHA256" | "HmacSHA384" | "HmacSHA512" | "PBEwithHmacSHA" "PBEwithHmacSHA1" | "PBEwithHmacSHA224" | "PBEwithHmacSHA256" | "PBEwithHmacSHA384" | "PBEwithHmacSHA512"

API

hashFile(uri: string, algorithm: string):Promise<string>;
hashFilesForFolder(uri: string, algorithm: string, minFileSize: number, maxFileSize: number, extensionFilter: string, batchSize: number, delay: number ):  Promise<{FilesCount:number, isFinalBatch: bool, batchNumber: number, results: Record<string, string>}>;
  • pass an empty string "" to the hashFilesForFolder as extensionFilter if you dont want to filter the results.
  • if you pass -1 as batchSize, the function will return a promise which resolves into an object with all hashes
  • if you pass any number other than -1 to batchSize, instead of returning the results, null will be returned, but when each batch is ready an event will be fired.
  • the delay parameter determines how many ms should the native thread waits before sending the next batch.
  • check "press to hash Folder with events" and "press to hash Folder" in the example app for more details
hashFilesForFolders(uri: string, algorithm: string, minFileSize: number, maxFileSize: number, extensionFilter: string, batchSize: number, delay: number ):  Promise<{FilesCount:number, isFinalBatch: bool, batchNumber: number, results: Record<string, string>}>;
  • behaves the same as the hashFilesForFolder, but reccieves an String array as first argument.
hashUrl(url: string, HTTPMethod: string, headers: Record<string, string>, algorithm: string):Promise<string>;
hashString(message: string, algorithm: string):Promise<string>;
generateHmac(message: string, key: string, algorithm: string):Promise<string>;

Example

import RnHash, { CONSTANTS } from "react-native-hash";

RnHash.hashFile("uri", CONSTANTS.HashAlgorithms.sha256)
  .then(hash => console.log(hash))
  .catch(e => console.log(e));

RNHash.hashFilesForFolders(
  ["uri", "anotherUri"],
  CONSTANTS.HashAlgorithms.sha256,
  0,
  1048576,
  ".mp3",
  -1,
  0
)
  .then(b => setFolderString(JSON.stringify(b)))
  .catch(er => console.log(er));

  RNHash.hashFilesForFolder(
  "uri",
  CONSTANTS.HashAlgorithms.sha256,
  0,
  1048576,
  ".mp3",
  -1,
  0
)
  .then(b => setFolderString(JSON.stringify(b)))
  .catch(er => console.log(er));

RnHash.hashUrl(
  "url",
  "HTTPMethod",
  { "Content-type": "application/json" },
  CONSTANTS.HashAlgorithms.sha256
)
  .then(hash => console.log(hash))
  .catch(e => console.log(e));

RnHash.hashString("message", CONSTANTS.HashAlgorithms.sha256)
  .then(hash => console.log(hash))
  .catch(e => console.log(e));

RNHash.generateHmac("message", "secretKey", CONSTANTS.HmacAlgorithms.HmacSHA512)
  .then(HMAC => console.log(HMAC))
  .catch(er => console.log(er));