⚠️
v0.0.1 BETA — Not yet released. This documentation describes the planned SDK API. Methods, return values, and behavior may change before the official release. Do not use in production.

SigChain Guard SDK

Hardware-level anti-cheat and app integrity verification for Unity VR games. The SDK handles everything automatically — you make one call, the bridge does the rest.

How It Works

The Java bridge fires before Unity finishes loading. It collects hardware attestation data, encrypts and signs the payload, and sends it to the SCG backend. Your game receives a simple pass or fail result. No security logic runs client-side — the server decides everything.

System requirements

Unity Version
2021.3 LTS or higher
2022.3 LTS recommended
Android API Level
API 29+ (Android 10)
Required for hardware TEE access
Platform
Android VR
Meta Quest, Pico, Android VR headsets
Account
Active SCG subscription
dashboard.sigchainguard.com

Installing the package

The SCG Unity package is available from your dashboard after completing app verification.

Before You Install

You must complete BTKV verification in the dashboard before the SDK will function. An unverified API key will cause all validation calls to return CHECK_DASHBOARD.

Step 01
Download the .unitypackage
Go to your SCG dashboard → Downloads. Download the latest .unitypackage file for your Unity version.
Step 02
Import into Unity
Assets → Import Package → Custom Package → select the downloaded file → Import All.
Step 03
Open SCG Setup Window
Window → SigChain Guard → Setup. Paste your API key into the API Key field. If you have a BTKV key, paste it into the BTKV field and build once to verify ownership.
Step 04
Call SCG.Validate()
Add the validation call to your game's start logic. The bridge handles everything else automatically.

First integration

GameManager.cs C#
1using SigChainGuard;
2using UnityEngine;
3
4public class GameManager : MonoBehaviour
5{
6  async void Start()
7  {
8    SCGResult result = await SCG.Validate();
9
10    switch (result)
11    {
12      case SCGResult.PASSED:
13        // your success logic here
14        break;
15      case SCGResult.FAILED:
16        // your fail logic here — kick, show error, etc
17        break;
18      case SCGResult.NO_CONNECTION:
19        // your offline logic here
20        break;
21      default:
22        // handle other results — see SCGResult reference below
23        break;
24    }
25  }
26}

SDK Methods

All public methods available on the SCG static class. Click any method to expand full documentation.

SCG.Validate()
async
The primary validation call. Fires the Java bridge, collects hardware attestation and device signals, encrypts and signs the payload, and sends it to the SCG backend for server-side verification. Returns a SCGResult enum value. Can only be called once per session — subsequent calls return the cached result.
Returns
Task<SCGResult>
ExampleC#
1SCGResult result = await SCG.Validate();
2if (result == SCGResult.PASSED)
3{
4  // your success logic here
5}
SCG.ValidatePS()
async
Checks Photon server availability and confirms your configured Photon endpoint is reachable. Call this before attempting to connect a player to a multiplayer session. Returns NO_CONNECTION_NOPS if Photon is unreachable or not configured in your dashboard.
Returns
Task<SCGResult>
ExampleC#
1SCGResult ps = await SCG.ValidatePS();
2if (ps == SCGResult.PHOTON_ONLINE)
3{
4  // your matchmaking logic here
5}
6else
7{
8  // your offline/fallback logic here
9}
SCG.ReValidate()
async
Triggers a manual mid-session re-validation for the current player. Runs the full validation pipeline identically to Validate(). Rate limited to once every 5 minutes per player — additional calls within the window return RATE_LIMITED. Use this if your game detects suspicious behavior and you want an immediate check.
Returns
Task<SCGResult>
Rate Limit

Maximum once per 5 minutes per player. Enforced both in the bridge and on the backend — editing client code cannot bypass the backend limit.

ExampleC#
1// Call when suspicious activity detected
2SCGResult check = await SCG.ReValidate();
3if (check == SCGResult.FAILED)
4{
5  // your logic for a failed re-validation here
6}
SCG.HWIDPlayer()
async
Sends the current player's HWID to the SCG backend and registers them in your player tracking database. Only active if HWID Tracking is enabled in your dashboard. Call after a successful Validate() to begin tracking the player. Returns the player's HWID string on success.
Returns
Task<string>
Dashboard Required

HWID Tracking must be enabled in your dashboard for this method to function. Calling it with tracking disabled returns an empty string.

