Génération du document de certification

Pour générer le document de certification, il me manque à compléter ce champ dont j’ignore à quoi il correspond :

IdtySignature: IDTY_SIGNATURE

J’ai aussi jetté un œil dans duniterpy, mais ça ne m’a pas aidé.

S’agit-il de la signature de l’identité ? De quoi s’agit-il en somme ?

1 Like

Oui il s’agit bien de la signature du document d’identité à certifier. Soit le champ “self” dans les champs du lookup.

2 Likes

Ah ok, il s’agit donc de la signature apposée au document d’identité envoyée au préalable par l’identitée ?

Oui c’est ca, si tu voulais me certifier sur g1-test, sa valeur serait :

SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb/HNa+TKzD2t0Yte+DA==

d’après http://g1-test.duniter.org/wot/lookup/mmpio

2 Likes

Je te remercie.
Je comprends mieux maintenant :slight_smile:

Bon, du coup, j’envoie ce document :

Version: 10
Type: Certification
Currency: g1-test
Issuer: 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH
IdtyIssuer: moul-test
IdtyUniqueID: mmpio
IdtyTimestamp: 7543-000044410C5370DE8DBA911A358F318096B7A269CFC2BB93272E397CC513EA0A
IdtySignature: SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb/HNa+TKzD2t0Yte+DA==
CertTimestamp: 167757-0001F460B924549D10CD85E56D20C5E78E93D6D980825153FFBEEE37AF781346
G2siYr9cZHxnQJ77KmxjJn+6qYS2XPMUjqwjFxiywWrqI2X//IMBJdVLIAnRNKw+xW/sYUlSCBENlMIWQIJWCw==

Aussi, sous le format d’une ligne :

cert=Version%3A+10%0AType%3A+Certification%0ACurrency%3A+g1-test%0AIssuer%3A+5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH%0AIdtyIssuer%3A+moul-test%0AIdtyUniqueID%3A+mmpio%0AIdtyTimestamp%3A+7543-000044410C5370DE8DBA911A358F318096B7A269CFC2BB93272E397CC513EA0A%0AIdtySignature%3A+SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb%2FHNa%2BTKzD2t0Yte%2BDA%3D%3D%0ACertTimestamp%3A+167757-0001F460B924549D10CD85E56D20C5E78E93D6D980825153FFBEEE37AF781346%0AG2siYr9cZHxnQJ77KmxjJn%2B6qYS2XPMUjqwjFxiywWrqI2X%2F%2FIMBJdVLIAnRNKw%2BxW%2FsYUlSCBENlMIWQIJWCw%3D%3D

Mais ce dernier me retourne une HTTP Error 400: Bad Request

Qu’ai-je mal fait pour que ça ne passe pas ?

Alors je ne sais pas quelle méthode tu utilises pour envoyer ta certification.
Personnellement je la fais à la main, dans un fichier txt, *sans saut de ligne après la signature, et l’envoi avec la commande suivante

curl -X POST --data-urlencode cert@mycert.txt http://g1-test.duniter.org/wot/certify

Avec ton document je reçois l’erreur suivante :

"ucode": 1005,
"message": "Document has unkown fields or wrong line ending format"

*après vérification, il semble que ce soit Curl qui rajoute un saut de ligne à la fin du document, celui-ci donc donc bien être présent selon la méthode employée

1 Like

Le champ IdtyIssuer doit contenir ma clef publique et non la tienne. De manière générale, dans le document de certification, tous les champs préfixés de “Idty” sont des champs de l’identité cible.

