PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/sdk-lib-mpc/dist/src

Просмотр файла: schnorrProof.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSchnorrProof = createSchnorrProof;
exports.verifySchnorrProof = verifySchnorrProof;
/**
 * Implementation of Schnorr Non-interactive Zero-Knowledge Proof.
 * @see {@link https://datatracker.ietf.org/doc/rfc8235/}
 */
const crypto_1 = require("crypto");
const util_1 = require("./util");
/**
 * Create a Schnorr Proof of knowledge of the discrete log of an Elliptic-curve point.
 * @param A The curve point.
 * @param a The discrete log of the curve point.
 * @param curve The elliptic curve.
 * @param additionalCtx Additional contextual information to associate with the proof.
 * @returns The created proof.
 */
function createSchnorrProof(A, a, curve, additionalCtx = Buffer.from('')) {
    const v = curve.scalarRandom();
    const V = curve.basePointMult(v);
    const c = nonInteractiveChallenge(V, A, curve, additionalCtx);
    const r = curve.scalarSub(v, curve.scalarMult(a, c));
    return {
        vPoint: V,
        r: r,
    };
}
/**
 * Calculate challenge for NIZK schnorr proof using Fiat-Shamir transform.
 *
 * @param V The point/public value corresponding to the random scalar value v chosen by the prover.
 * @param A The point to be proved.
 * @param curve The elliptic curve.
 * @param additionalCtx Additional contextual information to associate with the proof.
 * @returns The calculated challenge.
 */
function nonInteractiveChallenge(V, A, curve, additionalCtx) {
    const G = curve.basePointMult(BigInt(1));
    const hash = (0, crypto_1.createHash)('sha256');
    hash.update((0, util_1.bigIntToBufferBE)(G, 32));
    hash.update((0, util_1.bigIntToBufferBE)(V, 32));
    hash.update((0, util_1.bigIntToBufferBE)(A, 32));
    hash.update(additionalCtx);
    return (0, util_1.bigIntFromBufferBE)(hash.digest());
}
/**
 * Verify a Schnorr Proof of knowledge of the discrete log of an Elliptic-curve point.
 * @param A The curve point.
 * @param proof The schnorr proof.
 * @param curve The elliptic curve.
 * @param additionalCtx Additional contextual information that is supposed to associate with the proof.
 * @returns True if the proof checks out.
 */
