All files / dist/src Cryptography.js

66.67% Statements 8/12
100% Branches 2/2
66.67% Functions 2/3
66.67% Lines 8/12

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                                          1x 1x 1x 1x                                                       2337x                       1x 1x     1x  
"use strict";
/**
 * Copyright 2019 NEM
 *
 * Licensed under the BSD 2-Clause License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://opensource.org/licenses/BSD-2-Clause
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
Object.defineProperty(exports, "__esModule", { value: true });
const js_sha3_1 = require("js-sha3");
const createHash = require('create-hash');
const createHmac = require('create-hmac');
class Cryptography {
    /**
     *
     * @param buffer
     */
    static hash160(buffer) {
        // step 1: SHA256(buffer)
        const sha256Hash = createHash('sha256').update(buffer).digest();
        // step 2: RIPEMD160(shaHash)
        try {
            return createHash('rmd160').update(sha256Hash).digest();
        }
        catch (err) {
            return createHash('ripemd160').update(sha256Hash).digest();
        }
    }
    /**
     * Creates a Hash Message Authentication Code.
     *
     * This method uses SHA512 algorithm and `create-hmac`
     * dependency for the MAC generation.
     *
     * @param   key     {Buffer}
     * @param   data    {Buffer}
     * @return  {Buffer}
     */
    static HMAC(key, data) {
        return createHmac('sha512', key).update(data).digest();
    }
    /**
     * Creates a Keccak Message Authentication Code.
     *
     * @internal This method is used internally for key derivation
     * @param   key         {Buffer}
     * @param   data        {Buffer}
     * @param   publicSalt  {string}
     * @return  {Buffer}
     */
    static KMAC(key, data, publicSalt) {
        const hex = js_sha3_1.kmac256(key, data, 512, publicSalt || '');
        return Buffer.from(hex, 'hex');
    }
}
exports.Cryptography = Cryptography;