Core concepts
Provenance & signing
Sign a file with your Solana wallet to cryptographically attest you are its source. The statement binds the name, size, and SHA-256, so any tampering invalidates the proof — and anyone can re-verify it.
What signing proves
Provenance signing lets the uploader attest, cryptographically, that a specific wallet vouches for a specific file. The wallet signs a deterministic statementthat embeds the file's name, byte size, and SHA-256 digest. Because the digest is part of the signed bytes, the signature is only valid for those exact contents — change a single byte and verification fails.
- Proves which wallet claims authorship of the file.
- Proves the file has not been altered since it was signed.
- Is re-verifiable by anyone, forever, with no trust in udrive.
The provenance statement
The statement is canonical and reconstructable from the stored file fields, which is what makes later re-verification possible.
udrive file provenance
name: dataset.csv
sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
size: 20480
signer: 7xKEh…Pu8Z
signed_at: 2026-06-25T18:04:11.000ZNote
signed_at timestamp is inside the signed bytes, so the attestation carries its own tamper-evident time anchor.Signing a file
Sign during upload — toggle “Sign with wallet” on the upload screen, or do it programmatically and pass the proof to /api/upload/complete.
- Compute the file's SHA-256 digest.
- Build the provenance statement from name, digest, size, signer, and timestamp.
- Sign the statement bytes with the wallet.
- Submit
signed,signerPubkey,signature, andsignedStatementon complete.
import bs58 from "bs58";
const statement = [
"udrive file provenance",
`name: ${name}`,
`sha256: ${sha256}`,
`size: ${size}`,
`signer: ${pubkey}`,
`signed_at: ${new Date().toISOString()}`,
].join("\n");
const { signature } = await wallet.signMessage(
new TextEncoder().encode(statement),
);
await fetch("/api/upload/complete", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
fileId,
sha256,
signed: true,
signerPubkey: pubkey,
signature: bs58.encode(signature),
signedStatement: statement,
}),
});Warning
Verifying a file
Anyone can re-verify a signed file. The endpoint re-checks the ed25519 signature over the stored statement andconfirms the statement's claimed name, size, and digest still match the file.
curl https://udrive.one/api/verify/a1B2c3D4e5F6{
"signed": true,
"verified": true,
"signerPubkey": "7xKEh…Pu8Z",
"statement": "udrive file provenance\nname: dataset.csv\n…"
}The public file view at /f/<shortId> renders this as a provenance badge — signed by the wallet, with a verified checkmark.
What it does not prove
- It proves the signer vouches for the bytes — not that the signer is the original author of the underlying content.
- It is an off-chain attestation: no transaction is created and nothing is written to the Solana ledger.
- Trust in the wallet's real-world identity is up to the verifier; udrive only proves the key signed.
