PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-lib-mpc/test/unit/tss/ecdsa

Просмотр файла: zkVProof.ts

import 'should';
import { randomBytes } from 'crypto';
import { Secp256k1Curve } from '../../../../src/curves';
import { createZkVProof, verifyZkVProof } from '../../../../src/tss/ecdsa/zkVProof';

describe('zkV proof', function () {
  const curve = new Secp256k1Curve();

  it('should create and verify zkV proof', function () {
    const s = curve.scalarRandom();
    const l = curve.scalarRandom();
    const R = curve.basePointMult(curve.scalarRandom());
    const V = curve.pointAdd(curve.pointMultiply(R, s), curve.basePointMult(l));

    verifyZkVProof(V, createZkVProof(V, s, l, R, curve), R, curve).should.be.true();

    const sessionId = randomBytes(32);
    const zkVProof = createZkVProof(V, s, l, R, curve, sessionId);

    verifyZkVProof(V, zkVProof, R, curve, sessionId).should.be.true();
  });

  it('should return false when verifying a proof with partial V', function () {
    const s = curve.scalarRandom();
    const l = curve.scalarRandom();
    const R = curve.basePointMult(curve.scalarRandom());
    const V = curve.pointAdd(curve.pointMultiply(R, s), curve.basePointMult(l));
    const partialV = curve.pointMultiply(R, s); // partial V is missing the lG term

    const zkVProof = createZkVProof(V, s, l, R, curve);

    verifyZkVProof(partialV, zkVProof, R, curve).should.be.false();
  });

  it('should return false when verifying a proof created with bad s', function () {
    const s = curve.scalarRandom();
    const l = curve.scalarRandom();
    const R = curve.basePointMult(curve.scalarRandom());
    const V = curve.pointAdd(curve.pointMultiply(R, s), curve.basePointMult(l));

    const s2 = curve.scalarRandom();
    const zkVProof = createZkVProof(V, s2, l, R, curve);

    verifyZkVProof(V, zkVProof, R, curve).should.be.false();
  });

  it('should return false when verifying a proof with wrong contextual info', function () {
    const s = curve.scalarRandom();
    const l = curve.scalarRandom();
    const R = curve.basePointMult(curve.scalarRandom());
    const V = curve.pointAdd(curve.pointMultiply(R, s), curve.basePointMult(l));

    const sessionId = randomBytes(32);
    const zkVProof = createZkVProof(V, s, l, R, curve, sessionId);

    verifyZkVProof(V, zkVProof, R, curve).should.be.false();
  });
});

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


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