Skip to content

Commit

Permalink
v1.3.1 (719)
Browse files Browse the repository at this point in the history
  • Loading branch information
tbaigner committed Feb 2, 2024
1 parent 565c40e commit 1f94bc6
Show file tree
Hide file tree
Showing 1,414 changed files with 125,654 additions and 63,197 deletions.
23 changes: 23 additions & 0 deletions .package.resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"pins" : [
{
"identity" : "appauth-ios-for-olvid",
"kind" : "remoteSourceControl",
"location" : "https://github.com/olvid-io/AppAuth-iOS-for-Olvid",
"state" : {
"branch" : "targetfix",
"revision" : "0d90e24667c4a1fd9a84edb27ce966cc395f1314"
}
},
{
"identity" : "joseswift-for-olvid",
"kind" : "remoteSourceControl",
"location" : "https://github.com/olvid-io/JOSESwift-for-Olvid",
"state" : {
"branch" : "targetfix",
"revision" : "a1cd4c990da61c86e5bb4cd7605e2d372cc10c72"
}
}
],
"version" : 2
}
2 changes: 1 addition & 1 deletion .tuist-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.18.0
3.33.4
64 changes: 64 additions & 0 deletions CHANGELOG.en.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,69 @@
# Changelog

## [1.3.1 (719)] - 2023-12-11

- Bugfix release

## [1.3 (716)] - 2023-12-08

- Secure calls are now available on macOS!
- The secure calls feature has a fresh new aesthetic, designed to enhance visual appeal across all devices and orientations.
- Introducing a revamped interface for editing the nickname and custom photo of contacts or groups.
- Enjoy the convenience of inviting all group members simultaneously with the new "Invite All" option.
- Resolves an issue on macOS related to file imports using AirDrop.
- Addresses various bugs concerning keycloak-managed users when the keycloak server is inaccessible.
- Resolves a crash that occurred on certain iPhones when rotating the screen during an active discussion.
- Fixes a bug that hindered secure calls from functioning when the device's local time was incorrect.
- Various other minor bug fixes.

## [1.2 (709)] - 2023-10-25

- It is now possible to subscribe to the multi-device while adding a new device.
- Fixes localization issues.
- Fixes a bug sometimes provoking a crash in the background.
- Fixes a few issues concerning groups (including enterprise managed groups).
- Several fixes improving the multi-device experience.

## [1.1 (705)] - 2023-10-15

- Fully redesigned invitation tab!
- Improves the onboarding process.
- Fixes the authorization screen request access to the microphone.
- Fixes an issue sometimes preventing to receive a code during an invitation process.

## [1.0 (703)] - 2023-10-10

- This is a major update! Welcome to Olvid v1.0 ;-)
- You can now use the same profile on multiple devices simultaneously!
- Start a conversation on your iPhone, continue it on your Mac, finish it on your iPad.
- All your contacts, groups, and settings stay synchronized across all your devices.
- Add a new contact on the go thanks to your iPhone, discuss with them from any device.
- All your conversations stay end-to-end secured (end-to-end encrypted and end-to-end authenticated) across all your devices and those of your contacts.
- Adding a new device to your list of devices is done in seconds thanks to a new, completely redesigned, secure, onboarding process!
- Changing phone is now also done in seconds if you still have your old device at hand.

## [0.12.12 (694)] - 2023-09-15

- Ready for iOS 17!
- You can drag and drop files from (and to) the discussion screen under iPadOS.
- Fixes various typos in French.
- Fixes an issue sometimes preventing a backup to be restored.
- Fixes an issue sometimes preventing the finalization of the download of certain attachments.
- Fixes a bug preventing copy/paste of text in the compose view.
- Fixes an issue preventing a profile from taking advantage of another profile's permission to emit secure calls.
- The list of trust origins is now displayed on a separate screen.
- Adds an advanced setting allowing you to download missing profile pictures for contacts, groups, and personal profiles.

## [0.12.11 (669)] - 2023-07-19

- Fixes a bug preventing certain copy/paste in the composition field.
- Updates the UI of the contact sheet.

## [0.12.10 (666)] - 2023-07-11

- Fixes a bug preventing the download of attachments under iOS 17 beta 3.
- Other minor bugfixes

## [0.12.9 (661)] - 2023-05-22