ExampleC#
1string hwid = await SCG.HWIDPlayer();
2if (!string.IsNullOrEmpty(hwid))
3{
4  // store or display hwid as needed
5  Debug.Log("Player HWID: " + hwid);
6}
SCG.ReturnHwid()
sync
Returns the current device's HWID as a string without sending it to the backend. Use this to display a player's hardware ID in-game, store it in your own database, or pass it to your own server. The HWID is derived from factory-burned hardware values and is stable across reinstalls and factory resets.
Returns
string
ExampleC#
1// Get HWID without sending to backend
2string hwid = SCG.ReturnHwid();
3// use hwid however you need

SCGResult codes

Every possible value returned by SCG methods. Use the search above to look up a specific code.

SCGResult.PASSED
Pass
All security checks passed. Device has verified boot, locked bootloader, matching certificate fingerprint, and a clean runtime environment. Safe to proceed.
SCGResult.FAILED
Fail
One or more security checks failed based on your dashboard configuration and flag limits. Check your dashboard for details on which checks triggered the failure.
SCGResult.NO_CONNECTION
Warn
Device has no internet connection. This is not a security failure — your game decides how to handle offline sessions. Re-validation will be attempted automatically when connection is restored.
Fix: Allow offline play or show a connection required message.
SCGResult.NO_CONNECTION_NOPS
Warn
Returned by ValidatePS() when your Photon endpoint is unreachable or not configured in your dashboard.
Fix: Check your Photon endpoint URL in the dashboard or verify Photon server status.
SCGResult.SDK_OUTDATED
Fail
The integrated SDK version is below the minimum version set in your admin panel. All validation calls will fail until the developer updates to a supported version.
Fix: Download and integrate the latest SDK version from your dashboard.
SCGResult.BRIDGE_TAMPERED
Fail
The SCG Java bridge has been modified from its original compiled state. The bridge hash sent to the backend does not match the known good hash. This is a serious integrity violation.
SCGResult.HOOK_DETECTED
Fail
A known hook framework or suspicious injected library was detected in the device's runtime environment. This includes Frida, Xposed, and similar tools.
SCGResult.RATE_LIMITED
Warn
ReValidate() was called within the 5-minute rate limit window. The backend enforces this limit independently of client code.
Fix: Wait at least 5 minutes between ReValidate() calls per player.
SCGResult.QUOTA_EXCEEDED
Warn
Your account has reached the MAU limit for the current billing period. New validations are paused. You receive two automatic 10% overages before calls stop entirely.
Fix: Upgrade your plan in the dashboard or wait for the next billing period.
SCGResult.AUTH_PAUSED
Warn
The game owner has manually paused authentication via the dashboard emergency pause feature. All validation calls return this result until auth is resumed.
Fix: Resume authentication in your dashboard.
SCGResult.BACKEND_TIMEOUT
Warn
The SCG backend did not respond within the 30-second grace period. This may indicate a temporary outage. Check sigchainguard.com/status for live API status.
Fix: Retry validation. If persistent, check dashboard for outage information.
SCGResult.CHECK_DASHBOARD
Fail
Your subscription payment has failed or your API key has been deactivated. All validation calls return this result until billing is resolved.
Fix: Update your payment method in the dashboard.
SCGResult.COLLECTION_ERROR
Warn
The Java bridge was unable to collect one or more required device fields. This should not occur on supported devices. A Unity console warning specifies which field failed.
Fix: Ensure your target device meets the minimum Android API 29 requirement.
SCGResult.REPLAY_DETECTED
Fail
The validation payload nonce has already been used. Each nonce is burned after a single use. This result indicates an attempted replay attack — the player's HWID is automatically flagged.
SCGResult.BASELINE_MISMATCH
Fail
The current APK's certificate fingerprint or package name does not match the baseline registered during the first three validation sessions. This indicates the APK has been re-signed or modified.
Fix: If you legitimately changed your signing key, re-verify your app in the dashboard.
SCGResult.PHOTON_ONLINE
Pass
Returned by ValidatePS() when your configured Photon endpoint is reachable and responding correctly. Safe to proceed with matchmaking.

Search any error

Use the search bar at the top of the page to look up any SCGResult code, error message, or integration issue instantly.

Tip

You can search by result code name, severity level, or keywords from the error description. Try searching "fail", "connection", "tampered", or any specific code like "QUOTA_EXCEEDED".

Release history

v0.0.1
Beta
Not yet released
Initial beta release of SigChain Guard SDK.

Includes SCG.Validate(), SCG.ValidatePS(), SCG.ReValidate(), SCG.HWIDPlayer(), ReturnHwid().
Full SCGResult code set. Hardware TEE attestation. AES-256-GCM encrypted payloads. RSA-PSS signed validation. Cross-game HWID banning. Photon endpoint integration. Unity 2021.3+ support. Android API 29+ support.