UNPKG

@airgap/crypto

Version:

The @airgap/crypto packages provides common crypto functionalities.

56 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deriveEd25519 = void 0; var ed25519_1 = require("@airgap/coinlib-core/dependencies/src/@stablelib/ed25519-1.0.3/packages/ed25519/ed25519"); var sha512_1 = require("@airgap/coinlib-core/dependencies/src/@stablelib/sha512-1.0.1/packages/sha512/sha512"); var hmac_1 = require("@stablelib/hmac"); var derivation_1 = require("../utils/derivation"); var hash_1 = require("../utils/hash"); var ED25519_KEY = 'ed25519 seed'; function deriveEd25519(seed, derivationPath, key) { if (key === void 0) { key = ED25519_KEY; } var masterNode = masterNodeFromSeed(seed, key); return derivationPath !== undefined ? derive(masterNode, derivationPath) : masterNode; } exports.deriveEd25519 = deriveEd25519; function masterNodeFromSeed(seed, key) { var _a = getKey(seed, Buffer.from(key, 'utf-8')), secretKey = _a.key, chainCode = _a.chainCode; return { depth: 0, parentFingerprint: 0x00000000, index: 0, chainCode: chainCode, secretKey: secretKey, publicKey: getPublicKey(secretKey) }; } function derive(masterNode, derivationPath) { var derivationIndices = (0, derivation_1.splitDerivationPath)(derivationPath); return derivationIndices.reduce(function (derivedNode, next) { var parentFingerprint = (0, hash_1.hash160)(derivedNode.publicKey).readUInt32BE(0); var index = next.masked; var indexBuffer = Buffer.alloc(4); indexBuffer.writeUInt32BE(index); var data = Buffer.concat([Buffer.alloc(1, 0), derivedNode.secretKey, indexBuffer]); var _a = getKey(data, derivedNode.chainCode), secretKey = _a.key, chainCode = _a.chainCode; return { depth: derivedNode.depth + 1, parentFingerprint: parentFingerprint, index: index, chainCode: chainCode, secretKey: secretKey, publicKey: getPublicKey(secretKey) }; }, masterNode); } function getKey(data, key) { var I = Buffer.from((0, hmac_1.hmac)(sha512_1.SHA512, key, data)); var IL = I.slice(0, 32); var IR = I.slice(32); return { key: IL, chainCode: IR }; } function getPublicKey(privateKey) { var publicKey = (0, ed25519_1.generateKeyPairFromSeed)(privateKey).publicKey; return Buffer.from(publicKey); } //# sourceMappingURL=derive.js.map