mirror of
https://github.com/seemoo-lab/openhaystack.git
synced 2026-08-19 11:36:36 +00:00
85 lines
2.2 KiB
Dart
85 lines
2.2 KiB
Dart
import 'dart:convert';
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:pointycastle/ecc/api.dart';
|
|
import 'package:pointycastle/src/utils.dart' as pc_utils;
|
|
import 'package:openhaystack_mobile/findMy/find_my_controller.dart';
|
|
|
|
/// Represents a decrypted FindMyReport.
|
|
class FindMyLocationReport {
|
|
double latitude;
|
|
double longitude;
|
|
int accuracy;
|
|
DateTime published;
|
|
DateTime? timestamp;
|
|
int? confidence;
|
|
|
|
FindMyLocationReport(this.latitude, this.longitude, this.accuracy,
|
|
this.published, this.timestamp, this.confidence);
|
|
|
|
Location get location => Location(latitude, longitude);
|
|
}
|
|
|
|
class Location {
|
|
double latitude;
|
|
double longitude;
|
|
|
|
Location(this.latitude, this.longitude);
|
|
}
|
|
|
|
/// FindMy report returned by the FindMy Network
|
|
class FindMyReport {
|
|
DateTime datePublished;
|
|
Uint8List payload;
|
|
String id;
|
|
int statusCode;
|
|
|
|
int? confidence;
|
|
DateTime? timestamp;
|
|
|
|
FindMyReport(this.datePublished, this.payload, this.id, this.statusCode);
|
|
|
|
FindMyReport.completeInit(this.datePublished, this.payload, this.id, this.statusCode,
|
|
this.confidence, this.timestamp);
|
|
|
|
}
|
|
|
|
class FindMyKeyPair {
|
|
final ECPublicKey _publicKey;
|
|
final ECPrivateKey _privateKey;
|
|
final String hashedPublicKey;
|
|
String? privateKeyBase64;
|
|
|
|
/// Time when this key was used to send BLE advertisements
|
|
DateTime startTime;
|
|
/// Duration from start time how long the key was used to send BLE advertisements
|
|
double duration;
|
|
|
|
FindMyKeyPair(this._publicKey, this.hashedPublicKey, this._privateKey, this.startTime,
|
|
this.duration);
|
|
|
|
String getBase64PublicKey() {
|
|
return base64Encode(_publicKey.Q!.getEncoded(false));
|
|
}
|
|
|
|
String getBase64PrivateKey() {
|
|
return base64Encode(pc_utils.encodeBigIntAsUnsigned(_privateKey.d!));
|
|
}
|
|
|
|
String getBase64AdvertisementKey() {
|
|
return base64Encode(_getAdvertisementKey());
|
|
}
|
|
|
|
Uint8List _getAdvertisementKey() {
|
|
var pkBytes = _publicKey.Q!.getEncoded(true);
|
|
//Drop first byte to get the 28byte version
|
|
var key = pkBytes.sublist(1, pkBytes.length);
|
|
return key;
|
|
}
|
|
|
|
String getHashedAdvertisementKey() {
|
|
var key = _getAdvertisementKey();
|
|
return FindMyController.getHashedPublicKey(publicKeyBytes: key);
|
|
}
|
|
}
|