diff --git a/.gitignore b/.gitignore index 4d9b87d1..40dcabc2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ *.class *.log *.pyc -*.swp +*.sw* .DS_Store .atom/ .buildlog/ diff --git a/lib/src/model/matrix_keys.dart b/lib/src/model/matrix_keys.dart index 432dccfc..ca25a197 100644 --- a/lib/src/model/matrix_keys.dart +++ b/lib/src/model/matrix_keys.dart @@ -42,8 +42,25 @@ abstract class MatrixSignableKey { userId = json['user_id'] as String, keys = Map.from(json['keys'] as Map), // we need to manually copy to ensure that our map is Map> - signatures = json.tryGetMap>('signatures'), - unsigned = json.tryGetMap('unsigned'); + signatures = (() { + final orig = json.tryGetMap('signatures'); + final res = >{}; + for (final entry + in (orig?.entries ?? >[])) { + final deviceSigs = entry.value; + if (deviceSigs is Map) { + for (final nestedEntry in deviceSigs.entries) { + final nestedValue = nestedEntry.value; + if (nestedValue is String) { + (res[entry.key] ??= {})[nestedEntry.key] = + nestedValue; + } + } + } + } + return res; + }()), + unsigned = json.tryGetMap('unsigned')?.copy(); Map toJson() { final data = _json ?? {}; diff --git a/test/matrix_api_test.dart b/test/matrix_api_test.dart index 98331e3c..57454e72 100644 --- a/test/matrix_api_test.dart +++ b/test/matrix_api_test.dart @@ -1197,7 +1197,7 @@ void main() { 'ed25519:82mAXjsmbTbrE6zyShpR869jnrANO75H8nYY0nDLoJ8': '82mAXjsmbTbrE6zyShpR869jnrANO75H8nYY0nDLoJ8', }, - 'signatures': {}, + 'signatures': >{}, }); final selfSigningKey = MatrixCrossSigningKey.fromJson({ 'user_id': '@test:fakeServer.notExisting', @@ -1206,7 +1206,7 @@ void main() { 'ed25519:F9ypFzgbISXCzxQhhSnXMkc1vq12Luna3Nw5rqViOJY': 'F9ypFzgbISXCzxQhhSnXMkc1vq12Luna3Nw5rqViOJY', }, - 'signatures': {}, + 'signatures': >{}, }); final userSigningKey = MatrixCrossSigningKey.fromJson({ 'user_id': '@test:fakeServer.notExisting', @@ -1215,7 +1215,7 @@ void main() { 'ed25519:0PiwulzJ/RU86LlzSSZ8St80HUMN3dqjKa/orIJoA0g': '0PiwulzJ/RU86LlzSSZ8St80HUMN3dqjKa/orIJoA0g', }, - 'signatures': {}, + 'signatures': >{}, }); await matrixApi.uploadCrossSigningKeys( masterKey: masterKey, @@ -1638,7 +1638,7 @@ void main() { final algorithm = BackupAlgorithm.mMegolmBackupV1Curve25519AesSha2; final authData = { 'public_key': 'GXYaxqhNhUK28zUdxOmEsFRguz+PzBsDlTLlF0O0RkM', - 'signatures': {}, + 'signatures': >{}, }; final ret = await matrixApi.postRoomKeysVersion(algorithm, authData); expect( @@ -1663,7 +1663,7 @@ void main() { final algorithm = BackupAlgorithm.mMegolmBackupV1Curve25519AesSha2; final authData = { 'public_key': 'GXYaxqhNhUK28zUdxOmEsFRguz+PzBsDlTLlF0O0RkM', - 'signatures': {}, + 'signatures': >{}, }; await matrixApi.putRoomKeysVersion('5', algorithm, authData); });