Sha256: 523372e62835ec57dd4fac31b8562c918aec8b24af6502d0cca0f4362e35cc35

Contents?: true

Size: 1.66 KB

Versions: 25

Compression:

Stored size: 1.66 KB

Contents

'use strict';

var BN = require('bn.js');
var utils = require('../utils');
var assert = utils.assert;
var cachedProperty = utils.cachedProperty;
var parseBytes = utils.parseBytes;

/**
* @param {EDDSA} eddsa - eddsa instance
* @param {Array<Bytes>|Object} sig -
* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
*/
function Signature(eddsa, sig) {
  this.eddsa = eddsa;

  if (typeof sig !== 'object')
    sig = parseBytes(sig);

  if (Array.isArray(sig)) {
    sig = {
      R: sig.slice(0, eddsa.encodingLength),
      S: sig.slice(eddsa.encodingLength)
    };
  }

  assert(sig.R && sig.S, 'Signature without R or S');

  if (eddsa.isPoint(sig.R))
    this._R = sig.R;
  if (sig.S instanceof BN)
    this._S = sig.S;

  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
}

cachedProperty(Signature, 'S', function S() {
  return this.eddsa.decodeInt(this.Sencoded());
});

cachedProperty(Signature, 'R', function R() {
  return this.eddsa.decodePoint(this.Rencoded());
});

cachedProperty(Signature, 'Rencoded', function Rencoded() {
  return this.eddsa.encodePoint(this.R());
});

cachedProperty(Signature, 'Sencoded', function Sencoded() {
  return this.eddsa.encodeInt(this.S());
});

Signature.prototype.toBytes = function toBytes() {
  return this.Rencoded().concat(this.Sencoded());
};

Signature.prototype.toHex = function toHex() {
  return utils.encode(this.toBytes(), 'hex').toUpperCase();
};

module.exports = Signature;

Version data entries

25 entries across 25 versions & 7 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.18.0 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.18.2 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.16.1 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.15.2 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.18.4 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.18.1 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.14.0 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
tang-0.2.1 spec/tang_app/node_modules/elliptic/lib/elliptic/eddsa/signature.js
tang-0.2.0 spec/tang_app/node_modules/elliptic/lib/elliptic/eddsa/signature.js
tang-0.1.0 spec/tang_app/node_modules/elliptic/lib/elliptic/eddsa/signature.js
tang-0.0.9 spec/tang_app/node_modules/elliptic/lib/elliptic/eddsa/signature.js
enju_library-0.3.8 spec/dummy/node_modules/elliptic/lib/elliptic/eddsa/signature.js
ilog-0.4.1 node_modules/elliptic/lib/elliptic/eddsa/signature.js
ilog-0.4.0 node_modules/elliptic/lib/elliptic/eddsa/signature.js
ilog-0.3.3 node_modules/elliptic/lib/elliptic/eddsa/signature.js
jester-data-8.0.0 node_modules/elliptic/lib/elliptic/eddsa/signature.js
ezii-os-5.2.1 node_modules/elliptic/lib/elliptic/eddsa/signature.js