index.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/__node_modules/parse-asn1/index.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 asn1 = require('./asn1')
  12. var aesid = require('./aesid.json')
  13. var fixProc = require('./fixProc')
  14. var ciphers = require('browserify-aes')
  15. var compat = require('pbkdf2')
  16. var Buffer = require('safe-buffer').Buffer
  17. module.exports = parseKeys
  18. function parseKeys (buffer) {
  19. var password
  20. if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
  21. password = buffer.passphrase
  22. buffer = buffer.key
  23. }
  24. if (typeof buffer === 'string') {
  25. buffer = Buffer.from(buffer)
  26. }
  27. var stripped = fixProc(buffer, password)
  28. var type = stripped.tag
  29. var data = stripped.data
  30. var subtype, ndata
  31. switch (type) {
  32. case 'CERTIFICATE':
  33. ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
  34. // falls through
  35. case 'PUBLIC KEY':
  36. if (!ndata) {
  37. ndata = asn1.PublicKey.decode(data, 'der')
  38. }
  39. subtype = ndata.algorithm.algorithm.join('.')
  40. switch (subtype) {
  41. case '1.2.840.113549.1.1.1':
  42. return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
  43. case '1.2.840.10045.2.1':
  44. ndata.subjectPrivateKey = ndata.subjectPublicKey
  45. return {
  46. type: 'ec',
  47. data: ndata
  48. }
  49. case '1.2.840.10040.4.1':
  50. ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
  51. return {
  52. type: 'dsa',
  53. data: ndata.algorithm.params
  54. }
  55. default: throw new Error('unknown key id ' + subtype)
  56. }
  57. // throw new Error('unknown key type ' + type)
  58. case 'ENCRYPTED PRIVATE KEY':
  59. data = asn1.EncryptedPrivateKey.decode(data, 'der')
  60. data = decrypt(data, password)
  61. // falls through
  62. case 'PRIVATE KEY':
  63. ndata = asn1.PrivateKey.decode(data, 'der')
  64. subtype = ndata.algorithm.algorithm.join('.')
  65. switch (subtype) {
  66. case '1.2.840.113549.1.1.1':
  67. return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
  68. case '1.2.840.10045.2.1':
  69. return {
  70. curve: ndata.algorithm.curve,
  71. privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
  72. }
  73. case '1.2.840.10040.4.1':
  74. ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
  75. return {
  76. type: 'dsa',
  77. params: ndata.algorithm.params
  78. }
  79. default: throw new Error('unknown key id ' + subtype)
  80. }
  81. // throw new Error('unknown key type ' + type)
  82. case 'RSA PUBLIC KEY':
  83. return asn1.RSAPublicKey.decode(data, 'der')
  84. case 'RSA PRIVATE KEY':
  85. return asn1.RSAPrivateKey.decode(data, 'der')
  86. case 'DSA PRIVATE KEY':
  87. return {
  88. type: 'dsa',
  89. params: asn1.DSAPrivateKey.decode(data, 'der')
  90. }
  91. case 'EC PRIVATE KEY':
  92. data = asn1.ECPrivateKey.decode(data, 'der')
  93. return {
  94. curve: data.parameters.value,
  95. privateKey: data.privateKey
  96. }
  97. default: throw new Error('unknown key type ' + type)
  98. }
  99. }
  100. parseKeys.signature = asn1.signature
  101. function decrypt (data, password) {
  102. var salt = data.algorithm.decrypt.kde.kdeparams.salt
  103. var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
  104. var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
  105. var iv = data.algorithm.decrypt.cipher.iv
  106. var cipherText = data.subjectPrivateKey
  107. var keylen = parseInt(algo.split('-')[1], 10) / 8
  108. var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')
  109. var cipher = ciphers.createDecipheriv(algo, key, iv)
  110. var out = []
  111. out.push(cipher.update(cipherText))
  112. out.push(cipher.final())
  113. return Buffer.concat(out)
  114. }
  115. }
  116. if (nodeEnv) {
  117. __define(__module.exports, __require, __module);
  118. }
  119. else {
  120. __quick_compile_project__.registerModuleFunc(__filename, function () {
  121. __define(__module.exports, __require, __module);
  122. });
  123. }
  124. })();