updateTipPin method
Implementation
Future<Account> updateTipPin({
required String legacyPin,
required String pinTokenBase64,
required String sessionKeyBase64,
required String tipPublicKeyHex,
}) async {
final iterator = DateTime.now().millisecondsSinceEpoch * 1000000;
var encryptedLegacyPin = '';
if (legacyPin.isNotEmpty) {
encryptedLegacyPin = encryptPin(
legacyPin,
pinTokenBase64,
sessionKeyBase64,
iterator,
);
}
final tipPublicKey = hex.decode(tipPublicKeyHex);
if (tipPublicKey.length != 32) {
throw ArgumentError(
'Invalid tip public key size: ${tipPublicKey.length}');
}
const pinSuffix = [0, 0, 0, 0, 0, 0, 0, 1];
final newEncryptedPin = encryptBytesPin(
pinTokenBase64: pinTokenBase64,
privateKeyBase64: sessionKeyBase64,
target: Uint8List.fromList(tipPublicKey + pinSuffix),
iterator: iterator + 1,
);
final data = await updatePin(PinRequest(
pin: newEncryptedPin,
oldPin: encryptedLegacyPin,
));
return data.data;
}