"pubkey": "mMPioknj2MQCX9KyKykdw8qMRxYR2w1u3UpdiEJHgXg",  //IdtyIssuer
      "uids": [
        {
          "uid": "mmpio",  //IdtyUniqueID
          "meta": {
            "timestamp": "7543-000044410C5370DE8DBA911A358F318096B7A269CFC2BB93272E397CC513EA0A" //IdtyTimestamp
          },
          "revoked": false,
          "revoked_on": null,
          "revocation_sig": null,
          "self": "SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb/HNa+TKzD2t0Yte+DA==", //IdtySignature
1 Like

A noter que dans la crate documents de duniter-rs vous avez des exemples fonctionnel pour tout les documents, regardez les tests unitaires en fin de fichier qui sont tirés d’exemples réels de la Ğ1 :wink:

Après correction, j’envoie ce document :

Version: 10
Type: Certification
Currency: g1-test
Issuer: 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH
IdtyIssuer: mMPioknj2MQCX9KyKykdw8qMRxYR2w1u3UpdiEJHgXg
IdtyUniqueID: mmpio
IdtyTimestamp: 7543-000044410C5370DE8DBA911A358F318096B7A269CFC2BB93272E397CC513EA0A
IdtySignature: SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb/HNa+TKzD2t0Yte+DA==
CertTimestamp: 167884-0001DFCA28002A8C96575E53B8CEF8317453A7B0BA255542CCF0EC8AB5E99038
wqZxPEGxLrHGv8VdEIfUGvUcf+tDdNTMXjLzVRCQ4UhlhDRahOMjfcbP7byNYr5OfIl83S1MBxF7VJgu8YasCA==

J’obtiens :

curl -X POST --data-urlencode cert@mycert.txt http://g1-test.duniter.org/wot/certify
Warning: Couldn't read data from file "cert@mycert.txt", this makes an empty 
Warning: POST.
{
  "ucode": 1108,
  "message": "Parameter `cert` is required"
}⏎

J’ai tenté de préfixer mon document de cert=, mais rien n’y fait. J’ai également mis un oneliner.

Voici où je forge mon document.

Voilà, en attendant, faut aussi que je sois membre.

@Moul RTFM :

https://git.duniter.org/nodes/typescript/duniter/blob/dev/doc/HTTP_API.md#wotcertify

Notamment il ne faut pas préfixer le document de cert= mais créer un paramètre POST dont la clé est “cert” et la value le document au format raw :wink:

J’ai copier/coller ton document dans un test unitaire de Rust et ça me crache ``Err value: InvalidInnerFormat("Certification")' il doit y avoir une erreur quelque part mais je ne vois pas ou :thinking:

Ha c’est bon ton document passe, il y avait une erreur dans ma regex rust qui passait entre les mailles du filet sur les document g1 que j’avais tester ! Ça me permet d’améliorer mon code en même temps merci :slight_smile:

Ah, c’est bon. Je l’ai :

curl -X POST -d cert=Version%3A+10%0AType%3A+Certification%0ACurrency%3A+g1-test%0AIssuer%3A+5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH%0AIdtyIssuer%3A+mMPioknj2MQCX9KyKykdw8qMRxYR2w1u3UpdiEJHgXg%0AIdtyUniqueID%3A+mmpio%0AIdtyTimestamp%3A+7543-000044410C5370DE8DBA911A358F318096B7A269CFC2BB93272E397CC513EA0A%0AIdtySignature%3A+SmSweUD4lEMwiZfY8ux9maBjrQQDkC85oMNsin6oSQCPdXG8sFCZ4FisUaWqKsfOlZVb%2FHNa%2BTKzD2t0Yte%2BDA%3D%3D%0ACertTimestamp%3A+167899-0001F9D537C9814EE0490073A5A1245F5A40D9C5E8EF2AEA7BB9BF6CADCEA55F%0A4aUTqMc02BTQ%2BfyGrx2uaO37oJkee55d%2F9d%2BLhHt%2FAO7EEjV1ymQ3Wo8JOxZJURz09gjcu8cD0Y%2BsgnwFb7EDw%3D%3D%0A http://g1-test.duniter.org/wot/certify
{
  "ucode": 1002,
  "message": "Certifier must be a member"
}⏎
1 Like

La commande utilisée est correcte, je soupconne une erreur dans le nom du fichier, l’as tu bien nommé “mycert.txt” comme dans la commande ?

J’ai obtenu la même erreur en essayant d’envoyer le contenu d’un fichier qui n’existait pas :

~$ curl -X POST --data-urlencode cert@unfichierquinexistepas.txt http://g1-test.duniter.org/wot/certify

Warning: Couldn’t read data from file “cert@unfichierquinexistepas.txt”, this
Warning: makes an empty POST.
{
“ucode”: 1108,
“message”: “Parameter cert is required”
}

Je suis bien content d’avoir forgé mon premier document Duniter valide.
Pour le document de transaction, c’était @Tortue qui l’avait implémenté dans silkaj.


Oui, j’avais nommé mon fichier cert@mycert.txt. En effet, ça fonctionne bien ainsi. C’est top de pouvoir envoyer ces documents en shell. Va falloir écrire un programme en shell.

Voici les certifications envoyées avec Silkaj.

Pour les personnes que ça intéresse, ça se passe ici.

2 Likes