Verification Guide
This guide explains how to verify MotionPrint-signed animations. Verification is completely client-side - your files never leave your device.
Online Verificationโ
The easiest way to verify an animation:
- Visit thirdrez.com/motionprint/verify
- Drag and drop your GLB or BVH file
- View the verification result
What You'll Seeโ
If verified successfully:
- Green checkmark
- Creator information
- License type
- Registration timestamp
- Certificate link
If verification fails:
- Red warning
- Reason for failure (no watermark, invalid signature, etc.)
Understanding Resultsโ
Verification Report Fieldsโ
| Field | Description |
|---|---|
ok | Boolean - true if signature is valid |
creatorId | Creator identifier or alias |
licenseId | License type (restricted, commercial, etc.) |
issuedAt | ISO 8601 timestamp of registration |
method | Embedding method (extras-v1, bvh-header-v1) |
nonce | Unique 128-bit value for this registration |
wmHash | SHA-256 fingerprint of canonical payload |
signature | Ed25519 signature (hex encoded) |
Sample Reportโ
{
"ok": true,
"wmHash": "2ea3f0e7cacc2ee03bf5d62c789c...",
"fileMeta": {
"name": "dance_animation.glb",
"size": 1186292,
"type": "glb"
},
"watermark": {
"creatorId": "green",
"licenseId": "restricted",
"issuedAt": "2025-11-25T22:52:51.331Z",
"method": "extras-v1",
"nonce": "f707614d6a07ff66d51933d6eeb3e0b0"
},
"signature": "0xeb1f72a31d84eea35c2aa249..."
}
Certificate of Authenticityโ
Each registered animation receives a PDF Certificate of Authenticity containing:
- Asset name and file metadata
- Creator alias and license type
- Verification timestamp
- Unique registry ID
- QR Code linking to online verification
- SHA-256 fingerprint
Accessing Certificatesโ
Certificates are available:
- At time of registration (download link)
- Via the certificate URL embedded in QR code
- Through your dashboard at app.thirdrez.com/motionprint
Programmatic Verificationโ
JavaScript/TypeScriptโ
import { verifyGLB, verifyBVH } from '@thirdrez/motionprint';
// Verify GLB file
const result = await verifyGLB(
arrayBuffer,
'animation.glb',
PUBLIC_KEY_HEX
);
if (result.ok) {
console.log('Verified!', result.watermark);
} else {
console.log('Verification failed:', result.reason);
}
Canonical Payloadโ
The signed message is a canonicalized JSON string:
function canonicalPayload(p: Payload): string {
const ordered = {
creatorId: p.creatorId,
licenseId: p.licenseId,
issuedAt: p.issuedAt,
method: p.method,
nonce: p.nonce,
}
return JSON.stringify(ordered) + '\n'
}
Field order matters: creatorId โ licenseId โ issuedAt โ method โ nonce
The trailing newline is required.
Security Considerationsโ
Threat Modelโ
| Threat | Description | Mitigation |
|---|---|---|
| Removal | Attacker strips payload | Presence check, chain-of-custody |
| Forgery | Attacker creates fake signature | Ed25519 (EUF-CMA secure) |
| Transplant | Attacker copies watermark to different file | Content hash binding |
| Spoofing | Attacker manipulates verification UI | Open source verification code |
Limitationsโ
- Format Conversion - Converting GLB to OBJ strips all metadata
- Key Compromise - Private key exposure invalidates signatures
- Creator Collusion - A creator may sign unauthorized copies
FAQโ
Does verification upload my file?โ
No. All verification happens in your browser using WebAssembly. The file never leaves your device. You can verify this by:
- Opening browser DevTools โ Network tab
- Performing verification
- Observing no file uploads
Can I verify offline?โ
Yes, after the initial page load, verification works without network connectivity. The verification code and public key are cached locally.
What if verification fails?โ
Possible reasons:
- File has no MotionPrint watermark
- Watermark was corrupted or modified
- File was converted to a format that strips metadata
- Signature doesn't match (tampered file)
Is MotionPrint like DRM?โ
No. MotionPrint doesn't restrict access or usage. It provides proof, not permission. Anyone can use the file; MotionPrint simply allows verification of origin.
Verify your animations: thirdrez.com/motionprint/verify