react / wstein / node_modules / browserify / node_modules / crypto-browserify / node_modules / create-ecdh / node_modules / elliptic / lib / elliptic / curves.js
80575 views'use strict';12var curves = exports;34var hash = require('hash.js');5var elliptic = require('../elliptic');67var assert = elliptic.utils.assert;89function PresetCurve(options) {10if (options.type === 'short')11this.curve = new elliptic.curve.short(options);12else if (options.type === 'edwards')13this.curve = new elliptic.curve.edwards(options);14else15this.curve = new elliptic.curve.mont(options);16this.g = this.curve.g;17this.n = this.curve.n;18this.hash = options.hash;1920assert(this.g.validate(), 'Invalid curve');21assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');22}23curves.PresetCurve = PresetCurve;2425function defineCurve(name, options) {26Object.defineProperty(curves, name, {27configurable: true,28enumerable: true,29get: function() {30var curve = new PresetCurve(options);31Object.defineProperty(curves, name, {32configurable: true,33enumerable: true,34value: curve35});36return curve;37}38});39}4041defineCurve('p192', {42type: 'short',43prime: 'p192',44p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',45a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',46b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',47n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',48hash: hash.sha256,49gRed: false,50g: [51'188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',52'07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'53]54});5556defineCurve('p224', {57type: 'short',58prime: 'p224',59p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',60a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',61b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',62n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',63hash: hash.sha256,64gRed: false,65g: [66'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',67'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'68]69});7071defineCurve('p256', {72type: 'short',73prime: null,74p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',75a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',76b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',77n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',78hash: hash.sha256,79gRed: false,80g: [81'6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',82'4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'83]84});8586defineCurve('curve25519', {87type: 'mont',88prime: 'p25519',89p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',90a: '76d06',91b: '0',92n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',93hash: hash.sha256,94gRed: false,95g: [96'9'97]98});99100defineCurve('ed25519', {101type: 'edwards',102prime: 'p25519',103p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',104a: '-1',105c: '1',106// -121665 * (121666^(-1)) (mod P)107d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',108n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',109hash: hash.sha256,110gRed: false,111g: [112'216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',113114// 4/5115'6666666666666666666666666666666666666666666666666666666666666658'116]117});118119var pre;120try {121pre = require('./precomputed/secp256k1');122} catch (e) {123pre = undefined;124}125126defineCurve('secp256k1', {127type: 'short',128prime: 'k256',129p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',130a: '0',131b: '7',132n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',133h: '1',134hash: hash.sha256,135136// Precomputed endomorphism137beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',138lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',139basis: [140{141a: '3086d221a7d46bcde86c90e49284eb15',142b: '-e4437ed6010e88286f547fa90abfe4c3'143},144{145a: '114ca50f7a8e2f3f657c1108d9d44cfd8',146b: '3086d221a7d46bcde86c90e49284eb15'147}148],149150gRed: false,151g: [152'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',153'483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',154pre155]156});157158159