All files / src/nacl slow.ts

100% Statements 20/20
100% Branches 2/2
100% Functions 6/6
100% Lines 20/20

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 83 84                            4x       4x           2x                 4x           4x             4x 1x     3x     4x     3x   4x       4x 2x   4x 4x   4x           4x   4x 4x       4x    
/*
 * 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 * as tweetnacl from 'tweetnacl';
 
import { NaclInterface } from './nacl_types';
 
export const box: NaclInterface['box'] = (
	messageInBytes,
	nonceInBytes,
	convertedPublicKey,
	convertedPrivateKey,
) =>
	Buffer.from(
		tweetnacl.box(
			messageInBytes,
			nonceInBytes,
			convertedPublicKey,
			convertedPrivateKey,
		),
	);
 
export const openBox: NaclInterface['openBox'] = (
	cipherBytes,
	nonceBytes,
	convertedPublicKey,
	convertedPrivateKey,
) => {
	const originalMessage = tweetnacl.box.open(
		cipherBytes,
		nonceBytes,
		convertedPublicKey,
		convertedPrivateKey,
	);
	// Returns null if decryption fails
	if (originalMessage === null) {
		throw new Error('Failed to decrypt message');
	}
 
	return Buffer.from(originalMessage);
};
 
export const signDetached: NaclInterface['signDetached'] = (
	messageBytes,
	privateKeyBytes,
) => Buffer.from(tweetnacl.sign.detached(messageBytes, privateKeyBytes));
 
export const verifyDetached: NaclInterface['verifyDetached'] =
	// tslint:disable-next-line no-unbound-method
	tweetnacl.sign.detached.verify;
 
export const getRandomBytes: NaclInterface['getRandomBytes'] = length =>
	Buffer.from(tweetnacl.randomBytes(length));
 
export const getKeyPair: NaclInterface['getKeyPair'] = hashedSeed => {
	const { publicKey, secretKey } = tweetnacl.sign.keyPair.fromSeed(hashedSeed);
 
	return {
		privateKeyBytes: Buffer.from(secretKey),
		publicKeyBytes: Buffer.from(publicKey),
	};
};
 
const PRIVATE_KEY_LENGTH = 32;
 
export const getPublicKey: NaclInterface['getPublicKey'] = privateKey => {
	const { publicKey } = tweetnacl.sign.keyPair.fromSeed(
		privateKey.slice(0, PRIVATE_KEY_LENGTH),
	);
 
	return Buffer.from(publicKey);
};