> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jurat.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Signing

> Understand the wallet signatures required by Jurat recovery and probate endpoints.

Jurat uses wallet signatures to prove user intent.

## Current Signing Model

The current implementation uses EIP-712 typed data for recovery case creation, court metadata, and privacy-code creation. Terms acceptance and will upload still use signed messages.

Until the SDK is published, reproduce these typed-data and message shapes exactly.

## Recovery Case Creation

Signer:

```txt theme={null}
recoveryAccount
```

Domain:

```ts theme={null}
{
  name: "Jurat Signature Domain Name",
  version: "1.0.0",
  chainId,
  verifyingContract: lostAccount,
}
```

Typed data:

```ts theme={null}
{
  tx: [
    { name: "dest", type: "address" },
    { name: "value", type: "uint256" },
    { name: "data", type: "bytes" },
  ],
  caseData: [
    { name: "lostAccount", type: "address" },
    { name: "recoveryAccount", type: "address" },
    { name: "chainId", type: "uint256" },
    { name: "reason", type: "string" },
    { name: "email", type: "string" },
    { name: "txs", type: "tx[]" },
  ],
}
```

Planned SDK helper:

```ts theme={null}
signRecoveryIntent(signer, intent)
```

## Court Metadata

Signer:

```txt theme={null}
recoveryAccount
```

Domain:

```ts theme={null}
{
  name: "Jurat Signature Domain Name",
  version: "1.0.0",
  chainId,
  verifyingContract: lostAccount,
}
```

Typed data:

```ts theme={null}
{
  data: [
    { name: "title", type: "string" },
    { name: "fullCaseNumber", type: "string" },
    { name: "courtId", type: "string" },
    { name: "docketNumber", type: "uint256" },
  ],
}
```

## Terms Agreement

Signer:

```txt theme={null}
ownerAddress
```

Message:

```txt theme={null}
JSON.stringify(termSections)
```

## Privacy Code

Signer:

```txt theme={null}
ownerAddress
```

Domain:

```ts theme={null}
{
  name: "Jurat Signature Domain Name",
  version: "1.0.0",
  chainId: 0,
  verifyingContract: "0x0000000000000000000000000000000000000000",
}
```

Typed data:

```ts theme={null}
{
  data: [
    { name: "signer", type: "address" },
    { name: "juratWalletAddress", type: "address" },
    { name: "name", type: "string" },
    { name: "state", type: "string" },
  ],
}
```

Planned SDK helper:

```ts theme={null}
signPrivacyCode(signer, privacyCode)
```

## Will Upload

Signer:

```txt theme={null}
ownerAddress
```

Message:

```txt theme={null}
JSON.stringify(fileBuffer)
```

The uploaded file and signed file buffer must match exactly.

Use the future SDK helpers where available so wallet prompts and backend verification stay aligned.
