register method
Generates (or loads, via loadApkamKeys) this APKAM keypair's X-Wing enc keypair and publishes its APKAM signing key (so peers can verify its envelopes), then returns this client's KeyPackage. Idempotent.
The returned key package is conveyed into the enrollment record by riding
enroll:request as opaque EnrollParams.metadata at enrollment time — it
is never written by a post-enrollment directory call. Peers then discover
it via the gated enroll:listns verb.
Implementation
Future<KeyPackage> register() async {
if (_xWingSeed == null) {
final loaded = await loadApkamKeys?.call();
if (loaded != null) {
_xWingSeed = base64Decode(loaded.xWingSeed);
// the public key derives deterministically from the seed
final kp = await XWingPureDartAlgo.instance.generateKeyPair(_xWingSeed);
_xWingPublicKey = kp.publicKey;
} else {
final kp = await XWingPureDartAlgo.instance.generateKeyPair();
_xWingSeed = kp.secretKey;
_xWingPublicKey = kp.publicKey;
await saveApkamKeys
?.call(PersistedApkamKeys(xWingSeed: base64Encode(_xWingSeed!)));
}
}
await publishPublicSigningKey();
_registered = true;
logger.info('Prepared key package for enrollment $enrollmentId '
'(kpid $kpid)');
return myKeyPackage;
}