sign method
Signs the TAI data with the entity's private key.
Encodes all properties to a data string, signs it with the private key, and stores the signature for later verification.
sKey is the private key matching the entity's Meta public key.
Returns the signature as Uint8List if successful, null on error.
Implementation
@override
Uint8List? sign(SignKey privateKey) {
Uint8List? signature;
// if (_status > 0) {
// // already signed/verified
// assert(_json != null, 'document data error: $this');
// signature = _getSignature();
// assert(signature != null, 'document signature error: $this');
// return signature;
// }
// 1. update sign time
setProperty('time', DateTime.now().millisecondsSinceEpoch / 1000.0);
// 2. encode & sign
Map? dict = properties;
if (dict == null) {
assert(false, 'document invalid: ${toMap()}');
return null;
}
String data = JSONMap.encode(dict);
assert(data.isNotEmpty, 'should not happen: $dict');
signature = privateKey.sign(UTF8.encode(data));
assert(signature.isNotEmpty, 'should not happen: $dict');
TransportableData ted = Base64Data.createWithBytes(signature);
// 3. update 'data' & 'signature' fields
this['data'] = data; // JSON string
this['signature'] = ted.serialize(); // BASE-64
_json = data;
_sig = ted;
// 4. update status
_status = 1;
return signature;
}