mgth/LittleBigMouse · error · System.Security.Authentication.AuthenticationException
The C1 requires the VIDAA client certificate. Extract the…
Error message
The C1 requires the VIDAA client certificate. Extract the .p12 from the official Android APK and copy it to {DefaultPath}. What it means
PreparePairingAsync resolves the Hisense VIDAA client certificate path via VidaaCertificate.Resolve and throws VidaaCertificate.MissingException() when the resolved path is null/whitespace. The VIDAA protocol (a C1-protected MQTT/TLS service) requires a client certificate that is not distributable with the app, so it must be extracted from the official Android APK and placed at the default path.
Solutions
- Extract the .p12 certificate from the official Hisense remote Android APK and copy it to the DefaultPath reported in the exception message.
- Set ClientCertificatePath in HisenseVidaaConfiguration to the full path of the extracted .p12 file.
- Verify the file exists and is readable at the configured path before pairing (File.Exists).
- If the password prompt follows, leave ClientCertificatePassword unset so the DefaultPassword is applied, or set it to the APK's known password.
Example fix
// before
c.ClientCertificatePath = null; // never extracted
// after
c.ClientCertificatePath = "/home/user/.littlebigmouse/vidaa/client.p12"; // extracted from official APK
if (!File.Exists(c.ClientCertificatePath)) throw new InvalidOperationException("Extract the .p12 from the Hisense APK first."); Defensive patterns
Strategy: validation
Validate before calling
// before PreparePairingAsync
var resolved = VidaaCertificate.Resolve(c.ClientCertificatePath);
if (string.IsNullOrWhiteSpace(resolved) || !File.Exists(resolved))
throw new InvalidOperationException(
$"VIDAA client certificate missing. Extract the .p12 from the official Android APK and copy it to {VidaaCertificate.DefaultPath}."); Try / catch
try { await service.RequestPinAsync(config, ct); }
catch (Exception e) when (e.Message.Contains("VIDAA client certificate")) {
ui.ShowSetupStep("Extract the .p12 from the Hisense remote APK and place it at " + VidaaCertificate.DefaultPath);
} Prevention
- Run the APK-extraction step as part of installation/setup, not at first pairing attempt.
- Check File.Exists on the resolved cert path at app startup when VIDAA support is enabled.
- Keep the cert out of the repo but document DefaultPath in setup docs.
When it happens
Trigger: Calling PreparePairingAsync (directly or through RequestPinAsync/PairAsync) when the configuration's ClientCertificatePath is unset and VidaaCertificate.Resolve cannot find the .p12 at the DefaultPath on disk.
Common situations: Fresh installation where the certificate was never extracted; user moved or deleted the .p12; configuration points at a stale path after reinstall; running in CI/container where the APK extraction step was skipped.
Understand the failure class
- SSL/TLS and certificate errors — how TLS handshakes and certificate validation fail.
Related errors
- The C1 requires the VIDAA client certificate. Extract the…
- Enter a platform action name containing only letters…
- Enter a test level between 0 and 10.
- Enter the four-digit PIN displayed by the Hisense device.
- Enter the projector Wi-Fi MAC address first.
AI-assisted analysis of mgth/LittleBigMouse@7a42f01d47 (2026-09-16).
Data as JSON: /api/errors/febac1e125a7f992.
Report an issue: GitHub.
Appendix: source
Thrown at LittleBigMouse.Plugins/LittleBigMouse.Plugin.Vcp.Avalonia/HisenseVidaa/HisenseVidaaService.cs:158
// The projector can generate a PIN from its own Remote Control
// settings. Connect without asking it to replace that PIN.
await replacement.StartPairingAsync(ct, requestPin: false).ConfigureAwait(false);
}
catch
{
await replacement.DisposeAsync();
throw;
}
await ReplaceClientAsync(id, replacement).ConfigureAwait(false);
client = replacement;
}
await client.AuthenticateAsync(pin, ct); _store.Save(client.Configuration);
}
async Task PreparePairingAsync(HisenseVidaaConfiguration c, CancellationToken ct)
{
c.ClientCertificatePath = VidaaCertificate.Resolve(c.ClientCertificatePath);
if (string.IsNullOrWhiteSpace(c.ClientCertificatePath)) throw VidaaCertificate.MissingException();
if (string.IsNullOrWhiteSpace(c.ClientCertificatePassword))
c.ClientCertificatePassword = VidaaCertificate.DefaultPassword;
c.ControllerMacAddress = NetworkIdentity.ControllerMacFor(c.IpAddress);
try
{
var device = await _discovery.FindAsync(c.IpAddress, ct).ConfigureAwait(false);
c.IpAddress = device.IpAddress;
c.ProtocolVersion = device.ProtocolVersion;
c.Brand = device.Brand;
}
catch (HttpRequestException) when (c.ProtocolVersion is null
&& c.MonitorId.StartsWith("HEC002F", StringComparison.OrdinalIgnoreCase))
{
// Hisense C1 EDID. Its descriptor advertises RemoteNOW protocol 2160,
// but the UPnP HTTP endpoint can disappear while MQTT remains usable.
c.ProtocolVersion = 2160;
c.Brand = "his";
}View on GitHub (pinned to 7a42f01d47)