sroosh 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CryptoFile-BROWSER.d.ts +2 -0
- package/CryptoFile-BROWSER.js +23 -0
- package/CryptoFile.d.ts +2 -0
- package/CryptoFile.js +23 -0
- package/Helpers.d.ts +151 -0
- package/Helpers.js +480 -0
- package/Password.d.ts +15 -0
- package/Password.js +271 -0
- package/README.md +105 -0
- package/Utils.d.ts +228 -0
- package/Utils.js +1248 -0
- package/Version.d.ts +1 -0
- package/Version.js +4 -0
- package/client/2fa.d.ts +48 -0
- package/client/2fa.js +109 -0
- package/client/TelegramClient.d.ts +1042 -0
- package/client/TelegramClient.js +1244 -0
- package/client/account.d.ts +0 -0
- package/client/account.js +1 -0
- package/client/auth.d.ts +93 -0
- package/client/auth.js +363 -0
- package/client/bots.d.ts +6 -0
- package/client/bots.js +24 -0
- package/client/buttons.d.ts +4 -0
- package/client/buttons.js +87 -0
- package/client/chats.d.ts +46 -0
- package/client/chats.js +350 -0
- package/client/dialogs.d.ts +52 -0
- package/client/dialogs.js +174 -0
- package/client/downloads.d.ts +157 -0
- package/client/downloads.js +598 -0
- package/client/fs-BROWSER.d.ts +10 -0
- package/client/fs-BROWSER.js +13 -0
- package/client/fs.d.ts +1 -0
- package/client/fs.js +13 -0
- package/client/index.d.ts +15 -0
- package/client/index.js +50 -0
- package/client/messageParse.d.ts +17 -0
- package/client/messageParse.js +191 -0
- package/client/messages.d.ts +259 -0
- package/client/messages.js +804 -0
- package/client/os-BROWSER.d.ts +5 -0
- package/client/os-BROWSER.js +10 -0
- package/client/os.d.ts +2 -0
- package/client/os.js +23 -0
- package/client/path-BROWSER.d.ts +7 -0
- package/client/path-BROWSER.js +8 -0
- package/client/path.d.ts +2 -0
- package/client/path.js +7 -0
- package/client/telegramBaseClient.d.ts +239 -0
- package/client/telegramBaseClient.js +369 -0
- package/client/updates.d.ts +31 -0
- package/client/updates.js +254 -0
- package/client/uploads.d.ts +137 -0
- package/client/uploads.js +514 -0
- package/client/users.d.ts +29 -0
- package/client/users.js +491 -0
- package/crypto/AuthKey.d.ts +20 -0
- package/crypto/AuthKey.js +76 -0
- package/crypto/CTR.d.ts +6 -0
- package/crypto/CTR.js +35 -0
- package/crypto/Factorizator.d.ts +19 -0
- package/crypto/Factorizator.js +74 -0
- package/crypto/IGE.d.ts +18 -0
- package/crypto/IGE.js +34 -0
- package/crypto/RSA.d.ts +15 -0
- package/crypto/RSA.js +150 -0
- package/crypto/converters.d.ts +19 -0
- package/crypto/converters.js +52 -0
- package/crypto/crypto.d.ts +27 -0
- package/crypto/crypto.js +117 -0
- package/crypto/words.d.ts +6 -0
- package/crypto/words.js +48 -0
- package/entityCache.d.ts +7 -0
- package/entityCache.js +79 -0
- package/errors/Common.d.ts +72 -0
- package/errors/Common.js +122 -0
- package/errors/RPCBaseErrors.d.ts +84 -0
- package/errors/RPCBaseErrors.js +134 -0
- package/errors/RPCErrorList.d.ts +37 -0
- package/errors/RPCErrorList.js +117 -0
- package/errors/index.d.ts +11 -0
- package/errors/index.js +29 -0
- package/events/Album.d.ts +36 -0
- package/events/Album.js +104 -0
- package/events/CallbackQuery.d.ts +74 -0
- package/events/CallbackQuery.js +193 -0
- package/events/DeletedMessage.d.ts +45 -0
- package/events/DeletedMessage.js +63 -0
- package/events/EditedMessage.d.ts +30 -0
- package/events/EditedMessage.js +41 -0
- package/events/NewMessage.d.ts +89 -0
- package/events/NewMessage.js +182 -0
- package/events/Raw.d.ts +29 -0
- package/events/Raw.js +43 -0
- package/events/common.d.ts +66 -0
- package/events/common.js +141 -0
- package/events/index.d.ts +2 -0
- package/events/index.js +8 -0
- package/extensions/AsyncQueue.d.ts +10 -0
- package/extensions/AsyncQueue.js +32 -0
- package/extensions/BinaryReader.d.ts +100 -0
- package/extensions/BinaryReader.js +242 -0
- package/extensions/BinaryWriter.d.ts +7 -0
- package/extensions/BinaryWriter.js +15 -0
- package/extensions/Deferred.d.ts +8 -0
- package/extensions/Deferred.js +16 -0
- package/extensions/Logger.d.ts +58 -0
- package/extensions/Logger.js +127 -0
- package/extensions/MessagePacker.d.ts +22 -0
- package/extensions/MessagePacker.js +154 -0
- package/extensions/PendingState.d.ts +12 -0
- package/extensions/PendingState.js +29 -0
- package/extensions/PromisedNetSockets-BROWSER.d.ts +8 -0
- package/extensions/PromisedNetSockets-BROWSER.js +12 -0
- package/extensions/PromisedNetSockets.d.ts +25 -0
- package/extensions/PromisedNetSockets.js +178 -0
- package/extensions/PromisedWebSockets.d.ts +19 -0
- package/extensions/PromisedWebSockets.js +134 -0
- package/extensions/html.d.ts +5 -0
- package/extensions/html.js +213 -0
- package/extensions/index.d.ts +7 -0
- package/extensions/index.js +17 -0
- package/extensions/markdown.d.ts +5 -0
- package/extensions/markdown.js +76 -0
- package/extensions/markdownv2.d.ts +5 -0
- package/extensions/markdownv2.js +51 -0
- package/extensions/net-BROWSER.d.ts +8 -0
- package/extensions/net-BROWSER.js +11 -0
- package/extensions/net.d.ts +1 -0
- package/extensions/net.js +13 -0
- package/extensions/socks-BROWSER.d.ts +3 -0
- package/extensions/socks-BROWSER.js +6 -0
- package/extensions/socks.d.ts +1 -0
- package/extensions/socks.js +13 -0
- package/index.d.ts +14 -0
- package/index.js +48 -0
- package/inspect-BROWSER.d.ts +3 -0
- package/inspect-BROWSER.js +6 -0
- package/inspect.d.ts +1 -0
- package/inspect.js +5 -0
- package/network/Authenticator.d.ts +12 -0
- package/network/Authenticator.js +193 -0
- package/network/MTProtoPlainSender.d.ts +19 -0
- package/network/MTProtoPlainSender.js +74 -0
- package/network/MTProtoSender.d.ts +291 -0
- package/network/MTProtoSender.js +854 -0
- package/network/MTProtoState.d.ts +103 -0
- package/network/MTProtoState.js +267 -0
- package/network/RequestState.d.ts +19 -0
- package/network/RequestState.js +35 -0
- package/network/connection/Connection.d.ts +71 -0
- package/network/connection/Connection.js +157 -0
- package/network/connection/ConnectionWebSocket.d.ts +19 -0
- package/network/connection/ConnectionWebSocket.js +77 -0
- package/network/connection/CustomIntermediatePacketCodec.d.ts +8 -0
- package/network/connection/CustomIntermediatePacketCodec.js +25 -0
- package/network/connection/CustomPromisedWebSockets.d.ts +22 -0
- package/network/connection/CustomPromisedWebSockets.js +170 -0
- package/network/connection/ObfuscatedIO.d.ts +12 -0
- package/network/connection/ObfuscatedIO.js +64 -0
- package/network/connection/TCPAbridged.d.ts +20 -0
- package/network/connection/TCPAbridged.js +58 -0
- package/network/connection/TCPFull.d.ts +17 -0
- package/network/connection/TCPFull.js +61 -0
- package/network/connection/TCPMTProxy.d.ts +50 -0
- package/network/connection/TCPMTProxy.js +121 -0
- package/network/connection/TCPObfuscated.d.ts +18 -0
- package/network/connection/TCPObfuscated.js +79 -0
- package/network/connection/index.d.ts +5 -0
- package/network/connection/index.js +13 -0
- package/network/index.d.ts +11 -0
- package/network/index.js +24 -0
- package/package.json +73 -0
- package/platform.d.ts +3 -0
- package/platform.js +6 -0
- package/requestIter.d.ts +24 -0
- package/requestIter.js +107 -0
- package/sessions/Abstract.d.ts +103 -0
- package/sessions/Abstract.js +6 -0
- package/sessions/CacheApiSession.d.ts +18 -0
- package/sessions/CacheApiSession.js +99 -0
- package/sessions/Memory.d.ts +38 -0
- package/sessions/Memory.js +272 -0
- package/sessions/StoreSession.d.ts +14 -0
- package/sessions/StoreSession.js +77 -0
- package/sessions/StringSession.d.ts +33 -0
- package/sessions/StringSession.js +116 -0
- package/sessions/index.d.ts +4 -0
- package/sessions/index.js +13 -0
- package/sessions/localStorage-BROWSER.d.ts +3 -0
- package/sessions/localStorage-BROWSER.js +9 -0
- package/sessions/localStorage.d.ts +1 -0
- package/sessions/localStorage.js +4 -0
- package/tl/AllTLObjects.d.ts +3 -0
- package/tl/AllTLObjects.js +17 -0
- package/tl/MTProtoRequest.d.ts +19 -0
- package/tl/MTProtoRequest.js +38 -0
- package/tl/api.d.ts +2 -0
- package/tl/api.js +507 -0
- package/tl/apiTl.d.ts +2 -0
- package/tl/apiTl.js +1638 -0
- package/tl/core/GZIPPacked.d.ts +16 -0
- package/tl/core/GZIPPacked.js +51 -0
- package/tl/core/MessageContainer.d.ts +12 -0
- package/tl/core/MessageContainer.js +42 -0
- package/tl/core/RPCResult.d.ts +15 -0
- package/tl/core/RPCResult.js +32 -0
- package/tl/core/TLMessage.d.ts +10 -0
- package/tl/core/TLMessage.js +14 -0
- package/tl/core/index.d.ts +6 -0
- package/tl/core/index.js +16 -0
- package/tl/custom/button.d.ts +25 -0
- package/tl/custom/button.js +78 -0
- package/tl/custom/chatGetter.d.ts +30 -0
- package/tl/custom/chatGetter.js +114 -0
- package/tl/custom/dialog.d.ts +31 -0
- package/tl/custom/dialog.js +40 -0
- package/tl/custom/draft.d.ts +22 -0
- package/tl/custom/draft.js +48 -0
- package/tl/custom/file.d.ts +22 -0
- package/tl/custom/file.js +68 -0
- package/tl/custom/forward.d.ts +16 -0
- package/tl/custom/forward.js +47 -0
- package/tl/custom/index.d.ts +1 -0
- package/tl/custom/index.js +5 -0
- package/tl/custom/inlineResult.d.ts +33 -0
- package/tl/custom/inlineResult.js +87 -0
- package/tl/custom/inlineResults.d.ts +21 -0
- package/tl/custom/inlineResults.js +26 -0
- package/tl/custom/message.d.ts +428 -0
- package/tl/custom/message.js +702 -0
- package/tl/custom/messageButton.d.ts +55 -0
- package/tl/custom/messageButton.js +152 -0
- package/tl/custom/senderGetter.d.ts +29 -0
- package/tl/custom/senderGetter.js +55 -0
- package/tl/generateModule.d.ts +1 -0
- package/tl/generateModule.js +17 -0
- package/tl/generationHelpers.d.ts +12 -0
- package/tl/generationHelpers.js +289 -0
- package/tl/index.d.ts +3 -0
- package/tl/index.js +10 -0
- package/tl/patched/index.d.ts +2 -0
- package/tl/patched/index.js +77 -0
- package/tl/schemaTl.d.ts +2 -0
- package/tl/schemaTl.js +64 -0
- package/tl/types-generator/generate.d.ts +1 -0
- package/tl/types-generator/generate.js +84 -0
- package/tl/types-generator/template.d.ts +6 -0
- package/tl/types-generator/template.js +257 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Factorizator = void 0;
|
|
7
|
+
const big_integer_1 = __importDefault(require("big-integer"));
|
|
8
|
+
const Helpers_1 = require("../Helpers");
|
|
9
|
+
class Factorizator {
|
|
10
|
+
/**
|
|
11
|
+
* Calculates the greatest common divisor
|
|
12
|
+
* @param a {BigInteger}
|
|
13
|
+
* @param b {BigInteger}
|
|
14
|
+
* @returns {BigInteger}
|
|
15
|
+
*/
|
|
16
|
+
static gcd(a, b) {
|
|
17
|
+
while (b.neq(big_integer_1.default.zero)) {
|
|
18
|
+
const temp = b;
|
|
19
|
+
b = a.remainder(b);
|
|
20
|
+
a = temp;
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Factorizes the given number and returns both the divisor and the number divided by the divisor
|
|
26
|
+
* @param pq {BigInteger}
|
|
27
|
+
* @returns {{p: *, q: *}}
|
|
28
|
+
*/
|
|
29
|
+
static factorize(pq) {
|
|
30
|
+
if (pq.remainder(2).equals(big_integer_1.default.zero)) {
|
|
31
|
+
return { p: (0, big_integer_1.default)(2), q: pq.divide((0, big_integer_1.default)(2)) };
|
|
32
|
+
}
|
|
33
|
+
let y = big_integer_1.default.randBetween((0, big_integer_1.default)(1), pq.minus(1));
|
|
34
|
+
const c = big_integer_1.default.randBetween((0, big_integer_1.default)(1), pq.minus(1));
|
|
35
|
+
const m = big_integer_1.default.randBetween((0, big_integer_1.default)(1), pq.minus(1));
|
|
36
|
+
let g = big_integer_1.default.one;
|
|
37
|
+
let r = big_integer_1.default.one;
|
|
38
|
+
let q = big_integer_1.default.one;
|
|
39
|
+
let x = big_integer_1.default.zero;
|
|
40
|
+
let ys = big_integer_1.default.zero;
|
|
41
|
+
let k;
|
|
42
|
+
while (g.eq(big_integer_1.default.one)) {
|
|
43
|
+
x = y;
|
|
44
|
+
for (let i = 0; (0, big_integer_1.default)(i).lesser(r); i++) {
|
|
45
|
+
y = (0, Helpers_1.modExp)(y, (0, big_integer_1.default)(2), pq).add(c).remainder(pq);
|
|
46
|
+
}
|
|
47
|
+
k = big_integer_1.default.zero;
|
|
48
|
+
while (k.lesser(r) && g.eq(big_integer_1.default.one)) {
|
|
49
|
+
ys = y;
|
|
50
|
+
const condition = big_integer_1.default.min(m, r.minus(k));
|
|
51
|
+
for (let i = 0; (0, big_integer_1.default)(i).lesser(condition); i++) {
|
|
52
|
+
y = (0, Helpers_1.modExp)(y, (0, big_integer_1.default)(2), pq).add(c).remainder(pq);
|
|
53
|
+
q = q.multiply(x.minus(y).abs()).remainder(pq);
|
|
54
|
+
}
|
|
55
|
+
g = Factorizator.gcd(q, pq);
|
|
56
|
+
k = k.add(m);
|
|
57
|
+
}
|
|
58
|
+
r = r.multiply(2);
|
|
59
|
+
}
|
|
60
|
+
if (g.eq(pq)) {
|
|
61
|
+
while (true) {
|
|
62
|
+
ys = (0, Helpers_1.modExp)(ys, (0, big_integer_1.default)(2), pq).add(c).remainder(pq);
|
|
63
|
+
g = Factorizator.gcd(x.minus(ys).abs(), pq);
|
|
64
|
+
if (g.greater(1)) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const p = g;
|
|
70
|
+
q = pq.divide(g);
|
|
71
|
+
return p < q ? { p: p, q: q } : { p: q, q: p };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.Factorizator = Factorizator;
|
package/crypto/IGE.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
declare class IGENEW {
|
|
3
|
+
private ige;
|
|
4
|
+
constructor(key: Buffer, iv: Buffer);
|
|
5
|
+
/**
|
|
6
|
+
* Decrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
|
|
7
|
+
* @param cipherText {Buffer}
|
|
8
|
+
* @returns {Buffer}
|
|
9
|
+
*/
|
|
10
|
+
decryptIge(cipherText: Buffer): Buffer;
|
|
11
|
+
/**
|
|
12
|
+
* Encrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
|
|
13
|
+
* @param plainText {Buffer}
|
|
14
|
+
* @returns {Buffer}
|
|
15
|
+
*/
|
|
16
|
+
encryptIge(plainText: Buffer): Buffer;
|
|
17
|
+
}
|
|
18
|
+
export { IGENEW as IGE };
|
package/crypto/IGE.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IGE = void 0;
|
|
4
|
+
const Helpers = require("../Helpers");
|
|
5
|
+
const { IGE: aes_ige } = require("@cryptography/aes");
|
|
6
|
+
class IGENEW {
|
|
7
|
+
constructor(key, iv) {
|
|
8
|
+
this.ige = new aes_ige(key, iv);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Decrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
|
|
12
|
+
* @param cipherText {Buffer}
|
|
13
|
+
* @returns {Buffer}
|
|
14
|
+
*/
|
|
15
|
+
decryptIge(cipherText) {
|
|
16
|
+
return Helpers.convertToLittle(this.ige.decrypt(cipherText));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Encrypts the given text in 16-bytes blocks by using the given key and 32-bytes initialization vector
|
|
20
|
+
* @param plainText {Buffer}
|
|
21
|
+
* @returns {Buffer}
|
|
22
|
+
*/
|
|
23
|
+
encryptIge(plainText) {
|
|
24
|
+
const padding = plainText.length % 16;
|
|
25
|
+
if (padding) {
|
|
26
|
+
plainText = Buffer.concat([
|
|
27
|
+
plainText,
|
|
28
|
+
Helpers.generateRandomBytes(16 - padding),
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
return Helpers.convertToLittle(this.ige.encrypt(plainText));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.IGE = IGENEW;
|
package/crypto/RSA.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import bigInt from "big-integer";
|
|
3
|
+
export declare const _serverKeys: Map<string, {
|
|
4
|
+
n: bigInt.BigInteger;
|
|
5
|
+
e: number;
|
|
6
|
+
}>;
|
|
7
|
+
/**
|
|
8
|
+
* Encrypts the given data known the fingerprint to be used
|
|
9
|
+
* in the way Telegram requires us to do so (sha1(data) + data + padding)
|
|
10
|
+
|
|
11
|
+
* @param fingerprint the fingerprint of the RSA key.
|
|
12
|
+
* @param data the data to be encrypted.
|
|
13
|
+
* @returns {Buffer|*|undefined} the cipher text, or undefined if no key matching this fingerprint is found.
|
|
14
|
+
*/
|
|
15
|
+
export declare function encrypt(fingerprint: bigInt.BigInteger, data: Buffer): Promise<Buffer | undefined>;
|
package/crypto/RSA.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.encrypt = exports._serverKeys = void 0;
|
|
18
|
+
const big_integer_1 = __importDefault(require("big-integer"));
|
|
19
|
+
const Helpers_1 = require("../Helpers");
|
|
20
|
+
const PUBLIC_KEYS = [
|
|
21
|
+
{
|
|
22
|
+
fingerprint: (0, big_integer_1.default)("1756106365847508527"),
|
|
23
|
+
n: (0, big_integer_1.default)("24238017039406324398818211100017460853877925248782649032256867755810335814127124174152552731142554114852422558645777814390854384939307234864895464642798398028371542228969164000877103469497598660814243455942166911962275149243241136966793567305207921915048350204489516378689905194216789741874810118898414872745651826381529051462943943060849600549855155618459538046759513047741178572508028156727115094924075836133814760736535296653732158626606889032969597095552163452422289022952141357954550600757285098604619618920582009763141301625135222696080861958446437367103385485660067248268161547714346218480166799291098838822637"),
|
|
24
|
+
e: 65537,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
fingerprint: (0, big_integer_1.default)("4512654018935143700"),
|
|
28
|
+
n: (0, big_integer_1.default)("24235260037890616169120794235062262674316024975077366890198797443331519080732755901363433156102098672541115756594495998709831497291855317743857599933614215433431882467805644923653595607403240513727541136547826962095235110116337427731828103883948424780929997236931407307169894268539301307119160296066712383693459066029441762074173759747793039174943183613832584177865789542225605910018410709652462430479960297418110622242830949114847276874797307530921524192744012016471098946454164482843546804965228364603315089956692139144290446684470924997647106858968233924279740471552020606031234618000396222660365264833969144099689"),
|
|
29
|
+
e: 65537,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
fingerprint: (0, big_integer_1.default)("3954552239731554950"),
|
|
33
|
+
n: (0, big_integer_1.default)("24232829137928731863019490002272733547385109287748297178609100006065549257095568082915937431578124587337794419409505050329102232313883718364639325401969651389116552838463132089986552293089568181366809408321934732862413729055496124940315094723812534661640494201559990530556774916900223297896209016669206232920888207341821205210891303083904139661142906408868611981611963687788770378695879011402303937435839797563703645760891960964101470680979117200293634538267916988134218179357404908420594084400131979794539094631619249407376814557856095132297201658918486640887798052272377986351953478094540165680281771116997441734993"),
|
|
34
|
+
e: 65537,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
fingerprint: (0, big_integer_1.default)("3840879616129353640"),
|
|
38
|
+
n: (0, big_integer_1.default)("24226740003845387526122420383215813313160481817646534954349406594626036763275434691654700873685207371364562560617513084485551764162313690591806956872846659907830643797349274445997728236041847050770194661202868608462800289923910952988537320887544165103060997775840429356973390565265381070029205138105237970981099188549518140588436045472449701138095349921239316849430956077286762827767297232718282160587331191873355577824832392331680272547948467113172934998437902856416395533425838596802424433387992920842347995664806751296809332290342152475668988401357419279530258635231544972387436349151853117346156473906307508757549"),
|
|
39
|
+
e: 65537,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
fingerprint: (0, big_integer_1.default)("9721673155303707927"),
|
|
43
|
+
n: (0, big_integer_1.default)("24235887198671065183055559947724015202901578705257391127883023207130325404209944274441623365774400996125245803826674984630558065530801346509332483039911631199004349799404280051072462526587571180814264659704919975908481860485392697091312975059521505252243307029981562770551539328732454274175686423286372017171706172687007694344562256482111767528076194851300510416590635106402450593729914970198599025438375131735218828188369140906636454128309358530468585125463089729781282854480794582223826120006365903044441770824989674440663577903688826372961995342818099867691669681672230707247497372041028959094232101600968274415909"),
|
|
44
|
+
e: 65537,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
fingerprint: (0, big_integer_1.default)("7327245710266107682"),
|
|
48
|
+
n: (0, big_integer_1.default)("24233564129976052525074557234863243932690922138106909359656144523154213183753506814850645168001577563855229772321433282956411845640925035870968972803136480518327839574672220874857257522033398020724503795612522966253226642346178003829500572676012295974220897791590693412410598927265125769563882185124360261103470929664258060261189680335028461109077433213486615371932159709849345808113812001115072270346716870722377262463616658269378937324271848255503453424157667443329122247165267772229992577323167042062228644298199963610119085504374702555387623787457423479408655064120078431039033708876830736678360594495005894285717"),
|
|
49
|
+
e: 65537,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
fingerprint: (0, big_integer_1.default)("7311641324696334512"),
|
|
53
|
+
n: (0, big_integer_1.default)("24238904092765623654541951735864997636805739769868168409716631959515469207569320832435968810337769651850580018414508646205665007373580374454395606146597849315923870670127753544137087350549900254610551324524604571915228715018530629778298064618268998531793173214036172363025839131060339130881375219446465668205779446789649992083429162676455112627392603665592101688014918149206881529578523272334726996711735101572984859875549951905127125799205155064098291930887529833481849200040487496164143132362127196384113142372423142258452585061291011491812576430380789840081128126636524048534242489396825475946269701146582317743657"),
|
|
54
|
+
e: 65537,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
fingerprint: (0, big_integer_1.default)("5524002727329132702"),
|
|
58
|
+
n: (0, big_integer_1.default)("24240840390944090341507953931793624151763744285563544030910416784236727462750689550882282684085969155875993563675744852648552717349026668910077199849073601728876305909329013402215915886356001505563731538867739529640235766477773878514285912876193140368688382252273204355188089098846601780006831681303843231908846120924758803643829705110820216506673657502707864484421619874710577778393813357430704906944216680999917516195329215472962777640129203129770439225116577891002812853189041960585299399249968153372691725885820340316511845659627253451466115694977127425555862186933193218394320394258694625575382100116288975340549"),
|
|
59
|
+
e: 65537,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
fingerprint: (0, big_integer_1.default)("2155561823286592012"),
|
|
63
|
+
n: (0, big_integer_1.default)("24243204744019316140571390393410731044654264209980898428670746497205291386024859137646251159342861816150128941773691765890192527564620428158169785622636505535629877349480617450560211048944399739063850448630948066199276397698436674230327767005624782137249362550473395158990527076392726209697596675639019343431160273964306938051977616487039715401404799862526727477302181083747478624994178928979351838016002623078026537816937662621346331619607922153654990755682564560671138040298018060956367906310050176108465773963874560935962712092372009916305687613610568043052253976511360748800839532555791190958981455525068313616897"),
|
|
64
|
+
e: 65537,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
fingerprint: (0, big_integer_1.default)("17531275267172558227"),
|
|
68
|
+
n: (0, big_integer_1.default)("24255139658927753013873254536141189189753237402252128733006540963901927076142349649954801019467156677718322370092675980874397265945177264702598929380544295193481322378721816476070729371813229094364350010101862393838172088864447803332092418041246949084178401713364385838881375015827144945794095153786964846571030388355787508753531991993961555254969042717605460196000799545102877923469722288616794557923288888983011269037240565601793493311068493308734157084807580786404284886544532698648917545300042554928459645078414300497757390122490443598743777136771649253346883604382743910194553040289048690026107067641101240869757"),
|
|
69
|
+
e: 65537,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
fingerprint: (0, big_integer_1.default)("4575657650171602427"),
|
|
73
|
+
n: (0, big_integer_1.default)("24241748716979944158438708449394223653204961060765827143973368617884492447942261505523443187257601236103340265615559639527180630229197439866502776378686835096407353804066949909701285818617975495760522238490671487712029011986651201719536090542896321467265696201328659954098773412180034421153101058632557542704289472001536987018842653632943335838465498174097963939308591427024890952308345708116210029583441063643004077552629178414709522805324640781966790694937052743127193386201247420273918072292131700727741792837690434676101793120971404158497279036295245865400265894452436582085456827818149587723815498705423505525321"),
|
|
74
|
+
e: 65537,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
fingerprint: (0, big_integer_1.default)("3567622298816760148"),
|
|
78
|
+
n: (0, big_integer_1.default)("24241973069830180936382486136851951013243348105350204138487124818017867602625899293258552187838336184674670049713933766933757351489570820842327703265958170901615264973187032752096701011614110157776312764845302570082529385495470140920146051878730342948396344845297689539640313824769114338228755143118971304481173971615303964077469979652053857783729373752576433365489059477702349286208930722931204796741218051283105702556757466403365671339510414300696164894372274177945557949148910985421194213163965384331982024228279179527914200131998654289345727195757973563789660861631701724424526652398311923904246625005126377592521"),
|
|
79
|
+
e: 65537,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
fingerprint: (0, big_integer_1.default)("17553063345690371958"),
|
|
83
|
+
n: (0, big_integer_1.default)("24241351281279299145481747591583493078714093870975713145334774261321717014781399628806087038848831852485223813136532926712665125270156627916952445277417726147982780684777659771520097728759904421321965854937862064740047454279621386406085143534690226076281213842173610596031643343879891078193115303418753930218318027953591820866890833986120632305938339616731461135194085454784667673649470129245909222026882631141387315757782391400515676373846987208768872585135598971809900399024770733365259205359339785306556181974113602739399615870858743653524190023863576735524226166101143210526674060026402436659365308688510078690497"),
|
|
84
|
+
e: 65537,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
fingerprint: (0, big_integer_1.default)("9277528552786967144"),
|
|
88
|
+
n: (0, big_integer_1.default)("24238883792812457903440955355642945950073022904970495801657093251869089713665121911149481234050853934233122064092523442293485485973465562612462219587481815730600402639326960136165554757892118468323726552797797164131902401769109455064629623949487693529716691024261405998062219772670890185173102183412411788189060292277688538193979326171472099753319325396308639069346901555802056221461406051787468350371495259148993101781275112408866779921537695676863740570738579953904002087945727029190297738095608918499336688211985497328456484829874330588018880380000963974882409830117909102404397518375709893711959298913212944063661"),
|
|
89
|
+
e: 65537,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
fingerprint: (0, big_integer_1.default)("6568519800617090630"),
|
|
93
|
+
n: (0, big_integer_1.default)("24239588619862180508360098040512418478680581611170711472883928025686825099356249917712225099148223711077059432200028063463093865372091311205580643550051338386984879877676235105123154065518600959875711395451795757738760134829594597167255271693432072928388818915612111091816614607170457231661478416252209722562831276455953742376708783408890398220602426478965073031487055861137035030458199714371038052587482387852918218274226889973351746476739523268586850465610743992484692267611070713846948961575290727414876842104679461061769756369084968039212031985243195756288727866220885995292271051896140306080831566727722276074957"),
|
|
94
|
+
e: 65537,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
fingerprint: (0, big_integer_1.default)("15281512440970464298"),
|
|
98
|
+
n: (0, big_integer_1.default)("24239599512582931255427359431270572618952258131975769988260722303793575773752906274343700600720098035285579177975758854783208633709515855105374263407538462905252408613429494890312418721520791650769366216794922936974747169144475850347680874367281918740311749178059811810094869294916305229616949847003803916684366149987503343184025245931779539066699101382363380634723870546611475521905446162854714187876049892459528476639455612521723735146705760038501370073301822766125048910027686879641453113850638808677316725452385146298771974291225307327761780054966757171689178074696096619801471350533150098368772709207148837901569"),
|
|
99
|
+
e: 65537,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
fingerprint: (0, big_integer_1.default)("5249484155803885630"),
|
|
103
|
+
n: (0, big_integer_1.default)("24241265362203342369326328988460290759229617577623644619423503233932740075020161659571459870131599238665537387406219165949998870768595835314138560518720219669643365406220763480511872529480745144790239904422851448607682345196590211016662588012961680376371675762676332978139225933779099960536287742756092033539932302005664752819588590041459954217936610254734136991222417370010309428640594262604322713225993786279478042930507895472883113560516617327048112388283614781108894590930969640925430277232319453256199767091017235183579120241841848123248729513184343705728200298718504847249596611130093167582769393799885361028241"),
|
|
104
|
+
e: 65537,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
fingerprint: (0, big_integer_1.default)("13541485698777891424"),
|
|
108
|
+
n: (0, big_integer_1.default)("24250582346038918253489590685273447797501021440754250552376556841251766168493300467201436977700810867213865077002754295254311264997981306507395212023425442763995925057937373861855081818382878597813104903647701486401235514293882661190390724306994977405565333072540104439523086038432800600883214234200236263214845445582364913787344216841610255185049453059347714444482989937073942074055145452916055812809467822364750111177789684519275729574001771486570693691791685231682148674414389652792950646465738793767111954048363986885331827825877145559966247324980948121305820656101676302232547121578841113489085078177977779644273"),
|
|
109
|
+
e: 65537,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
fingerprint: (0, big_integer_1.default)("16862300725120269413"),
|
|
113
|
+
n: (0, big_integer_1.default)("24254000742908910780642772836620313045262355961163729937569619383555249902029716060200419148391019170804222412071963596191785861586891063699072641162488871066133046961090009396955121728733384027955976513502449787476821410788951310882648123274289437430318341855536075267235356097809280385965583038417386084366145339901748119758697655135929934549969707460599883140539174983072516221417031945054555985803873960199525313057600306925514544833040037018227697686306101849187175034825584965708811367071337597817211252921279005367930151150461576976714469449048972877200165293128214220683948771740718174833101709208764642734009"),
|
|
114
|
+
e: 65537,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
fingerprint: (0, big_integer_1.default)("146161090623767708"),
|
|
118
|
+
n: (0, big_integer_1.default)("24253495355592939862541792106837927970578028684159052648663928248811410107333457728279277109502147340136333426729884744926183857264572402670419957082851015100418465126428222680133281570470371040523800642216862572710828580502430077960118583163279583538688255309017584970719200470208489986071618868024733969564549249389837986957516912955145904703360486166231033108413849041302009270425608550404235410771038637642469917472911594357670299410706994996555343504517052658790568611125226416060186111837634873507795341827902708071697966649511858963499400578689407839770254246385600914558793037831000053896621164798032464177741"),
|
|
119
|
+
e: 65537,
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
exports._serverKeys = new Map();
|
|
123
|
+
PUBLIC_KEYS.forEach((_a) => {
|
|
124
|
+
var { fingerprint } = _a, keyInfo = __rest(_a, ["fingerprint"]);
|
|
125
|
+
exports._serverKeys.set(fingerprint.toString(), keyInfo);
|
|
126
|
+
});
|
|
127
|
+
/**
|
|
128
|
+
* Encrypts the given data known the fingerprint to be used
|
|
129
|
+
* in the way Telegram requires us to do so (sha1(data) + data + padding)
|
|
130
|
+
|
|
131
|
+
* @param fingerprint the fingerprint of the RSA key.
|
|
132
|
+
* @param data the data to be encrypted.
|
|
133
|
+
* @returns {Buffer|*|undefined} the cipher text, or undefined if no key matching this fingerprint is found.
|
|
134
|
+
*/
|
|
135
|
+
async function encrypt(fingerprint, data) {
|
|
136
|
+
const key = exports._serverKeys.get(fingerprint.toString());
|
|
137
|
+
if (!key) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
// len(sha1.digest) is always 20, so we're left with 255 - 20 - x padding
|
|
141
|
+
const rand = (0, Helpers_1.generateRandomBytes)(235 - data.length);
|
|
142
|
+
const toEncrypt = Buffer.concat([await (0, Helpers_1.sha1)(data), data, rand]);
|
|
143
|
+
// rsa module rsa.encrypt adds 11 bits for padding which we don't want
|
|
144
|
+
// rsa module uses rsa.transform.bytes2int(to_encrypt), easier way:
|
|
145
|
+
const payload = (0, Helpers_1.readBigIntFromBuffer)(toEncrypt, false);
|
|
146
|
+
const encrypted = (0, Helpers_1.modExp)(payload, (0, big_integer_1.default)(key.e), key.n);
|
|
147
|
+
// rsa module uses transform.int2bytes(encrypted, keylength), easier:
|
|
148
|
+
return (0, Helpers_1.readBufferFromBigInt)(encrypted, 256, false);
|
|
149
|
+
}
|
|
150
|
+
exports.encrypt = encrypt;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uint32Array -> ArrayBuffer (low-endian os)
|
|
3
|
+
*/
|
|
4
|
+
export declare function i2abLow(buf: Uint32Array): ArrayBuffer;
|
|
5
|
+
/**
|
|
6
|
+
* Uint32Array -> ArrayBuffer (big-endian os)
|
|
7
|
+
*/
|
|
8
|
+
export declare function i2abBig(buf: Uint32Array): ArrayBuffer;
|
|
9
|
+
/**
|
|
10
|
+
* ArrayBuffer -> Uint32Array (low-endian os)
|
|
11
|
+
*/
|
|
12
|
+
export declare function ab2iLow(ab: ArrayBuffer | SharedArrayBuffer | Uint8Array): Uint32Array;
|
|
13
|
+
/**
|
|
14
|
+
* ArrayBuffer -> Uint32Array (big-endian os)
|
|
15
|
+
*/
|
|
16
|
+
export declare function ab2iBig(ab: ArrayBuffer | SharedArrayBuffer | Uint8Array): Uint32Array;
|
|
17
|
+
export declare const isBigEndian: boolean;
|
|
18
|
+
export declare const i2ab: typeof i2abBig;
|
|
19
|
+
export declare const ab2i: typeof ab2iBig;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ab2i = exports.i2ab = exports.isBigEndian = exports.ab2iBig = exports.ab2iLow = exports.i2abBig = exports.i2abLow = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Uint32Array -> ArrayBuffer (low-endian os)
|
|
6
|
+
*/
|
|
7
|
+
function i2abLow(buf) {
|
|
8
|
+
const uint8 = new Uint8Array(buf.length * 4);
|
|
9
|
+
let i = 0;
|
|
10
|
+
for (let j = 0; j < buf.length; j++) {
|
|
11
|
+
const int = buf[j];
|
|
12
|
+
uint8[i++] = int >>> 24;
|
|
13
|
+
uint8[i++] = (int >> 16) & 0xff;
|
|
14
|
+
uint8[i++] = (int >> 8) & 0xff;
|
|
15
|
+
uint8[i++] = int & 0xff;
|
|
16
|
+
}
|
|
17
|
+
return uint8.buffer;
|
|
18
|
+
}
|
|
19
|
+
exports.i2abLow = i2abLow;
|
|
20
|
+
/**
|
|
21
|
+
* Uint32Array -> ArrayBuffer (big-endian os)
|
|
22
|
+
*/
|
|
23
|
+
function i2abBig(buf) {
|
|
24
|
+
return buf.buffer;
|
|
25
|
+
}
|
|
26
|
+
exports.i2abBig = i2abBig;
|
|
27
|
+
/**
|
|
28
|
+
* ArrayBuffer -> Uint32Array (low-endian os)
|
|
29
|
+
*/
|
|
30
|
+
function ab2iLow(ab) {
|
|
31
|
+
const uint8 = new Uint8Array(ab);
|
|
32
|
+
const buf = new Uint32Array(uint8.length / 4);
|
|
33
|
+
for (let i = 0; i < uint8.length; i += 4) {
|
|
34
|
+
buf[i / 4] =
|
|
35
|
+
(uint8[i] << 24) ^
|
|
36
|
+
(uint8[i + 1] << 16) ^
|
|
37
|
+
(uint8[i + 2] << 8) ^
|
|
38
|
+
uint8[i + 3];
|
|
39
|
+
}
|
|
40
|
+
return buf;
|
|
41
|
+
}
|
|
42
|
+
exports.ab2iLow = ab2iLow;
|
|
43
|
+
/**
|
|
44
|
+
* ArrayBuffer -> Uint32Array (big-endian os)
|
|
45
|
+
*/
|
|
46
|
+
function ab2iBig(ab) {
|
|
47
|
+
return new Uint32Array(ab);
|
|
48
|
+
}
|
|
49
|
+
exports.ab2iBig = ab2iBig;
|
|
50
|
+
exports.isBigEndian = new Uint8Array(new Uint32Array([0x01020304]))[0] === 0x01;
|
|
51
|
+
exports.i2ab = exports.isBigEndian ? i2abBig : i2abLow;
|
|
52
|
+
exports.ab2i = exports.isBigEndian ? ab2iBig : ab2iLow;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export declare class Counter {
|
|
3
|
+
_counter: Buffer;
|
|
4
|
+
constructor(initialValue: any);
|
|
5
|
+
increment(): void;
|
|
6
|
+
}
|
|
7
|
+
export declare class CTR {
|
|
8
|
+
private _counter;
|
|
9
|
+
private _remainingCounter?;
|
|
10
|
+
private _remainingCounterIndex;
|
|
11
|
+
private _aes;
|
|
12
|
+
constructor(key: Buffer, counter: any);
|
|
13
|
+
update(plainText: any): Buffer;
|
|
14
|
+
encrypt(plainText: any): Buffer;
|
|
15
|
+
}
|
|
16
|
+
export declare function createDecipheriv(algorithm: string, key: Buffer, iv: Buffer): CTR;
|
|
17
|
+
export declare function createCipheriv(algorithm: string, key: Buffer, iv: Buffer): CTR;
|
|
18
|
+
export declare function randomBytes(count: number): Uint8Array;
|
|
19
|
+
export declare class Hash {
|
|
20
|
+
private readonly algorithm;
|
|
21
|
+
private data?;
|
|
22
|
+
constructor(algorithm: string);
|
|
23
|
+
update(data: Buffer): void;
|
|
24
|
+
digest(): Promise<Buffer>;
|
|
25
|
+
}
|
|
26
|
+
export declare function pbkdf2Sync(password: any, salt: any, iterations: any, ...args: any): Promise<Buffer>;
|
|
27
|
+
export declare function createHash(algorithm: string): Hash;
|
package/crypto/crypto.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createHash = exports.pbkdf2Sync = exports.Hash = exports.randomBytes = exports.createCipheriv = exports.createDecipheriv = exports.CTR = exports.Counter = void 0;
|
|
7
|
+
const aes_1 = __importDefault(require("@cryptography/aes"));
|
|
8
|
+
const converters_1 = require("./converters");
|
|
9
|
+
const words_1 = require("./words");
|
|
10
|
+
class Counter {
|
|
11
|
+
constructor(initialValue) {
|
|
12
|
+
this._counter = Buffer.from(initialValue);
|
|
13
|
+
}
|
|
14
|
+
increment() {
|
|
15
|
+
for (let i = 15; i >= 0; i--) {
|
|
16
|
+
if (this._counter[i] === 255) {
|
|
17
|
+
this._counter[i] = 0;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this._counter[i]++;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.Counter = Counter;
|
|
27
|
+
class CTR {
|
|
28
|
+
constructor(key, counter) {
|
|
29
|
+
if (!(counter instanceof Counter)) {
|
|
30
|
+
counter = new Counter(counter);
|
|
31
|
+
}
|
|
32
|
+
this._counter = counter;
|
|
33
|
+
this._remainingCounter = undefined;
|
|
34
|
+
this._remainingCounterIndex = 16;
|
|
35
|
+
this._aes = new aes_1.default((0, words_1.getWords)(key));
|
|
36
|
+
}
|
|
37
|
+
update(plainText) {
|
|
38
|
+
return this.encrypt(plainText);
|
|
39
|
+
}
|
|
40
|
+
encrypt(plainText) {
|
|
41
|
+
const encrypted = Buffer.from(plainText);
|
|
42
|
+
for (let i = 0; i < encrypted.length; i++) {
|
|
43
|
+
if (this._remainingCounterIndex === 16) {
|
|
44
|
+
this._remainingCounter = Buffer.from((0, converters_1.i2ab)(this._aes.encrypt((0, converters_1.ab2i)(this._counter._counter))));
|
|
45
|
+
this._remainingCounterIndex = 0;
|
|
46
|
+
this._counter.increment();
|
|
47
|
+
}
|
|
48
|
+
if (this._remainingCounter) {
|
|
49
|
+
encrypted[i] ^=
|
|
50
|
+
this._remainingCounter[this._remainingCounterIndex++];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return encrypted;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.CTR = CTR;
|
|
57
|
+
// endregion
|
|
58
|
+
function createDecipheriv(algorithm, key, iv) {
|
|
59
|
+
if (algorithm.includes("ECB")) {
|
|
60
|
+
throw new Error("Not supported");
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return new CTR(key, iv);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.createDecipheriv = createDecipheriv;
|
|
67
|
+
function createCipheriv(algorithm, key, iv) {
|
|
68
|
+
if (algorithm.includes("ECB")) {
|
|
69
|
+
throw new Error("Not supported");
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return new CTR(key, iv);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.createCipheriv = createCipheriv;
|
|
76
|
+
function randomBytes(count) {
|
|
77
|
+
const bytes = new Uint8Array(count);
|
|
78
|
+
crypto.getRandomValues(bytes);
|
|
79
|
+
return bytes;
|
|
80
|
+
}
|
|
81
|
+
exports.randomBytes = randomBytes;
|
|
82
|
+
class Hash {
|
|
83
|
+
constructor(algorithm) {
|
|
84
|
+
this.algorithm = algorithm;
|
|
85
|
+
}
|
|
86
|
+
update(data) {
|
|
87
|
+
//We shouldn't be needing new Uint8Array but it doesn't
|
|
88
|
+
//work without it
|
|
89
|
+
this.data = new Uint8Array(data);
|
|
90
|
+
}
|
|
91
|
+
async digest() {
|
|
92
|
+
if (this.data) {
|
|
93
|
+
if (this.algorithm === "sha1") {
|
|
94
|
+
return Buffer.from(await self.crypto.subtle.digest("SHA-1", this.data));
|
|
95
|
+
}
|
|
96
|
+
else if (this.algorithm === "sha256") {
|
|
97
|
+
return Buffer.from(await self.crypto.subtle.digest("SHA-256", this.data));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return Buffer.alloc(0);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.Hash = Hash;
|
|
104
|
+
async function pbkdf2Sync(password, salt, iterations, ...args) {
|
|
105
|
+
const passwordKey = await crypto.subtle.importKey("raw", password, { name: "PBKDF2" }, false, ["deriveBits"]);
|
|
106
|
+
return Buffer.from(await crypto.subtle.deriveBits({
|
|
107
|
+
name: "PBKDF2",
|
|
108
|
+
hash: "SHA-512",
|
|
109
|
+
salt,
|
|
110
|
+
iterations,
|
|
111
|
+
}, passwordKey, 512));
|
|
112
|
+
}
|
|
113
|
+
exports.pbkdf2Sync = pbkdf2Sync;
|
|
114
|
+
function createHash(algorithm) {
|
|
115
|
+
return new Hash(algorithm);
|
|
116
|
+
}
|
|
117
|
+
exports.createHash = createHash;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function s2i(str: string, pos: number): number;
|
|
2
|
+
/**
|
|
3
|
+
* Helper function for transforming string key to Uint32Array
|
|
4
|
+
*/
|
|
5
|
+
export declare function getWords(key: string | Uint8Array | Uint32Array): Uint32Array;
|
|
6
|
+
export declare function xor(left: Uint32Array, right: Uint32Array, to?: Uint32Array): void;
|
package/crypto/words.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Imported from https://github.com/spalt08/cryptography/blob/master/packages/aes/src/utils/words.ts
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.xor = exports.getWords = exports.s2i = void 0;
|
|
7
|
+
function s2i(str, pos) {
|
|
8
|
+
return ((str.charCodeAt(pos) << 24) ^
|
|
9
|
+
(str.charCodeAt(pos + 1) << 16) ^
|
|
10
|
+
(str.charCodeAt(pos + 2) << 8) ^
|
|
11
|
+
str.charCodeAt(pos + 3));
|
|
12
|
+
}
|
|
13
|
+
exports.s2i = s2i;
|
|
14
|
+
/**
|
|
15
|
+
* Helper function for transforming string key to Uint32Array
|
|
16
|
+
*/
|
|
17
|
+
function getWords(key) {
|
|
18
|
+
if (key instanceof Uint32Array) {
|
|
19
|
+
return key;
|
|
20
|
+
}
|
|
21
|
+
if (typeof key === "string") {
|
|
22
|
+
if (key.length % 4 !== 0)
|
|
23
|
+
for (let i = key.length % 4; i <= 4; i++)
|
|
24
|
+
key += "\0x00";
|
|
25
|
+
const buf = new Uint32Array(key.length / 4);
|
|
26
|
+
for (let i = 0; i < key.length; i += 4)
|
|
27
|
+
buf[i / 4] = s2i(key, i);
|
|
28
|
+
return buf;
|
|
29
|
+
}
|
|
30
|
+
if (key instanceof Uint8Array) {
|
|
31
|
+
const buf = new Uint32Array(key.length / 4);
|
|
32
|
+
for (let i = 0; i < key.length; i += 4) {
|
|
33
|
+
buf[i / 4] =
|
|
34
|
+
(key[i] << 24) ^
|
|
35
|
+
(key[i + 1] << 16) ^
|
|
36
|
+
(key[i + 2] << 8) ^
|
|
37
|
+
key[i + 3];
|
|
38
|
+
}
|
|
39
|
+
return buf;
|
|
40
|
+
}
|
|
41
|
+
throw new Error("Unable to create 32-bit words");
|
|
42
|
+
}
|
|
43
|
+
exports.getWords = getWords;
|
|
44
|
+
function xor(left, right, to = left) {
|
|
45
|
+
for (let i = 0; i < left.length; i++)
|
|
46
|
+
to[i] = left[i] ^ right[i];
|
|
47
|
+
}
|
|
48
|
+
exports.xor = xor;
|
package/entityCache.d.ts
ADDED
package/entityCache.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Which updates have the following fields?
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.EntityCache = void 0;
|
|
8
|
+
const Utils_1 = require("./Utils");
|
|
9
|
+
const Helpers_1 = require("./Helpers");
|
|
10
|
+
const tl_1 = require("./tl");
|
|
11
|
+
const big_integer_1 = __importDefault(require("big-integer"));
|
|
12
|
+
class EntityCache {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.cacheMap = new Map();
|
|
15
|
+
}
|
|
16
|
+
add(entities) {
|
|
17
|
+
const temp = [];
|
|
18
|
+
if (!(0, Helpers_1.isArrayLike)(entities)) {
|
|
19
|
+
if (entities != undefined) {
|
|
20
|
+
if (typeof entities == "object") {
|
|
21
|
+
if ("chats" in entities) {
|
|
22
|
+
temp.push(...entities.chats);
|
|
23
|
+
}
|
|
24
|
+
if ("users" in entities) {
|
|
25
|
+
temp.push(...entities.users);
|
|
26
|
+
}
|
|
27
|
+
if ("user" in entities) {
|
|
28
|
+
temp.push(entities.user);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (temp.length) {
|
|
33
|
+
entities = temp;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
for (const entity of entities) {
|
|
40
|
+
try {
|
|
41
|
+
const pid = (0, Utils_1.getPeerId)(entity);
|
|
42
|
+
if (!this.cacheMap.has(pid.toString())) {
|
|
43
|
+
this.cacheMap.set(pid.toString(), (0, Utils_1.getInputPeer)(entity));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (e) { }
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
get(item) {
|
|
50
|
+
if (item == undefined) {
|
|
51
|
+
throw new Error("No cached entity for the given key");
|
|
52
|
+
}
|
|
53
|
+
item = (0, Helpers_1.returnBigInt)(item);
|
|
54
|
+
if (item.lesser(big_integer_1.default.zero)) {
|
|
55
|
+
let res;
|
|
56
|
+
try {
|
|
57
|
+
res = this.cacheMap.get((0, Utils_1.getPeerId)(item).toString());
|
|
58
|
+
if (res) {
|
|
59
|
+
return res;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
throw new Error("Invalid key will not have entity");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (const cls of [tl_1.Api.PeerUser, tl_1.Api.PeerChat, tl_1.Api.PeerChannel]) {
|
|
67
|
+
const result = this.cacheMap.get((0, Utils_1.getPeerId)(new cls({
|
|
68
|
+
userId: item,
|
|
69
|
+
chatId: item,
|
|
70
|
+
channelId: item,
|
|
71
|
+
})).toString());
|
|
72
|
+
if (result) {
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
throw new Error("No cached entity for the given key");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.EntityCache = EntityCache;
|