-
Notifications
You must be signed in to change notification settings - Fork 19
Usage Guide
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.
"MD2" | "MD5"| "SHA-1"| "SHA-224" | "SHA-256" | "SHA-384" | "SHA-512"| "keccak"
"HmacMD5" | "HmacSHA1" | "HmacSHA224" | "HmacSHA256" | "HmacSHA384" | "HmacSHA512"
JSHash(message: string, algorithm: string):Promise<string>;
JSHmac(message: string, secret: string, algorithm: string): Promise<string>;
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.
"md2" | "md5" | "sha1" | "sha224" | "sha256" | "sha384" | "sha512"
"HmacMD5" | "HmacSHA1" | "HmacSHA224" | "HmacSHA256" | "HmacSHA384" | "HmacSHA512" | "PBEwithHmacSHA"
"PBEwithHmacSHA1" | "PBEwithHmacSHA224" | "PBEwithHmacSHA256" | "PBEwithHmacSHA384" | "PBEwithHmacSHA512"
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>;
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));