@safeheron/master-key-derive
Version:
Mnemonic Generation;
88 lines • 3.51 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ed25519_hd_verify = exports.ed25519_hd_sign = exports.ed25519_verify = exports.ed25519_sign = exports.ed25519_get_pubkey_hex = void 0;
const crypto_bip32_1 = require("@safeheron/crypto-bip32");
const elliptic = require("elliptic");
const crypto_rand_1 = require("@safeheron/crypto-rand");
const utils = elliptic.utils;
const parseBytes = utils.parseBytes;
const Ed25519 = new elliptic.eddsa('ed25519');
function ed25519_get_pubkey_hex(priv) {
if (typeof priv === 'string') {
priv = utils.intFromLE(priv);
}
let A = Ed25519.curve.g.mul(priv);
let A_encode = Ed25519.encodePoint(A);
return utils.toHex(A_encode);
}
exports.ed25519_get_pubkey_hex = ed25519_get_pubkey_hex;
/**
* ed25519_sign
* @param priv BN or hex string
* @param messageHex message in hex string
*/
function ed25519_sign(priv, messageHex) {
return __awaiter(this, void 0, void 0, function* () {
if (typeof priv === 'string') {
priv = utils.intFromLE(priv);
}
let message = parseBytes(messageHex);
let A = Ed25519.curve.g.mul(priv);
let r = yield crypto_rand_1.Rand.randomBNLt(Ed25519.curve.n);
let R = Ed25519.curve.g.mul(r);
let Rencoded = Ed25519.encodePoint(R);
let s_ = Ed25519.hashInt(Rencoded, Ed25519.encodePoint(A), message).mul(priv);
let S = r.add(s_).umod(Ed25519.curve.n);
let sig = Ed25519.makeSignature({ R: R, S: S, Rencoded: Rencoded });
return utils.toHex(sig.Rencoded()) + utils.toHex(sig.Sencoded());
});
}
exports.ed25519_sign = ed25519_sign;
/**
* ed25519_verify
* @param pubHex public key encode in hex format
* @param messageHex
* @param sigHex
*/
function ed25519_verify(pubHex, messageHex, sigHex) {
return Ed25519.verify(messageHex, sigHex, pubHex);
}
exports.ed25519_verify = ed25519_verify;
/**
* ed25519_hd_sign
* @param xprv
* @param path
* @param messageHex
*/
function ed25519_hd_sign(xprv, path, messageHex) {
return __awaiter(this, void 0, void 0, function* () {
let hdKey = crypto_bip32_1.Ed25519HDKey.fromExtendedKey(xprv);
let childHDKey = hdKey.derive(path);
return yield ed25519_sign(childHDKey.privateKey, messageHex);
});
}
exports.ed25519_hd_sign = ed25519_hd_sign;
/**
* ed25519_hd_verify
* @param xpub
* @param path
* @param messageHex
* @param sigHex
*/
function ed25519_hd_verify(xpub, path, messageHex, sigHex) {
let hdKey = crypto_bip32_1.Ed25519HDKey.fromExtendedKey(xpub);
let childHDKey = hdKey.derive(path);
let pubHex = utils.toHex(Ed25519.encodePoint(childHDKey.publicKey));
return ed25519_verify(pubHex, messageHex, sigHex);
}
exports.ed25519_hd_verify = ed25519_hd_verify;
//# sourceMappingURL=ed25519_utils.js.map