12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- /* Import modules. */
- import {
- randomBytes,
- sha256,
- } from '@nexajs/crypto'
- import {
- binToHex,
- hexToBin,
- } from '@nexajs/utils'
- /* Set constants. */
- const ENTROPY_BYTES_LENGTH = 32
- /**
- * Create Wallet
- *
- * Generates 128-bits of random entropy and saves it to the
- * local browser.
- */
- export default function (_entropy) {
- let entropy
- if (_entropy) {
- this.setEntropy(_entropy)
- return _entropy
- }
- /* Return random bytes (as hex string). */
- const localBytes = binToHex(randomBytes(ENTROPY_BYTES_LENGTH))
- /* Hash the entropy. */
- const hashed = sha256(hexToBin(localBytes))
- /* Set (final 128-bit) entropy. */
- // NOTE: Serialize to a 16-byte (128-bit) Hex String.
- // NOTE: We use 16-bytes to remain compatible with popular HD wallets.
- entropy = binToHex(hashed).slice(0, 16) + binToHex(hashed).slice(-16)
- this.setEntropy(entropy)
- console.info('New (128-bit) wallet created!')
- return entropy
- }
|