Compare commits
No commits in common. "master" and "v1.2.0" have entirely different histories.
12
README.md
12
README.md
@ -1,12 +1,10 @@
|
||||
**Deprecation Warning**: It is recommended that the TypeScript interface of [libsignal-client](https://github.com/signalapp/libsignal-client) be used for all new applications. This library is no longer used by us or maintained.
|
||||
|
||||
# libsignal-protocol-javascript
|
||||
|
||||
[](https://travis-ci.org/signalapp/libsignal-protocol-javascript)
|
||||
[](https://travis-ci.org/WhisperSystems/libsignal-protocol-javascript)
|
||||
|
||||
|
||||
Signal Protocol implementation for the browser based on
|
||||
[libsignal-protocol-java](https://github.com/signalapp/libsignal-protocol-java).
|
||||
[libsignal-protocol-java](https://github.com/WhisperSystems/libsignal-protocol-java).
|
||||
|
||||
```
|
||||
/dist # Distributables
|
||||
@ -117,7 +115,7 @@ var store = new MySignalProtocolStore();
|
||||
var address = new libsignal.SignalProtocolAddress(recipientId, deviceId);
|
||||
|
||||
// Instantiate a SessionBuilder for a remote recipientId + deviceId tuple.
|
||||
var sessionBuilder = new libsignal.SessionBuilder(store, address);
|
||||
SessionBuilder sessionBuilder = new libsignal.SessionBuilder(store, address);
|
||||
|
||||
// Process a prekey fetched from the server. Returns a promise that resolves
|
||||
// once a session is created and saved in the store, or rejects if the
|
||||
@ -186,7 +184,7 @@ sessionCipher.decryptWhisperMessage(ciphertext).then(function(plaintext) {
|
||||
|
||||
## Building
|
||||
|
||||
To compile curve25519 from C source files in `/native`, install
|
||||
To compile curve25519 from C souce files in `/native`, install
|
||||
[emscripten](https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html).
|
||||
|
||||
```
|
||||
@ -195,6 +193,6 @@ grunt compile
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2015-2018 Open Whisper Systems
|
||||
Copyright 2015-2016 Open Whisper Systems
|
||||
|
||||
Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
@ -47,18 +47,21 @@
|
||||
/**
|
||||
* The low 32 bits as a signed value.
|
||||
* @type {number}
|
||||
* @expose
|
||||
*/
|
||||
this.low = low | 0;
|
||||
|
||||
/**
|
||||
* The high 32 bits as a signed value.
|
||||
* @type {number}
|
||||
* @expose
|
||||
*/
|
||||
this.high = high | 0;
|
||||
|
||||
/**
|
||||
* Whether unsigned or not.
|
||||
* @type {boolean}
|
||||
* @expose
|
||||
*/
|
||||
this.unsigned = !!unsigned;
|
||||
}
|
||||
@ -84,9 +87,10 @@
|
||||
* An indicator used to reliably determine if an object is a Long or not.
|
||||
* @type {boolean}
|
||||
* @const
|
||||
* @expose
|
||||
* @private
|
||||
*/
|
||||
Long.prototype.__isLong__;
|
||||
Long.__isLong__;
|
||||
|
||||
Object.defineProperty(Long.prototype, "__isLong__", {
|
||||
value: true,
|
||||
@ -109,6 +113,7 @@
|
||||
* @function
|
||||
* @param {*} obj Object
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
Long.isLong = isLong;
|
||||
|
||||
@ -165,6 +170,7 @@
|
||||
* @param {number} value The 32 bit integer in question
|
||||
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromInt = fromInt;
|
||||
|
||||
@ -199,6 +205,7 @@
|
||||
* @param {number} value The number in question
|
||||
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromNumber = fromNumber;
|
||||
|
||||
@ -221,6 +228,7 @@
|
||||
* @param {number} highBits The high 32 bits
|
||||
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromBits = fromBits;
|
||||
|
||||
@ -290,6 +298,7 @@
|
||||
* @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @param {number=} radix The radix in which the text is written (2-36), defaults to 10
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromString = fromString;
|
||||
|
||||
@ -315,6 +324,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.fromValue = fromValue;
|
||||
|
||||
@ -372,6 +382,7 @@
|
||||
/**
|
||||
* Signed zero.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.ZERO = ZERO;
|
||||
|
||||
@ -384,6 +395,7 @@
|
||||
/**
|
||||
* Unsigned zero.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.UZERO = UZERO;
|
||||
|
||||
@ -396,6 +408,7 @@
|
||||
/**
|
||||
* Signed one.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.ONE = ONE;
|
||||
|
||||
@ -408,6 +421,7 @@
|
||||
/**
|
||||
* Unsigned one.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.UONE = UONE;
|
||||
|
||||
@ -420,6 +434,7 @@
|
||||
/**
|
||||
* Signed negative one.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.NEG_ONE = NEG_ONE;
|
||||
|
||||
@ -432,6 +447,7 @@
|
||||
/**
|
||||
* Maximum signed value.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.MAX_VALUE = MAX_VALUE;
|
||||
|
||||
@ -444,6 +460,7 @@
|
||||
/**
|
||||
* Maximum unsigned value.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
|
||||
|
||||
@ -456,6 +473,7 @@
|
||||
/**
|
||||
* Minimum signed value.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.MIN_VALUE = MIN_VALUE;
|
||||
|
||||
@ -468,6 +486,7 @@
|
||||
/**
|
||||
* Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.
|
||||
* @returns {number}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toInt = function toInt() {
|
||||
return this.unsigned ? this.low >>> 0 : this.low;
|
||||
@ -476,6 +495,7 @@
|
||||
/**
|
||||
* Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).
|
||||
* @returns {number}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toNumber = function toNumber() {
|
||||
if (this.unsigned)
|
||||
@ -489,6 +509,7 @@
|
||||
* @returns {string}
|
||||
* @override
|
||||
* @throws {RangeError} If `radix` is out of range
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toString = function toString(radix) {
|
||||
radix = radix || 10;
|
||||
@ -531,6 +552,7 @@
|
||||
/**
|
||||
* Gets the high 32 bits as a signed integer.
|
||||
* @returns {number} Signed high bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getHighBits = function getHighBits() {
|
||||
return this.high;
|
||||
@ -539,6 +561,7 @@
|
||||
/**
|
||||
* Gets the high 32 bits as an unsigned integer.
|
||||
* @returns {number} Unsigned high bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
|
||||
return this.high >>> 0;
|
||||
@ -547,6 +570,7 @@
|
||||
/**
|
||||
* Gets the low 32 bits as a signed integer.
|
||||
* @returns {number} Signed low bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getLowBits = function getLowBits() {
|
||||
return this.low;
|
||||
@ -555,6 +579,7 @@
|
||||
/**
|
||||
* Gets the low 32 bits as an unsigned integer.
|
||||
* @returns {number} Unsigned low bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
|
||||
return this.low >>> 0;
|
||||
@ -563,6 +588,7 @@
|
||||
/**
|
||||
* Gets the number of bits needed to represent the absolute value of this Long.
|
||||
* @returns {number}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
|
||||
if (this.isNegative()) // Unsigned Longs are never negative
|
||||
@ -577,6 +603,7 @@
|
||||
/**
|
||||
* Tests if this Long's value equals zero.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isZero = function isZero() {
|
||||
return this.high === 0 && this.low === 0;
|
||||
@ -585,6 +612,7 @@
|
||||
/**
|
||||
* Tests if this Long's value is negative.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isNegative = function isNegative() {
|
||||
return !this.unsigned && this.high < 0;
|
||||
@ -593,6 +621,7 @@
|
||||
/**
|
||||
* Tests if this Long's value is positive.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isPositive = function isPositive() {
|
||||
return this.unsigned || this.high >= 0;
|
||||
@ -601,6 +630,7 @@
|
||||
/**
|
||||
* Tests if this Long's value is odd.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isOdd = function isOdd() {
|
||||
return (this.low & 1) === 1;
|
||||
@ -609,6 +639,7 @@
|
||||
/**
|
||||
* Tests if this Long's value is even.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isEven = function isEven() {
|
||||
return (this.low & 1) === 0;
|
||||
@ -618,6 +649,7 @@
|
||||
* Tests if this Long's value equals the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.equals = function equals(other) {
|
||||
if (!isLong(other))
|
||||
@ -632,6 +664,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.eq = LongPrototype.equals;
|
||||
|
||||
@ -639,6 +672,7 @@
|
||||
* Tests if this Long's value differs from the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.notEquals = function notEquals(other) {
|
||||
return !this.eq(/* validates */ other);
|
||||
@ -649,6 +683,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.neq = LongPrototype.notEquals;
|
||||
|
||||
@ -656,6 +691,7 @@
|
||||
* Tests if this Long's value is less than the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lessThan = function lessThan(other) {
|
||||
return this.comp(/* validates */ other) < 0;
|
||||
@ -666,6 +702,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lt = LongPrototype.lessThan;
|
||||
|
||||
@ -673,6 +710,7 @@
|
||||
* Tests if this Long's value is less than or equal the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
|
||||
return this.comp(/* validates */ other) <= 0;
|
||||
@ -683,6 +721,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lte = LongPrototype.lessThanOrEqual;
|
||||
|
||||
@ -690,6 +729,7 @@
|
||||
* Tests if this Long's value is greater than the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.greaterThan = function greaterThan(other) {
|
||||
return this.comp(/* validates */ other) > 0;
|
||||
@ -700,6 +740,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.gt = LongPrototype.greaterThan;
|
||||
|
||||
@ -707,6 +748,7 @@
|
||||
* Tests if this Long's value is greater than or equal the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
|
||||
return this.comp(/* validates */ other) >= 0;
|
||||
@ -717,6 +759,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.gte = LongPrototype.greaterThanOrEqual;
|
||||
|
||||
@ -725,6 +768,7 @@
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {number} 0 if they are the same, 1 if the this is greater and -1
|
||||
* if the given one is greater
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.compare = function compare(other) {
|
||||
if (!isLong(other))
|
||||
@ -750,12 +794,14 @@
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {number} 0 if they are the same, 1 if the this is greater and -1
|
||||
* if the given one is greater
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.comp = LongPrototype.compare;
|
||||
|
||||
/**
|
||||
* Negates this Long's value.
|
||||
* @returns {!Long} Negated Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.negate = function negate() {
|
||||
if (!this.unsigned && this.eq(MIN_VALUE))
|
||||
@ -767,6 +813,7 @@
|
||||
* Negates this Long's value. This is an alias of {@link Long#negate}.
|
||||
* @function
|
||||
* @returns {!Long} Negated Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.neg = LongPrototype.negate;
|
||||
|
||||
@ -774,6 +821,7 @@
|
||||
* Returns the sum of this and the specified Long.
|
||||
* @param {!Long|number|string} addend Addend
|
||||
* @returns {!Long} Sum
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.add = function add(addend) {
|
||||
if (!isLong(addend))
|
||||
@ -810,6 +858,7 @@
|
||||
* Returns the difference of this and the specified Long.
|
||||
* @param {!Long|number|string} subtrahend Subtrahend
|
||||
* @returns {!Long} Difference
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.subtract = function subtract(subtrahend) {
|
||||
if (!isLong(subtrahend))
|
||||
@ -822,6 +871,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} subtrahend Subtrahend
|
||||
* @returns {!Long} Difference
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.sub = LongPrototype.subtract;
|
||||
|
||||
@ -829,6 +879,7 @@
|
||||
* Returns the product of this and the specified Long.
|
||||
* @param {!Long|number|string} multiplier Multiplier
|
||||
* @returns {!Long} Product
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.multiply = function multiply(multiplier) {
|
||||
if (this.isZero())
|
||||
@ -896,6 +947,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} multiplier Multiplier
|
||||
* @returns {!Long} Product
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.mul = LongPrototype.multiply;
|
||||
|
||||
@ -904,6 +956,7 @@
|
||||
* unsigned if this Long is unsigned.
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Quotient
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.divide = function divide(divisor) {
|
||||
if (!isLong(divisor))
|
||||
@ -914,8 +967,6 @@
|
||||
return this.unsigned ? UZERO : ZERO;
|
||||
var approx, rem, res;
|
||||
if (!this.unsigned) {
|
||||
// This section is only relevant for signed longs and is derived from the
|
||||
// closure library as a whole.
|
||||
if (this.eq(MIN_VALUE)) {
|
||||
if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
|
||||
return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
|
||||
@ -941,18 +992,19 @@
|
||||
return this.neg().div(divisor).neg();
|
||||
} else if (divisor.isNegative())
|
||||
return this.div(divisor.neg()).neg();
|
||||
res = ZERO;
|
||||
} else {
|
||||
// The algorithm below has not been made for unsigned longs. It's therefore
|
||||
// required to take special care of the MSB prior to running it.
|
||||
if (!divisor.unsigned)
|
||||
divisor = divisor.toUnsigned();
|
||||
} else if (!divisor.unsigned)
|
||||
divisor = divisor.toUnsigned();
|
||||
|
||||
// The algorithm below has not been made for unsigned longs. It's therefore
|
||||
// required to take special care of the MSB prior to running it.
|
||||
if (this.unsigned) {
|
||||
if (divisor.gt(this))
|
||||
return UZERO;
|
||||
if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true
|
||||
return UONE;
|
||||
res = UZERO;
|
||||
}
|
||||
} else
|
||||
res = ZERO;
|
||||
|
||||
// Repeat the following until the remainder is less than other: find a
|
||||
// floating-point that approximates remainder / other *from below*, add this
|
||||
@ -996,6 +1048,7 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Quotient
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.div = LongPrototype.divide;
|
||||
|
||||
@ -1003,6 +1056,7 @@
|
||||
* Returns this Long modulo the specified.
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Remainder
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.modulo = function modulo(divisor) {
|
||||
if (!isLong(divisor))
|
||||
@ -1015,12 +1069,14 @@
|
||||
* @function
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Remainder
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.mod = LongPrototype.modulo;
|
||||
|
||||
/**
|
||||
* Returns the bitwise NOT of this Long.
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.not = function not() {
|
||||
return fromBits(~this.low, ~this.high, this.unsigned);
|
||||
@ -1030,6 +1086,7 @@
|
||||
* Returns the bitwise AND of this Long and the specified.
|
||||
* @param {!Long|number|string} other Other Long
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.and = function and(other) {
|
||||
if (!isLong(other))
|
||||
@ -1041,6 +1098,7 @@
|
||||
* Returns the bitwise OR of this Long and the specified.
|
||||
* @param {!Long|number|string} other Other Long
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.or = function or(other) {
|
||||
if (!isLong(other))
|
||||
@ -1052,6 +1110,7 @@
|
||||
* Returns the bitwise XOR of this Long and the given one.
|
||||
* @param {!Long|number|string} other Other Long
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.xor = function xor(other) {
|
||||
if (!isLong(other))
|
||||
@ -1063,6 +1122,7 @@
|
||||
* Returns this Long with bits shifted to the left by the given amount.
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shiftLeft = function shiftLeft(numBits) {
|
||||
if (isLong(numBits))
|
||||
@ -1080,6 +1140,7 @@
|
||||
* @function
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shl = LongPrototype.shiftLeft;
|
||||
|
||||
@ -1087,6 +1148,7 @@
|
||||
* Returns this Long with bits arithmetically shifted to the right by the given amount.
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shiftRight = function shiftRight(numBits) {
|
||||
if (isLong(numBits))
|
||||
@ -1104,6 +1166,7 @@
|
||||
* @function
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shr = LongPrototype.shiftRight;
|
||||
|
||||
@ -1111,6 +1174,7 @@
|
||||
* Returns this Long with bits logically shifted to the right by the given amount.
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
|
||||
if (isLong(numBits))
|
||||
@ -1135,12 +1199,14 @@
|
||||
* @function
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shru = LongPrototype.shiftRightUnsigned;
|
||||
|
||||
/**
|
||||
* Converts this Long to signed.
|
||||
* @returns {!Long} Signed long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toSigned = function toSigned() {
|
||||
if (!this.unsigned)
|
||||
@ -1151,6 +1217,7 @@
|
||||
/**
|
||||
* Converts this Long to unsigned.
|
||||
* @returns {!Long} Unsigned long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toUnsigned = function toUnsigned() {
|
||||
if (this.unsigned)
|
||||
@ -1158,53 +1225,6 @@
|
||||
return fromBits(this.low, this.high, true);
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts this Long to its byte representation.
|
||||
* @param {boolean=} le Whether little or big endian, defaults to big endian
|
||||
* @returns {!Array.<number>} Byte representation
|
||||
*/
|
||||
LongPrototype.toBytes = function(le) {
|
||||
return le ? this.toBytesLE() : this.toBytesBE();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts this Long to its little endian byte representation.
|
||||
* @returns {!Array.<number>} Little endian byte representation
|
||||
*/
|
||||
LongPrototype.toBytesLE = function() {
|
||||
var hi = this.high,
|
||||
lo = this.low;
|
||||
return [
|
||||
lo & 0xff,
|
||||
(lo >>> 8) & 0xff,
|
||||
(lo >>> 16) & 0xff,
|
||||
(lo >>> 24) & 0xff,
|
||||
hi & 0xff,
|
||||
(hi >>> 8) & 0xff,
|
||||
(hi >>> 16) & 0xff,
|
||||
(hi >>> 24) & 0xff
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts this Long to its big endian byte representation.
|
||||
* @returns {!Array.<number>} Big endian byte representation
|
||||
*/
|
||||
LongPrototype.toBytesBE = function() {
|
||||
var hi = this.high,
|
||||
lo = this.low;
|
||||
return [
|
||||
(hi >>> 24) & 0xff,
|
||||
(hi >>> 16) & 0xff,
|
||||
(hi >>> 8) & 0xff,
|
||||
hi & 0xff,
|
||||
(lo >>> 24) & 0xff,
|
||||
(lo >>> 16) & 0xff,
|
||||
(lo >>> 8) & 0xff,
|
||||
lo & 0xff
|
||||
];
|
||||
}
|
||||
|
||||
return Long;
|
||||
});
|
||||
|
||||
|
||||
179
dist/libsignal-protocol.js
vendored
179
dist/libsignal-protocol.js
vendored
@ -25399,18 +25399,21 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* The low 32 bits as a signed value.
|
||||
* @type {number}
|
||||
* @expose
|
||||
*/
|
||||
this.low = low | 0;
|
||||
|
||||
/**
|
||||
* The high 32 bits as a signed value.
|
||||
* @type {number}
|
||||
* @expose
|
||||
*/
|
||||
this.high = high | 0;
|
||||
|
||||
/**
|
||||
* Whether unsigned or not.
|
||||
* @type {boolean}
|
||||
* @expose
|
||||
*/
|
||||
this.unsigned = !!unsigned;
|
||||
}
|
||||
@ -25436,9 +25439,10 @@ Curve25519Worker.prototype = {
|
||||
* An indicator used to reliably determine if an object is a Long or not.
|
||||
* @type {boolean}
|
||||
* @const
|
||||
* @expose
|
||||
* @private
|
||||
*/
|
||||
Long.prototype.__isLong__;
|
||||
Long.__isLong__;
|
||||
|
||||
Object.defineProperty(Long.prototype, "__isLong__", {
|
||||
value: true,
|
||||
@ -25461,6 +25465,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {*} obj Object
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
Long.isLong = isLong;
|
||||
|
||||
@ -25517,6 +25522,7 @@ Curve25519Worker.prototype = {
|
||||
* @param {number} value The 32 bit integer in question
|
||||
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromInt = fromInt;
|
||||
|
||||
@ -25551,6 +25557,7 @@ Curve25519Worker.prototype = {
|
||||
* @param {number} value The number in question
|
||||
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromNumber = fromNumber;
|
||||
|
||||
@ -25573,6 +25580,7 @@ Curve25519Worker.prototype = {
|
||||
* @param {number} highBits The high 32 bits
|
||||
* @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromBits = fromBits;
|
||||
|
||||
@ -25642,6 +25650,7 @@ Curve25519Worker.prototype = {
|
||||
* @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed
|
||||
* @param {number=} radix The radix in which the text is written (2-36), defaults to 10
|
||||
* @returns {!Long} The corresponding Long value
|
||||
* @expose
|
||||
*/
|
||||
Long.fromString = fromString;
|
||||
|
||||
@ -25667,6 +25676,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.fromValue = fromValue;
|
||||
|
||||
@ -25724,6 +25734,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Signed zero.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.ZERO = ZERO;
|
||||
|
||||
@ -25736,6 +25747,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Unsigned zero.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.UZERO = UZERO;
|
||||
|
||||
@ -25748,6 +25760,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Signed one.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.ONE = ONE;
|
||||
|
||||
@ -25760,6 +25773,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Unsigned one.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.UONE = UONE;
|
||||
|
||||
@ -25772,6 +25786,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Signed negative one.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.NEG_ONE = NEG_ONE;
|
||||
|
||||
@ -25784,6 +25799,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Maximum signed value.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.MAX_VALUE = MAX_VALUE;
|
||||
|
||||
@ -25796,6 +25812,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Maximum unsigned value.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
|
||||
|
||||
@ -25808,6 +25825,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Minimum signed value.
|
||||
* @type {!Long}
|
||||
* @expose
|
||||
*/
|
||||
Long.MIN_VALUE = MIN_VALUE;
|
||||
|
||||
@ -25820,6 +25838,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.
|
||||
* @returns {number}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toInt = function toInt() {
|
||||
return this.unsigned ? this.low >>> 0 : this.low;
|
||||
@ -25828,6 +25847,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).
|
||||
* @returns {number}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toNumber = function toNumber() {
|
||||
if (this.unsigned)
|
||||
@ -25841,6 +25861,7 @@ Curve25519Worker.prototype = {
|
||||
* @returns {string}
|
||||
* @override
|
||||
* @throws {RangeError} If `radix` is out of range
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toString = function toString(radix) {
|
||||
radix = radix || 10;
|
||||
@ -25883,6 +25904,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Gets the high 32 bits as a signed integer.
|
||||
* @returns {number} Signed high bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getHighBits = function getHighBits() {
|
||||
return this.high;
|
||||
@ -25891,6 +25913,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Gets the high 32 bits as an unsigned integer.
|
||||
* @returns {number} Unsigned high bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
|
||||
return this.high >>> 0;
|
||||
@ -25899,6 +25922,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Gets the low 32 bits as a signed integer.
|
||||
* @returns {number} Signed low bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getLowBits = function getLowBits() {
|
||||
return this.low;
|
||||
@ -25907,6 +25931,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Gets the low 32 bits as an unsigned integer.
|
||||
* @returns {number} Unsigned low bits
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
|
||||
return this.low >>> 0;
|
||||
@ -25915,6 +25940,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Gets the number of bits needed to represent the absolute value of this Long.
|
||||
* @returns {number}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
|
||||
if (this.isNegative()) // Unsigned Longs are never negative
|
||||
@ -25929,6 +25955,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Tests if this Long's value equals zero.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isZero = function isZero() {
|
||||
return this.high === 0 && this.low === 0;
|
||||
@ -25937,6 +25964,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Tests if this Long's value is negative.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isNegative = function isNegative() {
|
||||
return !this.unsigned && this.high < 0;
|
||||
@ -25945,6 +25973,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Tests if this Long's value is positive.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isPositive = function isPositive() {
|
||||
return this.unsigned || this.high >= 0;
|
||||
@ -25953,6 +25982,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Tests if this Long's value is odd.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isOdd = function isOdd() {
|
||||
return (this.low & 1) === 1;
|
||||
@ -25961,6 +25991,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Tests if this Long's value is even.
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.isEven = function isEven() {
|
||||
return (this.low & 1) === 0;
|
||||
@ -25970,6 +26001,7 @@ Curve25519Worker.prototype = {
|
||||
* Tests if this Long's value equals the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.equals = function equals(other) {
|
||||
if (!isLong(other))
|
||||
@ -25984,6 +26016,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.eq = LongPrototype.equals;
|
||||
|
||||
@ -25991,6 +26024,7 @@ Curve25519Worker.prototype = {
|
||||
* Tests if this Long's value differs from the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.notEquals = function notEquals(other) {
|
||||
return !this.eq(/* validates */ other);
|
||||
@ -26001,6 +26035,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.neq = LongPrototype.notEquals;
|
||||
|
||||
@ -26008,6 +26043,7 @@ Curve25519Worker.prototype = {
|
||||
* Tests if this Long's value is less than the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lessThan = function lessThan(other) {
|
||||
return this.comp(/* validates */ other) < 0;
|
||||
@ -26018,6 +26054,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lt = LongPrototype.lessThan;
|
||||
|
||||
@ -26025,6 +26062,7 @@ Curve25519Worker.prototype = {
|
||||
* Tests if this Long's value is less than or equal the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
|
||||
return this.comp(/* validates */ other) <= 0;
|
||||
@ -26035,6 +26073,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.lte = LongPrototype.lessThanOrEqual;
|
||||
|
||||
@ -26042,6 +26081,7 @@ Curve25519Worker.prototype = {
|
||||
* Tests if this Long's value is greater than the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.greaterThan = function greaterThan(other) {
|
||||
return this.comp(/* validates */ other) > 0;
|
||||
@ -26052,6 +26092,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.gt = LongPrototype.greaterThan;
|
||||
|
||||
@ -26059,6 +26100,7 @@ Curve25519Worker.prototype = {
|
||||
* Tests if this Long's value is greater than or equal the specified's.
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
|
||||
return this.comp(/* validates */ other) >= 0;
|
||||
@ -26069,6 +26111,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {boolean}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.gte = LongPrototype.greaterThanOrEqual;
|
||||
|
||||
@ -26077,6 +26120,7 @@ Curve25519Worker.prototype = {
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {number} 0 if they are the same, 1 if the this is greater and -1
|
||||
* if the given one is greater
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.compare = function compare(other) {
|
||||
if (!isLong(other))
|
||||
@ -26102,12 +26146,14 @@ Curve25519Worker.prototype = {
|
||||
* @param {!Long|number|string} other Other value
|
||||
* @returns {number} 0 if they are the same, 1 if the this is greater and -1
|
||||
* if the given one is greater
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.comp = LongPrototype.compare;
|
||||
|
||||
/**
|
||||
* Negates this Long's value.
|
||||
* @returns {!Long} Negated Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.negate = function negate() {
|
||||
if (!this.unsigned && this.eq(MIN_VALUE))
|
||||
@ -26119,6 +26165,7 @@ Curve25519Worker.prototype = {
|
||||
* Negates this Long's value. This is an alias of {@link Long#negate}.
|
||||
* @function
|
||||
* @returns {!Long} Negated Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.neg = LongPrototype.negate;
|
||||
|
||||
@ -26126,6 +26173,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns the sum of this and the specified Long.
|
||||
* @param {!Long|number|string} addend Addend
|
||||
* @returns {!Long} Sum
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.add = function add(addend) {
|
||||
if (!isLong(addend))
|
||||
@ -26162,6 +26210,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns the difference of this and the specified Long.
|
||||
* @param {!Long|number|string} subtrahend Subtrahend
|
||||
* @returns {!Long} Difference
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.subtract = function subtract(subtrahend) {
|
||||
if (!isLong(subtrahend))
|
||||
@ -26174,6 +26223,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} subtrahend Subtrahend
|
||||
* @returns {!Long} Difference
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.sub = LongPrototype.subtract;
|
||||
|
||||
@ -26181,6 +26231,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns the product of this and the specified Long.
|
||||
* @param {!Long|number|string} multiplier Multiplier
|
||||
* @returns {!Long} Product
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.multiply = function multiply(multiplier) {
|
||||
if (this.isZero())
|
||||
@ -26248,6 +26299,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} multiplier Multiplier
|
||||
* @returns {!Long} Product
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.mul = LongPrototype.multiply;
|
||||
|
||||
@ -26256,6 +26308,7 @@ Curve25519Worker.prototype = {
|
||||
* unsigned if this Long is unsigned.
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Quotient
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.divide = function divide(divisor) {
|
||||
if (!isLong(divisor))
|
||||
@ -26266,8 +26319,6 @@ Curve25519Worker.prototype = {
|
||||
return this.unsigned ? UZERO : ZERO;
|
||||
var approx, rem, res;
|
||||
if (!this.unsigned) {
|
||||
// This section is only relevant for signed longs and is derived from the
|
||||
// closure library as a whole.
|
||||
if (this.eq(MIN_VALUE)) {
|
||||
if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
|
||||
return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
|
||||
@ -26293,18 +26344,19 @@ Curve25519Worker.prototype = {
|
||||
return this.neg().div(divisor).neg();
|
||||
} else if (divisor.isNegative())
|
||||
return this.div(divisor.neg()).neg();
|
||||
res = ZERO;
|
||||
} else {
|
||||
// The algorithm below has not been made for unsigned longs. It's therefore
|
||||
// required to take special care of the MSB prior to running it.
|
||||
if (!divisor.unsigned)
|
||||
divisor = divisor.toUnsigned();
|
||||
} else if (!divisor.unsigned)
|
||||
divisor = divisor.toUnsigned();
|
||||
|
||||
// The algorithm below has not been made for unsigned longs. It's therefore
|
||||
// required to take special care of the MSB prior to running it.
|
||||
if (this.unsigned) {
|
||||
if (divisor.gt(this))
|
||||
return UZERO;
|
||||
if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true
|
||||
return UONE;
|
||||
res = UZERO;
|
||||
}
|
||||
} else
|
||||
res = ZERO;
|
||||
|
||||
// Repeat the following until the remainder is less than other: find a
|
||||
// floating-point that approximates remainder / other *from below*, add this
|
||||
@ -26348,6 +26400,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Quotient
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.div = LongPrototype.divide;
|
||||
|
||||
@ -26355,6 +26408,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns this Long modulo the specified.
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Remainder
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.modulo = function modulo(divisor) {
|
||||
if (!isLong(divisor))
|
||||
@ -26367,12 +26421,14 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {!Long|number|string} divisor Divisor
|
||||
* @returns {!Long} Remainder
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.mod = LongPrototype.modulo;
|
||||
|
||||
/**
|
||||
* Returns the bitwise NOT of this Long.
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.not = function not() {
|
||||
return fromBits(~this.low, ~this.high, this.unsigned);
|
||||
@ -26382,6 +26438,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns the bitwise AND of this Long and the specified.
|
||||
* @param {!Long|number|string} other Other Long
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.and = function and(other) {
|
||||
if (!isLong(other))
|
||||
@ -26393,6 +26450,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns the bitwise OR of this Long and the specified.
|
||||
* @param {!Long|number|string} other Other Long
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.or = function or(other) {
|
||||
if (!isLong(other))
|
||||
@ -26404,6 +26462,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns the bitwise XOR of this Long and the given one.
|
||||
* @param {!Long|number|string} other Other Long
|
||||
* @returns {!Long}
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.xor = function xor(other) {
|
||||
if (!isLong(other))
|
||||
@ -26415,6 +26474,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns this Long with bits shifted to the left by the given amount.
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shiftLeft = function shiftLeft(numBits) {
|
||||
if (isLong(numBits))
|
||||
@ -26432,6 +26492,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shl = LongPrototype.shiftLeft;
|
||||
|
||||
@ -26439,6 +26500,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns this Long with bits arithmetically shifted to the right by the given amount.
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shiftRight = function shiftRight(numBits) {
|
||||
if (isLong(numBits))
|
||||
@ -26456,6 +26518,7 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shr = LongPrototype.shiftRight;
|
||||
|
||||
@ -26463,6 +26526,7 @@ Curve25519Worker.prototype = {
|
||||
* Returns this Long with bits logically shifted to the right by the given amount.
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
|
||||
if (isLong(numBits))
|
||||
@ -26487,12 +26551,14 @@ Curve25519Worker.prototype = {
|
||||
* @function
|
||||
* @param {number|!Long} numBits Number of bits
|
||||
* @returns {!Long} Shifted Long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.shru = LongPrototype.shiftRightUnsigned;
|
||||
|
||||
/**
|
||||
* Converts this Long to signed.
|
||||
* @returns {!Long} Signed long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toSigned = function toSigned() {
|
||||
if (!this.unsigned)
|
||||
@ -26503,6 +26569,7 @@ Curve25519Worker.prototype = {
|
||||
/**
|
||||
* Converts this Long to unsigned.
|
||||
* @returns {!Long} Unsigned long
|
||||
* @expose
|
||||
*/
|
||||
LongPrototype.toUnsigned = function toUnsigned() {
|
||||
if (this.unsigned)
|
||||
@ -26510,53 +26577,6 @@ Curve25519Worker.prototype = {
|
||||
return fromBits(this.low, this.high, true);
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts this Long to its byte representation.
|
||||
* @param {boolean=} le Whether little or big endian, defaults to big endian
|
||||
* @returns {!Array.<number>} Byte representation
|
||||
*/
|
||||
LongPrototype.toBytes = function(le) {
|
||||
return le ? this.toBytesLE() : this.toBytesBE();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts this Long to its little endian byte representation.
|
||||
* @returns {!Array.<number>} Little endian byte representation
|
||||
*/
|
||||
LongPrototype.toBytesLE = function() {
|
||||
var hi = this.high,
|
||||
lo = this.low;
|
||||
return [
|
||||
lo & 0xff,
|
||||
(lo >>> 8) & 0xff,
|
||||
(lo >>> 16) & 0xff,
|
||||
(lo >>> 24) & 0xff,
|
||||
hi & 0xff,
|
||||
(hi >>> 8) & 0xff,
|
||||
(hi >>> 16) & 0xff,
|
||||
(hi >>> 24) & 0xff
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts this Long to its big endian byte representation.
|
||||
* @returns {!Array.<number>} Big endian byte representation
|
||||
*/
|
||||
LongPrototype.toBytesBE = function() {
|
||||
var hi = this.high,
|
||||
lo = this.low;
|
||||
return [
|
||||
(hi >>> 24) & 0xff,
|
||||
(hi >>> 16) & 0xff,
|
||||
(hi >>> 8) & 0xff,
|
||||
hi & 0xff,
|
||||
(lo >>> 24) & 0xff,
|
||||
(lo >>> 16) & 0xff,
|
||||
(lo >>> 8) & 0xff,
|
||||
lo & 0xff
|
||||
];
|
||||
}
|
||||
|
||||
return Long;
|
||||
});
|
||||
|
||||
@ -35291,6 +35311,8 @@ var Internal = Internal || {};
|
||||
result = result | (a[i] ^ b[i]);
|
||||
}
|
||||
if (result !== 0) {
|
||||
console.log('Our MAC ', dcodeIO.ByteBuffer.wrap(calculated_mac).toHex());
|
||||
console.log('Their MAC', dcodeIO.ByteBuffer.wrap(mac).toHex());
|
||||
throw new Error("Bad MAC");
|
||||
}
|
||||
});
|
||||
@ -35740,10 +35762,6 @@ Internal.SessionRecord = function() {
|
||||
delete sessions[util.toString(oldestBaseKey)];
|
||||
}
|
||||
},
|
||||
deleteAllSessions: function() {
|
||||
// Used primarily in session reset scenarios, where we really delete sessions
|
||||
this.sessions = {};
|
||||
}
|
||||
};
|
||||
|
||||
return SessionRecord;
|
||||
@ -36014,7 +36032,14 @@ libsignal.SessionBuilder = function (storage, remoteAddress) {
|
||||
this.processV3 = builder.processV3.bind(builder);
|
||||
};
|
||||
|
||||
function SessionCipher(storage, remoteAddress) {
|
||||
function SessionCipher(storage, remoteAddress, options) {
|
||||
options = options || {};
|
||||
|
||||
if (typeof options.messageKeysLimit === 'undefined') {
|
||||
options.messageKeysLimit = 1000;
|
||||
}
|
||||
|
||||
this.messageKeysLimit = options.messageKeysLimit;
|
||||
this.remoteAddress = remoteAddress;
|
||||
this.storage = storage;
|
||||
}
|
||||
@ -36232,7 +36257,7 @@ SessionCipher.prototype = {
|
||||
}.bind(this));
|
||||
},
|
||||
doDecryptWhisperMessage: function(messageBytes, session) {
|
||||
if (!(messageBytes instanceof ArrayBuffer)) {
|
||||
if (!messageBytes instanceof ArrayBuffer) {
|
||||
throw new Error("Expected messageBytes to be an ArrayBuffer");
|
||||
}
|
||||
var version = (new Uint8Array(messageBytes))[0];
|
||||
@ -36287,12 +36312,13 @@ SessionCipher.prototype = {
|
||||
});
|
||||
},
|
||||
fillMessageKeys: function(chain, counter) {
|
||||
if (chain.chainKey.counter >= counter) {
|
||||
return Promise.resolve(); // Already calculated
|
||||
if (this.messageKeysLimit && Object.keys(chain.messageKeys).length >= this.messageKeysLimit) {
|
||||
console.log("Too many message keys for chain");
|
||||
return Promise.resolve(); // Stalker, much?
|
||||
}
|
||||
|
||||
if (counter - chain.chainKey.counter > 2000) {
|
||||
throw new Error('Over 2000 messages into the future!');
|
||||
if (chain.chainKey.counter >= counter) {
|
||||
return Promise.resolve(); // Already calculated
|
||||
}
|
||||
|
||||
if (chain.chainKey.key === undefined) {
|
||||
@ -36406,25 +36432,11 @@ SessionCipher.prototype = {
|
||||
return this.storage.storeSession(address, record.serialize());
|
||||
}.bind(this));
|
||||
}.bind(this));
|
||||
},
|
||||
deleteAllSessionsForDevice: function() {
|
||||
// Used in session reset scenarios, where we really need to delete
|
||||
var address = this.remoteAddress.toString();
|
||||
return Internal.SessionLock.queueJobForNumber(address, function() {
|
||||
return this.getRecord(address).then(function(record) {
|
||||
if (record === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
record.deleteAllSessions();
|
||||
return this.storage.storeSession(address, record.serialize());
|
||||
}.bind(this));
|
||||
}.bind(this));
|
||||
}
|
||||
};
|
||||
|
||||
libsignal.SessionCipher = function(storage, remoteAddress) {
|
||||
var cipher = new SessionCipher(storage, remoteAddress);
|
||||
libsignal.SessionCipher = function(storage, remoteAddress, options) {
|
||||
var cipher = new SessionCipher(storage, remoteAddress, options);
|
||||
|
||||
// returns a Promise that resolves to a ciphertext object
|
||||
this.encrypt = cipher.encrypt.bind(cipher);
|
||||
@ -36439,7 +36451,6 @@ libsignal.SessionCipher = function(storage, remoteAddress) {
|
||||
this.getRemoteRegistrationId = cipher.getRemoteRegistrationId.bind(cipher);
|
||||
this.hasOpenSession = cipher.hasOpenSession.bind(cipher);
|
||||
this.closeOpenSessionForDevice = cipher.closeOpenSessionForDevice.bind(cipher);
|
||||
this.deleteAllSessionsForDevice = cipher.deleteAllSessionsForDevice.bind(cipher);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "libsignal-protocol",
|
||||
"repository": "https://github.com/WhisperSystems/libsignal-protocol-javascript.git",
|
||||
"version": "1.3.0",
|
||||
"version": "1.2.0",
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
"long": "^3.1.0",
|
||||
|
||||
@ -1,4 +1,11 @@
|
||||
function SessionCipher(storage, remoteAddress) {
|
||||
function SessionCipher(storage, remoteAddress, options) {
|
||||
options = options || {};
|
||||
|
||||
if (typeof options.messageKeysLimit === 'undefined') {
|
||||
options.messageKeysLimit = 1000;
|
||||
}
|
||||
|
||||
this.messageKeysLimit = options.messageKeysLimit;
|
||||
this.remoteAddress = remoteAddress;
|
||||
this.storage = storage;
|
||||
}
|
||||
@ -271,12 +278,13 @@ SessionCipher.prototype = {
|
||||
});
|
||||
},
|
||||
fillMessageKeys: function(chain, counter) {
|
||||
if (chain.chainKey.counter >= counter) {
|
||||
return Promise.resolve(); // Already calculated
|
||||
if (this.messageKeysLimit && Object.keys(chain.messageKeys).length >= this.messageKeysLimit) {
|
||||
console.log("Too many message keys for chain");
|
||||
return Promise.resolve(); // Stalker, much?
|
||||
}
|
||||
|
||||
if (counter - chain.chainKey.counter > 2000) {
|
||||
throw new Error('Over 2000 messages into the future!');
|
||||
if (chain.chainKey.counter >= counter) {
|
||||
return Promise.resolve(); // Already calculated
|
||||
}
|
||||
|
||||
if (chain.chainKey.key === undefined) {
|
||||
@ -407,8 +415,8 @@ SessionCipher.prototype = {
|
||||
}
|
||||
};
|
||||
|
||||
libsignal.SessionCipher = function(storage, remoteAddress) {
|
||||
var cipher = new SessionCipher(storage, remoteAddress);
|
||||
libsignal.SessionCipher = function(storage, remoteAddress, options) {
|
||||
var cipher = new SessionCipher(storage, remoteAddress, options);
|
||||
|
||||
// returns a Promise that resolves to a ciphertext object
|
||||
this.encrypt = cipher.encrypt.bind(cipher);
|
||||
|
||||
@ -101,6 +101,8 @@ var Internal = Internal || {};
|
||||
result = result | (a[i] ^ b[i]);
|
||||
}
|
||||
if (result !== 0) {
|
||||
console.log('Our MAC ', dcodeIO.ByteBuffer.wrap(calculated_mac).toHex());
|
||||
console.log('Their MAC', dcodeIO.ByteBuffer.wrap(mac).toHex());
|
||||
throw new Error("Bad MAC");
|
||||
}
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user