Fix computing call fingerprint
This commit is contained in:
parent
97e4157fdf
commit
0c9a3b8548
@ -10,6 +10,7 @@ import { attachClickEvent } from "../../helpers/dom/clickEvent";
|
||||
import ControlsHover from "../../helpers/dom/controlsHover";
|
||||
import findUpClassName from "../../helpers/dom/findUpClassName";
|
||||
import { addFullScreenListener, cancelFullScreen, isFullScreen, requestFullScreen } from "../../helpers/dom/fullScreen";
|
||||
import replaceContent from "../../helpers/dom/replaceContent";
|
||||
import MovablePanel from "../../helpers/movablePanel";
|
||||
import onMediaLoad from "../../helpers/onMediaLoad";
|
||||
import themeController from "../../helpers/themeController";
|
||||
@ -441,7 +442,7 @@ export default class PopupCall extends PopupElement {
|
||||
|
||||
if(!this.emojisSubtitle.textContent && connectionState < CALL_STATE.EXCHANGING_KEYS) {
|
||||
Promise.resolve(instance.getEmojisFingerprint()).then((emojis) => {
|
||||
this.emojisSubtitle.append(wrapEmojiText(emojis.join('')));
|
||||
replaceContent(this.emojisSubtitle, wrapEmojiText(emojis.join('')));
|
||||
});
|
||||
}
|
||||
|
||||
|
5
src/helpers/bigInt/bigIntConstants.ts
Normal file
5
src/helpers/bigInt/bigIntConstants.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import bigInt from 'big-integer';
|
||||
|
||||
export const safeBigInt = bigInt(Number.MAX_SAFE_INTEGER);
|
||||
export const ulongBigInt = bigInt(bigInt[2]).pow(64);
|
||||
export const longBigInt = ulongBigInt.divide(bigInt[2]);
|
@ -1,4 +1,5 @@
|
||||
import bigInt from 'big-integer';
|
||||
import { longBigInt, ulongBigInt } from './bigIntConstants';
|
||||
|
||||
export function bigIntFromBytes(bytes: Uint8Array | number[], base = 256) {
|
||||
return bigInt.fromArray(bytes instanceof Uint8Array ? [...bytes] : bytes, base);
|
||||
@ -7,3 +8,11 @@ export function bigIntFromBytes(bytes: Uint8Array | number[], base = 256) {
|
||||
export function bigIntToBytes(bigInt: bigInt.BigInteger) {
|
||||
return new Uint8Array(bigInt.toArray(256).value);
|
||||
}
|
||||
|
||||
export function bigIntToSigned(bigInt: bigInt.BigInteger) {
|
||||
return bigInt.greater(longBigInt) ? bigInt.minus(ulongBigInt) : bigInt;
|
||||
}
|
||||
|
||||
export function bigIntToUnsigned(bigInt: bigInt.BigInteger) {
|
||||
return bigInt.isNegative() ? ulongBigInt.add(bigInt) : bigInt;
|
||||
}
|
||||
|
@ -115,7 +115,8 @@ export class CallsController extends EventListenerBase<{
|
||||
|
||||
const {key, key_fingerprint} = await this.managers.appCallsManager.computeKey(g_a, dh.b, dh.p);
|
||||
if(call.key_fingerprint !== key_fingerprint) {
|
||||
this.log.error('Incorrect key fingerprint', call.key_fingerprint, key_fingerprint);
|
||||
this.log.error('Incorrect key fingerprint', call.key_fingerprint, key_fingerprint, g_a, dh);
|
||||
instance.hangUp('phoneCallDiscardReasonDisconnect');
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
* https://github.com/morethanwords/tweb/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
import { bigIntFromBytes } from "../../helpers/bigInt/bigIntConversion";
|
||||
import { bigIntFromBytes, bigIntToSigned } from "../../helpers/bigInt/bigIntConversion";
|
||||
import cryptoWorker from "./cryptoMessagePort";
|
||||
|
||||
export default async function computeDhKey(g_b: Uint8Array, a: Uint8Array, p: Uint8Array) {
|
||||
const key = await cryptoWorker.invokeCrypto('mod-pow', g_b, a, p);
|
||||
const keySha1Hashed = await cryptoWorker.invokeCrypto('sha1', key);
|
||||
const key_fingerprint = keySha1Hashed.slice(-8).reverse(); // key_fingerprint: key_fingerprint as any // ! it doesn't work
|
||||
const key_fingerprint_long = bigIntFromBytes(key_fingerprint).toString(10); // bigInt2str(str2bigInt(bytesToHex(key_fingerprint), 16), 10);
|
||||
const key_fingerprint = keySha1Hashed.slice(-8).reverse();
|
||||
const key_fingerprint_long = bigIntToSigned(bigIntFromBytes(key_fingerprint)).toString(10);
|
||||
|
||||
return {key, key_fingerprint: key_fingerprint_long};
|
||||
}
|
||||
|
@ -17,16 +17,14 @@ import isObject from '../../helpers/object/isObject';
|
||||
import gzipUncompress from '../../helpers/gzipUncompress';
|
||||
import bigInt from 'big-integer';
|
||||
import ulongFromInts from '../../helpers/long/ulongFromInts';
|
||||
import { safeBigInt } from '../../helpers/bigInt/bigIntConstants';
|
||||
import { bigIntToSigned, bigIntToUnsigned } from '../../helpers/bigInt/bigIntConversion';
|
||||
|
||||
const boolFalse = +Schema.API.constructors.find((c) => c.predicate === 'boolFalse').id;
|
||||
const boolTrue = +Schema.API.constructors.find((c) => c.predicate === 'boolTrue').id;
|
||||
const vector = +Schema.API.constructors.find((c) => c.predicate === 'vector').id;
|
||||
const gzipPacked = +Schema.MTProto.constructors.find((c) => c.predicate === 'gzip_packed').id;
|
||||
|
||||
const safeBigInt = bigInt(Number.MAX_SAFE_INTEGER);
|
||||
const ulongBigInt = bigInt(bigInt[2]).pow(64);
|
||||
const longBigInt = ulongBigInt.divide(bigInt[2]);
|
||||
|
||||
class TLSerialization {
|
||||
private maxLength = 2048; // 2Kb
|
||||
private offset = 0; // in bytes
|
||||
@ -151,11 +149,7 @@ class TLSerialization {
|
||||
}
|
||||
}
|
||||
|
||||
let _bigInt = bigInt(sLong as string);
|
||||
if(_bigInt.isNegative()) { // make it unsigned
|
||||
_bigInt = ulongBigInt.add(_bigInt);
|
||||
}
|
||||
|
||||
const _bigInt = bigIntToUnsigned(bigInt(sLong as string));
|
||||
const {quotient, remainder} = _bigInt.divmod(0x100000000);
|
||||
const high = quotient.toJSNumber();
|
||||
const low = remainder.toJSNumber();
|
||||
@ -504,8 +498,8 @@ class TLDeserialization<FetchLongAs extends Long> {
|
||||
const iHigh = this.readInt((field || '') + ':long[high]');
|
||||
|
||||
let ulong = ulongFromInts(iHigh, iLow);
|
||||
if(/* !unsigned && */!this.mtproto && ulong.greater(longBigInt)) { // make it signed
|
||||
ulong = ulong.minus(ulongBigInt);
|
||||
if(/* !unsigned && */!this.mtproto) { // make it signed
|
||||
ulong = bigIntToSigned(ulong);
|
||||
}
|
||||
|
||||
if(!this.mtproto) {
|
||||
|
@ -10,6 +10,7 @@
|
||||
#{$parent} {
|
||||
&-header {
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
&-title {
|
||||
|
Loading…
x
Reference in New Issue
Block a user