Line data Source code
1 : /* MIT License
2 : *
3 : * Copyright (C) 2019, 2020, 2021 Famedly GmbH
4 : *
5 : * Permission is hereby granted, free of charge, to any person obtaining a copy
6 : * of this software and associated documentation files (the "Software"), to deal
7 : * in the Software without restriction, including without limitation the rights
8 : * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 : * copies of the Software, and to permit persons to whom the Software is
10 : * furnished to do so, subject to the following conditions:
11 : *
12 : * The above copyright notice and this permission notice shall be included in all
13 : * copies or substantial portions of the Software.
14 : *
15 : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 : * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 : * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 : * SOFTWARE.
22 : */
23 :
24 : import 'package:matrix/matrix_api_lite/model/basic_event.dart';
25 : import 'package:matrix/matrix_api_lite/utils/try_get_map_extension.dart';
26 :
27 : extension SecretStorageKeyContentBasicEventExtension on BasicEvent {
28 7 : SecretStorageKeyContent get parsedSecretStorageKeyContent =>
29 14 : SecretStorageKeyContent.fromJson(content);
30 : }
31 :
32 : class SecretStorageKeyContent {
33 : PassphraseInfo? passphrase;
34 : String? iv;
35 : String? mac;
36 : String? algorithm;
37 :
38 2 : SecretStorageKeyContent();
39 :
40 7 : SecretStorageKeyContent.fromJson(Map<String, Object?> json)
41 7 : : passphrase = ((Map<String, Object?>? x) => x != null
42 7 : ? PassphraseInfo.fromJson(x)
43 14 : : null)(json.tryGet('passphrase')),
44 7 : iv = json.tryGet('iv'),
45 7 : mac = json.tryGet('mac'),
46 7 : algorithm = json.tryGet('algorithm');
47 :
48 2 : Map<String, Object?> toJson() {
49 2 : final data = <String, Object?>{};
50 8 : if (passphrase != null) data['passphrase'] = passphrase!.toJson();
51 6 : if (iv != null) data['iv'] = iv;
52 6 : if (mac != null) data['mac'] = mac;
53 6 : if (algorithm != null) data['algorithm'] = algorithm;
54 : return data;
55 : }
56 : }
57 :
58 : class PassphraseInfo {
59 : //TODO: algorithm, salt, iterations are required by spec,
60 : //TODO: we should require it here and make sure to catch it everywhere
61 : String? algorithm;
62 : String? salt;
63 : int? iterations;
64 : int? bits;
65 :
66 2 : PassphraseInfo(
67 : {required this.algorithm,
68 : required this.salt,
69 : required this.iterations,
70 : this.bits});
71 :
72 7 : PassphraseInfo.fromJson(Map<String, Object?> json)
73 7 : : algorithm = json.tryGet('algorithm', TryGet.required),
74 7 : salt = json.tryGet('salt', TryGet.required),
75 7 : iterations = json.tryGet('iterations', TryGet.required),
76 7 : bits = json.tryGet('bits');
77 :
78 2 : Map<String, Object?> toJson() {
79 2 : final data = <String, Object?>{};
80 4 : data['algorithm'] = algorithm;
81 4 : data['salt'] = salt;
82 4 : data['iterations'] = iterations;
83 6 : if (bits != null) data['bits'] = bits;
84 : return data;
85 : }
86 : }
|