npm.io
0.1.8 • Published 2 years ago

cwi-crypto

Licence
Open BSV License
Version
0.1.8
Deps
1
Size
135 kB
Vulns
0
Weekly
0
Stars
1

cwi-crypto

This module provides a common implementation for standard cryptographic utilities, ciphers, IV management, low-level promitives and operations.

Exported Functions

Names Description
encrypt and decrypt Symmetric AES-GCM encryption with a 32-byte prepended IV and support for data encoded as a Uint8Array or a string
XOR Bitwise Exclusive-OR between two Uint8Arrays of equal length
keyFromString Derives a CryptoKey from a string with PBKDF2 using a sane iteration count and the given salt

API

encrypt(plaintext: Uint8Array|string, key: CryptoKey, returnType: string) => ciphertext: Uint8Array|string

Encrypts the given plaintext with the given key. Returns the ciphertext.

Parameters
Name Description
plaintext The data to encrypt. May be a String or a Uint8Array
key The CryptoKey object to use for the encryption operation
returnType A string indicating the desired return type. May be either string (default) or Uint8Array
Return Value

The function will either return a string or a Uint8Array representing the ciphertext, depending on the value of returnType.

decrypt(ciphertext: Uint8Array|string, key: CryptoKey, returnType: string) => plaintext: Uint8Array|string

Decrypts the given ciphertext with the given key. Returns the plaintext.

Parameters
Name Description
ciphertext The data to decrypt. May be a String or a Uint8Array
key The CryptoKey object to use for the decryption operation
returnType A string indicating the desired return type. May be either string (default) or Uint8Array
Return Value

The function will either return a string or a Uint8Array representing the plaintext, depending on the value of returnType.

keyFromString({ string: String, salt: Uint8Array }) => key: CryptoKey

Derives a suitable CryptoKey from the password string with PBKDF2 and the given salt.

Parameters
Name Description
string The password string to use
salt a Uint8Array representing the password salt to use
Return Value

The function will return a CryptoKey object representing the derived key.

XOR(k1: Uint8Array, k2: Uint8Array) => result: Uint8Array

Performs a bitwise exclusive OR operation with the given data. Returns the result. Inputs must be the same length.

Parameters
Name Description
k1 A Uint8Array representing the first input to XOR
k2 A Uint8Array representing the second input to XOR
Return Value

The function will return a Uint8Array containing the output data.

Testing

While this is not a React application, the react-scripts package is used for testing. I tried to get Jest to work on its own with the Web Cryptography API, TextEncoder and TextDecoder, but was unable to find a suitable configuration. If anyone can get the tests to pass with only Jest, please feel free to create a pull request.

Adequate testing practices for use in a critical production application should be observed at all times for this library.

License

The license for the code in this repository is the Open BSV License.