GithubHelp home page GithubHelp logo

mitchellporter / wire Goto Github PK

View Code? Open in Web Editor NEW

This project forked from wireapp/wire

0.0 0.0 0.0 68 KB

Overview of the open source code for https://wire.com

License: GNU General Public License v3.0

wire's Introduction

What is Wire

Wire is a an app for modern, private communications. It offers text, voice, video and sending media, and all user communication on Wire is end-to-end encrypted. It is available for iOS, Android, OS X, Windows, and modern web browsers.

We've released components of the app that take care of encryption and data handling as Open Source.

The privacy page and the privacy and security whitepapers explain the details of the encryption algorithms and protocols used.

Wire architecture

The Wire mobile app has an architectural layer that we call sync engine. It is the client-side layer that processes all the data that is displayed in the mobile app. It handles network communication and authentication with the backend, push notifications, local caching of data, client-side business logic, signaling with the audio-video libraries, encryption and decryption (using encryption libraries from a lower level) and other bits and pieces.

The user interface layer of the mobile app is built on top of the sync engine, which provides the data to display to the UI. The sync engine itself is built on top of a few third-party frameworks, and uses Wire components that are shared between platforms for cryptography (Proteus/Cryptobox) and audio-video signaling (AVS).

Mobile app architecture

We are looking into releasing more components in the future. For the moment, we provide source code for encryption (Proteus/Cryptobox) and data handling (Sync Engine and AVS).

iOS

ZMessaging-cocoa is the top-most layer of the iOS sync engine, and it is using on a number of lower-level frameworks. ZMessaging-cocoa and the lower-lever frameworks constitute the iOS sync engine, as illustrated in the following picture.

iOS architecture

The iOS sync engine is developed in a mix of Objective-C and Swift (and just a handful of classes in Objective-C++). It is a result of a long development process that was started in Objective-C when Swift was not yet available. In the past year, parts of it have been written or rewritten in Swift. Going forward, expect new functionalities to be developed almost exclusively in Swift.

Repositories

  • zmessaging-cocoa: topmost layer that implements client-side business logic, caching, encryption and client-side backend communication protocol
  • zmc-utilities: implements common data structures, algorithms (such as symmetric encryption) and application environment detection (internal or public build / production or staging backend)
  • zmc-system: covers interaction with ASL (Apple logging), profiling and wrappers of some foundation/cocoa classes
  • zmc-transport: abstracts the network communication with the backend: handles authentication of requests, network failures and retries transparently
  • zmc-testing: testing utilities
  • zmc-protos: precompiled protocol buffer definitions for objective-c / swift and some convenience methods around them
  • zmc-mocktransport: simulates the entire network component (including backend behaviour) for testing purposes
  • zmc-images: performs rotation and scaling of images
  • zmc-cryptobox: higher level convenience wrappers around cryptobox for iOS
  • cryptobox-ios: iOS binaries for cryptobox

Android

The Android sync engine is developed in Scala.

Repositories

Web App & Native Apps

Wire's web application (called “Wire for Web”) is a web application which runs in modern browsers (Chrome, Edge, Firefox & Opera). It's core is written in CoffeeScript and automatically transpiled into JavaScript. Wire for Windows and Wire for OS X are native applications powered by Electron and embedding (wrapping) Wire's web application.

Repositories

Dependencies

cryptobox-bowercryptobox.jsproteus.jslibsodium.js & cbor-codec.js

AVS

The audio, video, and signaling (AVS) library of Wire is developed in ANSI C/C++. The code is cross compiled for Android and iOS. Wrappers for interaction with upstream modules are written in Java for Android and Objective-C for iOS.

Repositories

  • avs: Audio-video library for calling (mostly C), then cross compiled for iOS and Android

Proteus/Cryptobox

The Axolotl protocol implementation and other cryptographic and utility libraries are developed in Rust, then cross-compiled for iOS and Android. The web version has its own port of these libraries in JavaScript.

Repositories

  • proteus: Axolotl Protocol Implementation in Rust, then cross compiled for iOS and Android
  • libsodium: A modern and easy-to-use crypto library.
  • cryptobox: High-level API with persistent storage for proteus
  • cryptobox-haskell: Haskell bindings to cryptobox
  • cryptobox-c: C-FFI to cryptobox
  • hkdf: HKDF implementation (RFC 5869) in Rust, then cross compiled to iOS and Android

Common definitions

Protocol buffer definitions are used by all clients to communicate with each other and with the backend.

Repositories

  • generic-message-proto: Protocol buffer definitions that are part of the cross-platform client communication protocol
  • backend-api-protobuf: Protocol buffer definitions that are part of the backend communication protocol

wire's People

Contributors

wireswiss avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.