privateDecrypt.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/__node_modules/public-encrypt/privateDecrypt.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);}var parseKeys = require('parse-asn1')
  12. var mgf = require('./mgf')
  13. var xor = require('./xor')
  14. var BN = require('bn.js')
  15. var crt = require('browserify-rsa')
  16. var createHash = require('create-hash')
  17. var withPublic = require('./withPublic')
  18. var Buffer = require('safe-buffer').Buffer
  19. module.exports = function privateDecrypt (privateKey, enc, reverse) {
  20. var padding
  21. if (privateKey.padding) {
  22. padding = privateKey.padding
  23. } else if (reverse) {
  24. padding = 1
  25. } else {
  26. padding = 4
  27. }
  28. var key = parseKeys(privateKey)
  29. var k = key.modulus.byteLength()
  30. if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {
  31. throw new Error('decryption error')
  32. }
  33. var msg
  34. if (reverse) {
  35. msg = withPublic(new BN(enc), key)
  36. } else {
  37. msg = crt(enc, key)
  38. }
  39. var zBuffer = Buffer.alloc(k - msg.length)
  40. msg = Buffer.concat([zBuffer, msg], k)
  41. if (padding === 4) {
  42. return oaep(key, msg)
  43. } else if (padding === 1) {
  44. return pkcs1(key, msg, reverse)
  45. } else if (padding === 3) {
  46. return msg
  47. } else {
  48. throw new Error('unknown padding')
  49. }
  50. }
  51. function oaep (key, msg) {
  52. var k = key.modulus.byteLength()
  53. var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
  54. var hLen = iHash.length
  55. if (msg[0] !== 0) {
  56. throw new Error('decryption error')
  57. }
  58. var maskedSeed = msg.slice(1, hLen + 1)
  59. var maskedDb = msg.slice(hLen + 1)
  60. var seed = xor(maskedSeed, mgf(maskedDb, hLen))
  61. var db = xor(maskedDb, mgf(seed, k - hLen - 1))
  62. if (compare(iHash, db.slice(0, hLen))) {
  63. throw new Error('decryption error')
  64. }
  65. var i = hLen
  66. while (db[i] === 0) {
  67. i++
  68. }
  69. if (db[i++] !== 1) {
  70. throw new Error('decryption error')
  71. }
  72. return db.slice(i)
  73. }
  74. function pkcs1 (key, msg, reverse) {
  75. var p1 = msg.slice(0, 2)
  76. var i = 2
  77. var status = 0
  78. while (msg[i++] !== 0) {
  79. if (i >= msg.length) {
  80. status++
  81. break
  82. }
  83. }
  84. var ps = msg.slice(2, i - 1)
  85. if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {
  86. status++
  87. }
  88. if (ps.length < 8) {
  89. status++
  90. }
  91. if (status) {
  92. throw new Error('decryption error')
  93. }
  94. return msg.slice(i)
  95. }
  96. function compare (a, b) {
  97. a = Buffer.from(a)
  98. b = Buffer.from(b)
  99. var dif = 0
  100. var len = a.length
  101. if (a.length !== b.length) {
  102. dif++
  103. len = Math.min(a.length, b.length)
  104. }
  105. var i = -1
  106. while (++i < len) {
  107. dif += (a[i] ^ b[i])
  108. }
  109. return dif
  110. }
  111. }
  112. if (nodeEnv) {
  113. __define(__module.exports, __require, __module);
  114. }
  115. else {
  116. __quick_compile_project__.registerModuleFunc(__filename, function () {
  117. __define(__module.exports, __require, __module);
  118. });
  119. }
  120. })();