84 lines
2.1 KiB
Markdown
84 lines
2.1 KiB
Markdown
|
# iso-crypto [](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)
|