browser.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/__node_modules/create-ecdh/browser.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}(function (Buffer){
  12. var elliptic = require('elliptic')
  13. var BN = require('bn.js')
  14. module.exports = function createECDH (curve) {
  15. return new ECDH(curve)
  16. }
  17. var aliases = {
  18. secp256k1: {
  19. name: 'secp256k1',
  20. byteLength: 32
  21. },
  22. secp224r1: {
  23. name: 'p224',
  24. byteLength: 28
  25. },
  26. prime256v1: {
  27. name: 'p256',
  28. byteLength: 32
  29. },
  30. prime192v1: {
  31. name: 'p192',
  32. byteLength: 24
  33. },
  34. ed25519: {
  35. name: 'ed25519',
  36. byteLength: 32
  37. },
  38. secp384r1: {
  39. name: 'p384',
  40. byteLength: 48
  41. },
  42. secp521r1: {
  43. name: 'p521',
  44. byteLength: 66
  45. }
  46. }
  47. aliases.p224 = aliases.secp224r1
  48. aliases.p256 = aliases.secp256r1 = aliases.prime256v1
  49. aliases.p192 = aliases.secp192r1 = aliases.prime192v1
  50. aliases.p384 = aliases.secp384r1
  51. aliases.p521 = aliases.secp521r1
  52. function ECDH (curve) {
  53. this.curveType = aliases[curve]
  54. if (!this.curveType) {
  55. this.curveType = {
  56. name: curve
  57. }
  58. }
  59. this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap
  60. this.keys = void 0
  61. }
  62. ECDH.prototype.generateKeys = function (enc, format) {
  63. this.keys = this.curve.genKeyPair()
  64. return this.getPublicKey(enc, format)
  65. }
  66. ECDH.prototype.computeSecret = function (other, inenc, enc) {
  67. inenc = inenc || 'utf8'
  68. if (!Buffer.isBuffer(other)) {
  69. other = new Buffer(other, inenc)
  70. }
  71. var otherPub = this.curve.keyFromPublic(other).getPublic()
  72. var out = otherPub.mul(this.keys.getPrivate()).getX()
  73. return formatReturnValue(out, enc, this.curveType.byteLength)
  74. }
  75. ECDH.prototype.getPublicKey = function (enc, format) {
  76. var key = this.keys.getPublic(format === 'compressed', true)
  77. if (format === 'hybrid') {
  78. if (key[key.length - 1] % 2) {
  79. key[0] = 7
  80. } else {
  81. key[0] = 6
  82. }
  83. }
  84. return formatReturnValue(key, enc)
  85. }
  86. ECDH.prototype.getPrivateKey = function (enc) {
  87. return formatReturnValue(this.keys.getPrivate(), enc)
  88. }
  89. ECDH.prototype.setPublicKey = function (pub, enc) {
  90. enc = enc || 'utf8'
  91. if (!Buffer.isBuffer(pub)) {
  92. pub = new Buffer(pub, enc)
  93. }
  94. this.keys._importPublic(pub)
  95. return this
  96. }
  97. ECDH.prototype.setPrivateKey = function (priv, enc) {
  98. enc = enc || 'utf8'
  99. if (!Buffer.isBuffer(priv)) {
  100. priv = new Buffer(priv, enc)
  101. }
  102. var _priv = new BN(priv)
  103. _priv = _priv.toString(16)
  104. this.keys = this.curve.genKeyPair()
  105. this.keys._importPrivate(_priv)
  106. return this
  107. }
  108. function formatReturnValue (bn, enc, len) {
  109. if (!Array.isArray(bn)) {
  110. bn = bn.toArray()
  111. }
  112. var buf = new Buffer(bn)
  113. if (len && buf.length < len) {
  114. var zeros = new Buffer(len - buf.length)
  115. zeros.fill(0)
  116. buf = Buffer.concat([zeros, buf])
  117. }
  118. if (!enc) {
  119. return buf
  120. } else {
  121. return buf.toString(enc)
  122. }
  123. }
  124. }).call(this,require("buffer").Buffer)
  125. }
  126. if (nodeEnv) {
  127. __define(__module.exports, __require, __module);
  128. }
  129. else {
  130. __quick_compile_project__.registerModuleFunc(__filename, function () {
  131. __define(__module.exports, __require, __module);
  132. });
  133. }
  134. })();