- Improves the new group protocol to prevent situations were group pending members would never become full members. Basically, Olvid works even better than before.
Expand Down
66 changes: 65 additions & 1 deletion CHANGELOG.fr.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,69 @@
# Changelog

## [1.3.1 (719)] - 2023-12-11

- Bugfix

## [1.3 (716)] - 2023-12-08

- Les appels sécurisés sont désormais disponibles sur macOS !
- Les interfaces des appels sécurisés ont été repensées pour s'adapter à tous les écrans et orientations.
- Introduction d'une nouvelle interface permettant de modifier le surnom et la photo personnalisée d'un contact ou d'un groupe.
- Il est désormais possible d'inviter tous les membres d'un groupe en une seule fois pour des discussions privées individuelles.
- Correction d'une erreur sous macOS lors de l'importation d'un fichier via AirDrop.
- Résolution de plusieurs bugs liés aux utilisateurs gérés par Keycloak lorsque le serveur Keycloak n'est pas accessible.
- Correction d'un crash sur certains iPhone lors de la rotation de l'écran.
- Correction d'un bug empêchant les appels sécurisés de fonctionner lorsque l'heure locale de l'appareil est incorrecte.
- Diverses autres corrections mineures.

## [1.2 (709)] - 2023-10-25

- Il est possible de souscrire un abonnement au moment de l'ajout d'un nouvel appareil.
- Corrige des erreurs de traduction.
- Corrige une erreur pouvant provoquer un crash de l'app en arrière plan.
- Corrige un certain nombre de bug concernant les groupes (y compris les groupes administrés par annuaire).
- Plusieurs corrections afin d'améliorer l'expérience en multi-appareils.

## [1.1 (705)] - 2023-10-15

- Nouveau tab d'invitations !
- Améliore le processus d'onboarding.
- Corrige l'écran d'autorisation à l'occasion de la demande de micro.
- Corrige un bug empêchant parfois d'arriver au terme d'une invitation.

## [1.0 (703)] - 2023-10-10

- Mise à jour majeure ! Bienvenue à Olvid v1.0 ;-)
- Vous pouvez maintenant utiliser votre profil sur plusieurs appareils simultanément !
- Commencez une discussion sur votre iPhone, continuez-la sur votre Mac, terminez-la sur votre iPad.
- Tous vos contacts, groupes et paramètres restent synchronisés entre tous vos appareils.
- Ajoutez un nouveau contact depuis votre iPhone, discutez ensuite depuis n’importe lequel de vos appareils.
- Vos conversations restent sécurisées de bout en bout (chiffrées de bout en bout et authentifiées de bout en bout) entre tous vos appareils et ceux de vos contacts.
- Ajouter un nouvel appareil à votre liste d’appareils ne demande que quelques secondes grâce à un nouveau processus « d’onboarding » sécurisé complètement revu !
- Changer de téléphone ne demande que quelques secondes si vous avez encore votre ancien appareil sous la main.

## [0.12.12 (694)] - 2023-09-15

- Tout est prêt pour iOS 17 !
- Il est possible de faire un glisser-déposer depuis (et vers) la vue de discussion sur iPadOS.
- Corrige de nombreuses erreurs dans les textes français.
- Corrige un bug empêchant parfois une sauvegarde d'être restaurée.
- Corrige un bug empêchant parfois l'accès à une pièce jointe après son téléchargement.
- Corrige un bug empêchant le copier/coller de certains liens dans la zone de composition.
- Corrige un bug empêchant un profil de profiter du droit d'appeler d'un autre profil.
- La liste des origines de confiance est maintenant affichée sur un écran séparé.
- Un paramètre avancé permet de télécharger les photos de profil manquantes pour les contacts, groupes et profils personnels.

## [0.12.11 (669)] - 2023-07-19

- Corrige un bug empêchant le copier/coller de certains liens dans la zone de composition.
- Amélioration de l'interface de la fiche contact.

## [0.12.10 (666)] - 2023-07-11

- Corrige un bug empêchant le téléchargement de pièces jointes sous iOS 17 beta 3
- Autres corrections de bug mineurs

## [0.12.9 (661)] - 2023-05-22

