Helpers.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*Generates a random long integer (8 bytes), which is optionally signed*/
  2. function generateRandomLong() {
  3. let buf = Buffer.from(generateRandomBytes(8),); // 0x12345678 = 305419896
  4. return (buf.readUInt32BE(0));
  5. }
  6. /*Generates a random bytes array*/
  7. function generateRandomBytes(count) {
  8. const crypto = require('crypto');
  9. return crypto.randomBytes(count);
  10. }
  11. function loadSettings(path = "../api/settings") {
  12. let settings = {};
  13. let left, right, value_pair;
  14. const fs = require("fs");
  15. let data = fs.readFileSync(path, 'utf-8');
  16. for (let line of data.toString().split('\n')) {
  17. value_pair = line.split("=");
  18. if (value_pair.length !== 2) {
  19. break;
  20. }
  21. left = value_pair[0].replace(/ \r?\n|\r/g, '');
  22. right = value_pair[1].replace(/ \r?\n|\r/g, '');
  23. if (!isNaN(right)) {
  24. settings[left] = Number.parseInt(right);
  25. } else {
  26. settings[left] = right;
  27. }
  28. }
  29. return settings;
  30. }
  31. /*Calculate the key based on Telegram guidelines, specifying whether it's the client or not*/
  32. function calcKey(shared_key, msg_key, client) {
  33. let x = client !== null ? 0 : 8;
  34. let iv, key, sha1a, sha1b, sha1c, sha1d;
  35. sha1a = sha1((msg_key + shared_key.slice(x, (x + 32))));
  36. sha1b = sha1(((shared_key.slice((x + 32), (x + 48)) + msg_key) + shared_key.slice((x + 48), (x + 64))));
  37. sha1c = sha1((shared_key.slice((x + 64), (x + 96)) + msg_key));
  38. sha1d = sha1((msg_key + shared_key.slice((x + 96), (x + 128))));
  39. key = ((sha1a.slice(0, 8) + sha1b.slice(8, 20)) + sha1c.slice(4, 16));
  40. iv = (((sha1a.slice(8, 20) + sha1b.slice(0, 8)) + sha1c.slice(16, 20)) + sha1d.slice(0, 8));
  41. return [key, iv];
  42. }
  43. function calcMsgKey(data) {
  44. return sha1(data).slice(4, 20);
  45. }
  46. function generateKeyDataFromNonces() {
  47. let hash1, hash2, hash3;
  48. /*hash1 = sha1(bytes((new_nonce + server_nonce)));
  49. hash2 = sha1(bytes((server_nonce + new_nonce)));
  50. hash3 = sha1(bytes((new_nonce + new_nonce)));
  51. */
  52. }
  53. /*Calculates the SHA1 digest for the given data*/
  54. function sha1(data) {
  55. const crypto = require('crypto')
  56. , shasum = crypto.createHash('sha1');
  57. shasum.update(data);
  58. console.log(shasum.digest());
  59. }
  60. sha1("test");