Axolotl protocol implementation for TypeScript.
npm install @wireapp/proteusThis repository is part of the source code of Wire. You can find more information at wire.com or by contacting opensource@wire.com.
You can find the published source code at github.com/wireapp.
For licensing information, see the attached LICENSE file and the list of third-party licenses at wire.com/legal/licenses/.
```
yarn add @wireapp/proteus
`typescript
import {init, keys} from '@wireapp/proteus';
await init();
const yourIdentity = keys.IdentityKeyPair.new();
`
Run benchmark on main thread:
``
yarn start:benchmark
Run benchmark with worker threads:
``
yarn start:benchmark --workers [amount]
Results:
| Scenario | MacBook Air M1 (2020) A2337
(8C CPU, 16 GB RAM)
Node v16.0.0 |
| --- | :-: |
| Generating "4000" pre-key bundles (single-threaded) | 1461ms |
| Initializing "4000" sessions (single-threaded) | 2967ms |
| Encrypting "4000" texts (single-threaded) | 200ms |
| Error Code | Type/Error | Reason |
| :-: | :-: | :-: |
| 2 | RangeErrorundefined
Offset is outside the bounds of the DataView | Remote side failed to encrypt message ( text or similar error), thus we receive a 💣 from Cryptobox. |DecryptError
| 200 | DecryptError.InvalidMessage
Unknown message type | Remote side does not follow proteus specification |
| 201 | DecryptError.InvalidMessage
Can't initialise a session from a CipherMessage. | Occurs when the remote party thinks we have an initialised session, but it does not/no longer exist locally. We must have confirmed the session with the remote party by sending them a message. Until then then they continue to send us PreKeyMessages instead of CipherMessages. We prematurely deleted the session before decrypting all events. |
| 202 | DecryptError.PrekeyNotFound
Unknown message format: The message is neither a "CipherMessage" nor a "PreKeyMessage". | Remote side does not follow proteus specification |
| 203 | DecryptError.RemoteIdentityChanged
Could not delete PreKey |
| 204 | DecryptError.InvalidMessage
Remote identity changed | Client of the user has changed without informing us (Man in the middle attack? or database conflicts on the remote side: sessions get mixed with new client) |
| 205 | DecryptError.InvalidSignature
No matching session tag. | Usually happens when we receive a message intended for another client. |
| 206 | DecryptError.InvalidSignature
Decryption of a message in sync failed | Envelope mac key verification failed |
| 207 | DecryptError.OutdatedMessage
Decryption of a newer message failed | Envelope mac key verification failed. Session broken or out of sync. Reset the session and decryption is likely to work again! |
| 208 | DecryptError.DuplicateMessage
Message is out of sync | Opposite of "Too distant future" error |
| 209 | DecryptError.InvalidSignature
Duplicate message | Happens if an encrypted message is decrypted twice |
| 210 | DecryptError.TooDistantFuture
Decryption of a previous (older) message failed | Envelope mac key verification |
| 211 | DecryptError.TooDistantFuture
Message is from too distant in the future | More than 1000 messages at the beginning of the receive chain were skipped |
| 212 | DecryptError.InvalidMessage
Message is from too distant in the future | More than 1000 messages on the receive chain were skipped |
| 213 | 💣
Sender failed to encrypt a message. | Error on receiver side when remote side sends a |DecryptError.InvalidMessage`
| 300 |
The received message was too big. |