- Améliore le protocole concernant les nouveaux groupes afin de limiter les situations où des membres en attente de deviennent jamais membre à part entière. Bref, ça marche encore mieux qu'avant.
Expand Down Expand Up @@ -136,7 +200,7 @@
- Corrige un problème rencontré sous iOS 16 concernant les autorisations systématiques demandées au moment de faire un copier/coller.
- Corrige un bug empêchant l'affichage de certaines notifications d'appel manqué.
- Le démarrage d'Olvid est encore plus rapide qu'avant.
- Afin de ne jamais rater un appel sécurisé, vous avez maintenant la possibilité d'accorder l'accès au micro pendant l'onboarding.
- Afin de ne jamais raté un appel sécurisé, vous avez maintenant la possibilité d'accorder l'accès au micro pendant l'onboarding.

## [0.11.1 (564)] - 2022-09-22

Expand Down
68 changes: 66 additions & 2 deletions Engine/JWS/JWS/JWSUtil.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@

import Foundation
import JOSESwift
import ObvEncoder
import OlvidUtils

public struct ObvJWKSet {

public struct ObvJWKSet: ObvErrorMaker {

public static let errorDomain = "ObvJWKSet"

fileprivate let jWKSet: JWKSet

public init(data: Data) throws {
Expand All @@ -38,6 +42,37 @@ public struct ObvJWKSet {
}


/// We make `ObvJWKSet` conform to `ObvCodable` since this type is used within the engine's protocol messages.
extension ObvJWKSet: ObvFailableCodable {

public func obvEncode() throws -> ObvEncoder.ObvEncoded {
guard let obvJWKSetAsJSONData = self.jsonData() else {
assertionFailure()
throw Self.makeError(message: "Could not encode ObvJWKSet")
}
return obvJWKSetAsJSONData.obvEncode()
}


public init?(_ obvEncoded: ObvEncoded) {

guard let obvJWKSetAsJSONData = Data(obvEncoded) else {
assertionFailure()
return nil
}

do {
try self.init(data: obvJWKSetAsJSONData)
} catch {
assertionFailure(error.localizedDescription)
return nil
}

}

}


public struct ObvJWK: Equatable {

private static let errorDomain = "ObvJWK"
Expand Down Expand Up @@ -84,6 +119,35 @@ public struct ObvJWK: Equatable {
}


/// We make `ObvJWK` conform to `ObvCodable` since this type is used within the engine's protocol messages.
extension ObvJWK: ObvFailableCodable {

public func obvEncode() throws -> ObvEncoder.ObvEncoded {
let jsonData = try self.jsonEncode()
return jsonData.obvEncode()
}


public init?(_ obvEncoded: ObvEncoded) {

guard let jsonData = Data(obvEncoded) else {
assertionFailure()
return nil
}

guard let obvJWK = try? Self.jsonDecode(rawObvJWK: jsonData) else {
assertionFailure()
return nil
}

self = obvJWK

}

}



public final class JWSUtil {

private static let errorDomain = "JWSUtil"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Olvid for iOS
* Copyright © 2019-2022 Olvid SAS
* Copyright © 2019-2023 Olvid SAS
*
* This file is part of Olvid for iOS.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Olvid for iOS
* Copyright © 2019-2022 Olvid SAS
* Copyright © 2019-2023 Olvid SAS
*
* This file is part of Olvid for iOS.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,4 @@ final class ObvBackupDelegateManager {
weak var contextCreator: ObvCreateContextDelegate!
weak var notificationDelegate: ObvNotificationDelegate!



}
Original file line number Diff line number Diff line change
Expand Up @@ -269,13 +269,13 @@ extension ObvBackupManagerImplementation: ObvBackupDelegate {

let fullBackup = try FullBackup(allInternalJsonAndIdentifier: allInternalDataForBackup)

// Create and compress the full backup
// Create the full backup

let possiblyCompressedFullBackupData = try fullBackup.computeData(flowId: backupRequestIdentifier, doCompressData: ObvConstants.compressBackupedData, log: log)
let fullBackupData = try fullBackup.computeData(flowId: backupRequestIdentifier, log: log)

os_log("The compressed full backup is made of %d bytes within flow %{public}@", log: log, type: .info, possiblyCompressedFullBackupData.count, backupRequestIdentifier.description)
os_log("The full backup is made of %d bytes within flow %{public}@", log: log, type: .info, fullBackupData.count, backupRequestIdentifier.description)

return try await createPersistedBackup(forExport: forExport, backupRequestIdentifier: backupRequestIdentifier, possiblyCompressedFullBackupData: possiblyCompressedFullBackupData)
return try await createPersistedBackup(forExport: forExport, backupRequestIdentifier: backupRequestIdentifier, fullBackupData: fullBackupData)

}

Expand Down Expand Up @@ -436,7 +436,7 @@ extension ObvBackupManagerImplementation: ObvBackupDelegate {
throw BackupRestoreError.backupDataDecryptionFailed
}

os_log("The backup data was successfully decrypted for backup request identified by %{public}@. We can decompress this data.", log: log, type: .info, backupRequestIdentifier.description)
os_log("The backup data was successfully decrypted for backup request identified by %{public}@", log: log, type: .info, backupRequestIdentifier.description)

let fullBackup: FullBackup
do {
Expand Down Expand Up @@ -579,7 +579,7 @@ extension ObvBackupManagerImplementation: ObvBackupDelegate {
extension ObvBackupManagerImplementation {


private func createPersistedBackup(forExport: Bool, backupRequestIdentifier: FlowIdentifier, possiblyCompressedFullBackupData: Data) async throws -> (backupKeyUid: UID, version: Int, encryptedContent: Data) {
private func createPersistedBackup(forExport: Bool, backupRequestIdentifier: FlowIdentifier, fullBackupData: Data) async throws -> (backupKeyUid: UID, version: Int, encryptedContent: Data) {

assert(!Thread.isMainThread)

Expand All @@ -605,11 +605,11 @@ extension ObvBackupManagerImplementation {
throw Self.makeError(message: "Could not find any backup key for ongoing backup")
}

// At this point we have a compressed backup and the appropriate keys. We can encrypt the backup.
// At this point we have a backup and the appropriate keys. We can encrypt the backup.

os_log("Encrypting the compressed full backup for backupRequestIdentifier %{public}@", log: log, type: .info, backupRequestIdentifier.description)
os_log("Encrypting the full backup for backupRequestIdentifier %{public}@", log: log, type: .info, backupRequestIdentifier.description)

let encryptedBackup = PublicKeyEncryption.encrypt(possiblyCompressedFullBackupData, using: derivedKeysForBackup.publicKeyForEncryption, and: prng)
let encryptedBackup = PublicKeyEncryption.encrypt(fullBackupData, using: derivedKeysForBackup.publicKeyForEncryption, and: prng)
let macOfEncryptedBackup = try MAC.compute(forData: encryptedBackup, withKey: derivedKeysForBackup.macKey)
let authenticatedEncryptedBackup = EncryptedData(data: encryptedBackup.raw + macOfEncryptedBackup)

Expand Down Expand Up @@ -922,7 +922,7 @@ fileprivate struct FullBackup: Codable {
return result
}

func computeData(flowId: FlowIdentifier, doCompressData: Bool, log: OSLog) throws -> Data {
func computeData(flowId: FlowIdentifier, log: OSLog) throws -> Data {

// Create the full backup content

Expand All @@ -931,42 +931,10 @@ fileprivate struct FullBackup: Codable {
let jsonEncoder = JSONEncoder()
let fullBackupData = try jsonEncoder.encode(self)

if doCompressData {

// Compress the full backup content

os_log("Compressing the %d bytes full backup content within flow %{public}@", log: log, type: .info, fullBackupData.count, flowId.description)

let compressedFullBackupData = try compressFullBackupContent(fullBackupData)

return compressedFullBackupData

} else {

return fullBackupData

}

}


private func compressFullBackupContent(_ fullBackupContent: Data) throws -> Data {

// See https://developer.apple.com/documentation/accelerate/compressing_and_decompressing_data_with_buffer_compression
// We use a method working under iOS 11+. Under iOS 13+, we could use simpler APIs.

var sourceBuffer = [UInt8](fullBackupContent)
let destinationBuffer = UnsafeMutablePointer<UInt8>.allocate(capacity: fullBackupContent.count)
let algorithm = COMPRESSION_ZLIB
let compressedSize = compression_encode_buffer(destinationBuffer, fullBackupContent.count, &sourceBuffer, fullBackupContent.count, nil, algorithm)
guard compressedSize > 0 else {
throw ObvBackupManagerImplementation.makeError(message: "Compression failed")
}
let compressedFullBackupData = Data(bytes: destinationBuffer, count: compressedSize)
return compressedFullBackupData
return fullBackupData

}


private static func decompressCompressedBackupContent(_ compressedFullBackupData: Data) async throws -> Data {

Expand Down
Loading

0 comments on commit 1f94bc6

Please sign in to comment.