function verifySchnorrProof(A, proof, curve, additionalCtx = Buffer.from('')) {
    const c = nonInteractiveChallenge(proof.vPoint, A, curve, additionalCtx);
    const rG = curve.basePointMult(proof.r);
    const cA = curve.pointMultiply(A, curve.scalarReduce(c));
    return proof.vPoint === curve.pointAdd(rG, cA);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nobm9yclByb29mLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaG5vcnJQcm9vZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSxnREFpQkM7QUErQkQsZ0RBYUM7QUE5RUQ7OztHQUdHO0FBQ0gsbUNBQW9DO0FBR3BDLGlDQUE4RDtBQUU5RDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQ2hDLENBQVMsRUFDVCxDQUFTLEVBQ1QsS0FBWSxFQUNaLGdCQUF3QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUV2QyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqQyxNQUFNLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUU5RCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJELE9BQU87UUFDTCxNQUFNLEVBQUUsQ0FBQztRQUNULENBQUMsRUFBRSxDQUFDO0tBQ0wsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsdUJBQXVCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFZLEVBQUUsYUFBcUI7SUFDeEYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6QyxNQUFNLElBQUksR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFBLHVCQUFnQixFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBQSx1QkFBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUEsdUJBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUzQixPQUFPLElBQUEseUJBQWtCLEVBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsQ0FBUyxFQUNULEtBQW1CLEVBQ25CLEtBQVksRUFDWixnQkFBd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFFdkMsTUFBTSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgU2Nobm9yciBOb24taW50ZXJhY3RpdmUgWmVyby1Lbm93bGVkZ2UgUHJvb2YuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9yZmM4MjM1L31cbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBCYXNlQ3VydmUgYXMgQ3VydmUgfSBmcm9tICcuL2N1cnZlcyc7XG5pbXBvcnQgeyBTY2hub3JyUHJvb2YgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlIGEgU2Nobm9yciBQcm9vZiBvZiBrbm93bGVkZ2Ugb2YgdGhlIGRpc2NyZXRlIGxvZyBvZiBhbiBFbGxpcHRpYy1jdXJ2ZSBwb2ludC5cbiAqIEBwYXJhbSBBIFRoZSBjdXJ2ZSBwb2ludC5cbiAqIEBwYXJhbSBhIFRoZSBkaXNjcmV0ZSBsb2cgb2YgdGhlIGN1cnZlIHBvaW50LlxuICogQHBhcmFtIGN1cnZlIFRoZSBlbGxpcHRpYyBjdXJ2ZS5cbiAqIEBwYXJhbSBhZGRpdGlvbmFsQ3R4IEFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgcHJvb2YuXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBwcm9vZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjaG5vcnJQcm9vZihcbiAgQTogYmlnaW50LFxuICBhOiBiaWdpbnQsXG4gIGN1cnZlOiBDdXJ2ZSxcbiAgYWRkaXRpb25hbEN0eDogQnVmZmVyID0gQnVmZmVyLmZyb20oJycpXG4pOiBTY2hub3JyUHJvb2Yge1xuICBjb25zdCB2ID0gY3VydmUuc2NhbGFyUmFuZG9tKCk7XG4gIGNvbnN0IFYgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KHYpO1xuXG4gIGNvbnN0IGMgPSBub25JbnRlcmFjdGl2ZUNoYWxsZW5nZShWLCBBLCBjdXJ2ZSwgYWRkaXRpb25hbEN0eCk7XG5cbiAgY29uc3QgciA9IGN1cnZlLnNjYWxhclN1Yih2LCBjdXJ2ZS5zY2FsYXJNdWx0KGEsIGMpKTtcblxuICByZXR1cm4ge1xuICAgIHZQb2ludDogVixcbiAgICByOiByLFxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBjaGFsbGVuZ2UgZm9yIE5JWksgc2Nobm9yciBwcm9vZiB1c2luZyBGaWF0LVNoYW1pciB0cmFuc2Zvcm0uXG4gKlxuICogQHBhcmFtIFYgVGhlIHBvaW50L3B1YmxpYyB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSByYW5kb20gc2NhbGFyIHZhbHVlIHYgY2hvc2VuIGJ5IHRoZSBwcm92ZXIuXG4gKiBAcGFyYW0gQSBUaGUgcG9pbnQgdG8gYmUgcHJvdmVkLlxuICogQHBhcmFtIGN1cnZlIFRoZSBlbGxpcHRpYyBjdXJ2ZS5cbiAqIEBwYXJhbSBhZGRpdGlvbmFsQ3R4IEFkZGl0aW9uYWwgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgcHJvb2YuXG4gKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBjaGFsbGVuZ2UuXG4gKi9cbmZ1bmN0aW9uIG5vbkludGVyYWN0aXZlQ2hhbGxlbmdlKFY6IGJpZ2ludCwgQTogYmlnaW50LCBjdXJ2ZTogQ3VydmUsIGFkZGl0aW9uYWxDdHg6IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIGNvbnN0IEcgPSBjdXJ2ZS5iYXNlUG9pbnRNdWx0KEJpZ0ludCgxKSk7XG5cbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICBoYXNoLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKEcsIDMyKSk7XG4gIGhhc2gudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoViwgMzIpKTtcbiAgaGFzaC51cGRhdGUoYmlnSW50VG9CdWZmZXJCRShBLCAzMikpO1xuICBoYXNoLnVwZGF0ZShhZGRpdGlvbmFsQ3R4KTtcblxuICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckJFKGhhc2guZGlnZXN0KCkpO1xufVxuXG4vKipcbiAqIFZlcmlmeSBhIFNjaG5vcnIgUHJvb2Ygb2Yga25vd2xlZGdlIG9mIHRoZSBkaXNjcmV0ZSBsb2cgb2YgYW4gRWxsaXB0aWMtY3VydmUgcG9pbnQuXG4gKiBAcGFyYW0gQSBUaGUgY3VydmUgcG9pbnQuXG4gKiBAcGFyYW0gcHJvb2YgVGhlIHNjaG5vcnIgcHJvb2YuXG4gKiBAcGFyYW0gY3VydmUgVGhlIGVsbGlwdGljIGN1cnZlLlxuICogQHBhcmFtIGFkZGl0aW9uYWxDdHggQWRkaXRpb25hbCBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRoYXQgaXMgc3VwcG9zZWQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb29mLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvb2YgY2hlY2tzIG91dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNjaG5vcnJQcm9vZihcbiAgQTogYmlnaW50LFxuICBwcm9vZjogU2Nobm9yclByb29mLFxuICBjdXJ2ZTogQ3VydmUsXG4gIGFkZGl0aW9uYWxDdHg6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCcnKVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGMgPSBub25JbnRlcmFjdGl2ZUNoYWxsZW5nZShwcm9vZi52UG9pbnQsIEEsIGN1cnZlLCBhZGRpdGlvbmFsQ3R4KTtcblxuICBjb25zdCByRyA9IGN1cnZlLmJhc2VQb2ludE11bHQocHJvb2Yucik7XG5cbiAgY29uc3QgY0EgPSBjdXJ2ZS5wb2ludE11bHRpcGx5KEEsIGN1cnZlLnNjYWxhclJlZHVjZShjKSk7XG5cbiAgcmV0dXJuIHByb29mLnZQb2ludCA9PT0gY3VydmUucG9pbnRBZGQockcsIGNBKTtcbn1cbiJdfQ==

Выполнить команду


Для локальной разработки. Не используйте в интернете!