{ "tool":"tirage-verifiable", "name":"Le Tirage vérifiable", "apiVersion":"1",
  "description":"Tirage au sort / ordre de passage prouvablement équitable (commit-reveal, PRNG à graine, Fisher-Yates). Renvoie le résultat, la graine et l'engagement SHA-256 pour recalcul indépendant. 100 % local.",
  "url":"https://sui-juris.fr/p2p-tools/tirage-verifiable/",
  "ops":{
    "draw":{ "summary":"Tire un ordre déterministe et vérifiable à partir d'une graine (générée si absente) et d'un sel.",
      "args":{
        "items":{ "type":"array","required":true,"description":"Participants/éléments : tableau de chaînes, ou texte multi-lignes. Au moins deux." },
        "count":{ "type":"number","required":false,"description":"Nombre de premiers résultats à renvoyer (défaut : ordre complet). count=1 pour un gagnant unique." },
        "seed":{ "type":"string","required":false,"description":"Graine hex. Si absente, une graine cryptographique de 32 octets est générée." },
        "salt":{ "type":"string","required":false,"description":"Sel public imprévisible (défaut vide). À faire fournir par un tiers pour l'équité." }
      },
      "returns":{ "result":"tableau des « count » premiers résultats","order":"ordre complet mélangé","seed":"graine hex utilisée","salt":"sel utilisé","commit":"engagement SHA-256(graine) en hex","count":"taille du résultat" } },
    "verify":{ "summary":"Vérifie qu'un résultat correspond à (graine, sel, liste) et que l'engagement est valide.",
      "args":{
        "items":{ "type":"array","required":true,"description":"Liste des participants (tableau ou texte multi-lignes)." },
        "result":{ "type":"array","required":true,"description":"Résultat annoncé, dans l'ordre (tableau ou texte multi-lignes)." },
        "seed":{ "type":"string","required":true,"description":"Graine révélée (hex)." },
        "salt":{ "type":"string","required":false,"description":"Sel public utilisé." },
        "commit":{ "type":"string","required":true,"description":"Engagement publié — SHA-256(graine) en hex." }
      },
      "returns":{ "valid":"booléen : vrai si l'engagement et le résultat sont cohérents avec (graine, sel, liste)" } }
  } }
