All files / src keys.ts

100% Statements 23/23
100% Branches 0/0
100% Functions 5/5
100% Lines 23/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82                            4x 4x 4x 4x                       4x     8x 8x   8x           4x           6x   6x           4x   4x     1x 1x   1x           4x 1x   1x     4x 1x 1x   1x    
/*
 * Copyright © 2019 Lisk Foundation
 *
 * See the LICENSE file at the top-level directory of this distribution
 * for licensing information.
 *
 * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation,
 * no part of this software, including this file, may be copied, modified,
 * propagated, or distributed except according to the terms contained in the
 * LICENSE file.
 *
 * Removal or modification of this copyright notice is prohibited.
 *
 */
import { bufferToHex, hexToBuffer } from './buffer';
import { getAddressFromPublicKey } from './convert';
import { hash } from './hash';
import { getKeyPair, getPublicKey } from './nacl';
 
export interface KeypairBytes {
	readonly privateKeyBytes: Buffer;
	readonly publicKeyBytes: Buffer;
}
 
export interface Keypair {
	readonly privateKey: string;
	readonly publicKey: string;
}
 
export const getPrivateAndPublicKeyBytesFromPassphrase = (
	passphrase: string,
): KeypairBytes => {
	const hashed = hash(passphrase, 'utf8');
	const { publicKeyBytes, privateKeyBytes } = getKeyPair(hashed);
 
	return {
		privateKeyBytes,
		publicKeyBytes,
	};
};
 
export const getPrivateAndPublicKeyFromPassphrase = (
	passphrase: string,
): Keypair => {
	const {
		privateKeyBytes,
		publicKeyBytes,
	} = getPrivateAndPublicKeyBytesFromPassphrase(passphrase);
 
	return {
		privateKey: bufferToHex(privateKeyBytes),
		publicKey: bufferToHex(publicKeyBytes),
	};
};
 
export const getKeys = getPrivateAndPublicKeyFromPassphrase;
 
export const getAddressAndPublicKeyFromPassphrase = (
	passphrase: string,
): { readonly address: string; readonly publicKey: string } => {
	const { publicKey } = getKeys(passphrase);
	const address = getAddressFromPublicKey(publicKey);
 
	return {
		address,
		publicKey,
	};
};
 
export const getAddressFromPassphrase = (passphrase: string): string => {
	const { publicKey } = getKeys(passphrase);
 
	return getAddressFromPublicKey(publicKey);
};
 
export const getAddressFromPrivateKey = (privateKey: string): string => {
	const publicKeyBytes = getPublicKey(hexToBuffer(privateKey));
	const publicKey = bufferToHex(publicKeyBytes);
 
	return getAddressFromPublicKey(publicKey);
};