Marino Faggiana 1 year ago
parent
commit
65dcd168bf

+ 19 - 0
iOSClient/Networking/E2EE/NCEndToEndMetadata.swift

@@ -133,6 +133,25 @@ class NCEndToEndMetadata: NSObject {
         let version: String
     }
 
+    struct E2eeV20Signature: Codable {
+
+        struct Metadata: Codable {
+            let ciphertext: String
+            let nonce: String
+            let authenticationTag: String
+        }
+
+        struct Users: Codable {
+            let userId: String
+            let certificate: String
+            let encryptedMetadataKey: String?
+        }
+
+        let metadata: Metadata
+        let users: [Users]?
+        let version: String
+    }
+
     // --------------------------------------------------------------------------------------------
     // MARK: Encode JSON Metadata Bridge
     // --------------------------------------------------------------------------------------------

+ 32 - 0
iOSClient/Networking/E2EE/NCEndToEndMetadataV20.swift

@@ -208,6 +208,38 @@ extension NCEndToEndMetadata {
             let filedrop = json.filedrop
             let version = json.version as String? ?? "2.0"
 
+            // signature
+
+            var usersSignatureCodable: [E2eeV20Signature.Users] = []
+            var metadataSignatureCodable: E2eeV20Signature.Metadata = E2eeV20Signature.Metadata(ciphertext: metadata.ciphertext, nonce: metadata.nonce, authenticationTag: metadata.authenticationTag)
+            if let users {
+                for user in users {
+                    usersSignatureCodable.append(E2eeV20Signature.Users(userId: user.userId, certificate: user.certificate, encryptedMetadataKey: user.encryptedMetadataKey))
+                }
+            }
+            let signatureCodable = E2eeV20Signature(metadata: metadataSignatureCodable, users: usersSignatureCodable, version: version)
+
+            do {
+                let jsonEncoder = JSONEncoder()
+                let json = try jsonEncoder.encode(signatureCodable)
+                let dataSerialization = try JSONSerialization.jsonObject(with: json, options: [])
+                let decoded = try? JSONSerialization.data(withJSONObject: dataSerialization, options: [.sortedKeys, .withoutEscapingSlashes])
+                if let jsonString = String(data: decoded!, encoding: .utf8) {
+                    print(jsonString)
+                }
+                let base64 = decoded!.base64EncodedString()
+                print(base64)
+                if  let base64Data = base64.data(using: .utf8),
+                    let signatureData = NCEndToEndEncryption.sharedManager().generateSignatureCMS(base64Data, certificate: CCUtility.getEndToEndCertificate(account), privateKey: CCUtility.getEndToEndPrivateKey(account), publicKey: CCUtility.getEndToEndPublicKey(account), userId: userId) {
+                    let signatureX = signatureData.base64EncodedString()
+                    print(signatureX)
+                }
+                //print(String(data: data, encoding: .utf8))
+                //let base64 = data.base64EncodedString()
+            } catch {
+                print("Error: \(error.localizedDescription)")
+            }
+
             // SIGNATURE CHECK
 
             let jsonString = String(data: data, encoding: .utf8)