84 lines
2.1 KiB
Markdown
Raw Permalink Normal View History

2025-04-19 15:38:48 +08:00
# iso-crypto [![npm version](https://badge.fury.io/js/%40pedrouid%2Fiso-crypto.svg)](https://badge.fury.io/js/%40pedrouid%2Fiso-crypto)
Isomorphic Cryptography Library for AES, HMAC and SHA2
## Description
This library supports AES, HMAC and SHA2 methods through native NodeJS and Browser APIs when available and fallbacks to vanilla javascript are already provided.
## Usage
### RandomBytes
```typescript
import * as isoCrypto from "iso-crypto";
const length = 32;
const key = isoCrypto.randomBytes(length);
// key.length === length
```
### AES
```typescript
import * as isoCrypto from "iso-crypto";
import * as encoding from "@walletconnect/encoding";
const key = isoCrypto.randomBytes(32);
const iv = isoCrypto.randomBytes(16);
const str = "test message to encrypt";
const msg = encoding.utf8ToArray(str);
const ciphertext = await isoCrypto.aesCbcEncrypt(iv, key, msg);
const decrypted = await isoCrypto.aesCbcDecrypt(iv, key, ciphertext);
// decrypted === str
```
### HMAC
```typescript
import * as isoCrypto from "iso-crypto";
import * as encoding from "@walletconnect/encoding";
const key = isoCrypto.randomBytes(32);
const iv = isoCrypto.randomBytes(16);
const macKey = encoding.concatArrays(iv, key);
const dataToMac = encoding.concatArrays(iv, key, msg);
const mac = await isoCrypto.hmacSha256Sign(macKey, dataToMac);
const result = await isoCrypto.hmacSha256Verify(macKey, dataToMac, mac);
// result will return true if match
```
### SHA2
```typescript
import * as isoCrypto from "iso-crypto";
import * as encoding from "@walletconnect/encoding";
// SHA256
const str = "test message to hash";
const msg = encoding.utf8ToArray(str);
const hash = await isoCrypto.sha256(str);
// SHA512
const str = "test message to hash";
const msg = encoding.utf8ToArray(str);
const hash = await isoCrypto.sha512(str);
```
## React-Native Support
This library is intended for use in a Browser or NodeJS environment, however it is possible to use in a React-Native environment if NodeJS modules are polyfilled with `react-native-crypto`, read more [here](https://github.com/tradle/react-native-crypto).
## License
[MIT License](LICENSE.md)