Exactement, généralement on le transfert pas, mais on set le même des deux côtés.
Version imprimable
Exactement, généralement on le transfert pas, mais on set le même des deux côtés.
C'est bon, grâce à l'IV correctement initialisé, ça fonctionne. Il fallait le câbler correctement côté PHP puis côté C++/OpenSSL.
Maintenant, c'est ma signature RSA qui ne fonctionne pas. Bien signé avec la clef privée, impossible de vérifier côté C++ avec la clef publique, grrrrrr....
Tu fais le contrôle manuellement ?
Si c'est le cas, il te faut hasher exactement les mêmes données des deux côtés sans inclure la signature.
Envoie :
hash(text) -> signaturePriv(hash)
Réception :
hash(text) // sans la signature
déchiffrement de la signature reçu avec clé pub
comparaison des deux hash, ils doivent être égaux.
C'est peut-être là le problème...
J'ai text qui n'est pas gros du tout, donc pas de hash !
Envoie : Signature du texte non encodé
signaturePriv(text)
Réception : Vérification de la signature
Verify(text,sign_recu)
Et la fonction vérifie me retourne 0. Le verifie ne demande-t-il pas "binaire qui a généré la signature + signature + clef publique) pour vérifier que tout est OK ?
La signature est un hash chiffré par la clé privé.
Essaye de comparer les deux textes, si tu as un seul bit qui change c'est foutu, donc peut-être un espace à la fin. Un caractère '\0' ?
Non, c'est du binaire, 32 octets, et exactement identique !
Peut-être le mode de signature ou des algos différent...
Est-ce obligatoire ? Il faut obligatoirement faire un hash des données ? J'ai 32 octets, le hash me prendra plus de place.
OpenSSL me retourne l'erreur suivante : "Block type is not 01".
Tu as une idée ? Ou il faut que j'encode dans ma licence avec "data" + "hash data" + "sign(hash data)" ?
Quel peut être la différence entre CRYPT_RSA_SIGNATURE_PKCS1 et CRYPT_RSA_SIGNATURE_PSS ?
Si je signe avec le mode CRYPT_RSA_SIGNATURE_PKCS1 j'obtiens algorithm mismatch !
Je rappelle qu'en chargeant la clef publique, je suis bien en mesure de décoder la signature au sein de PHP mais pas en C++ avec la librairie OpenSSL.
Grrrrrrrrr
Bon, avec l'aide d'un ami j'ai (ou plutôt il a) trouvé.
Coté php il faut initialiser la fonction de hachage à utiliser. De même côté C++ avec OpenSSL, il faut lui passer le hash des données en clair et non pas les données elles mêmes
Reste un souci: comment assigner sous OpenSSL la structure RSA (clef publique) avec la clef plain text ? RSA sait facilement charger une clef contenue dans un fichier mais si je décide de mettre la clef directement dans le programme (ce qui évite d'avoir un fichier supplémentaire à balader) je ne sais pas comment en extraire les données pour initialiser la clef RSA.
En fait PEM_read_RSA_PUBKEY prend un FILE * en entrée et moi je voudrais initialiser RSA directement avec le contenu du FILE *
Une idée ? Un bout de code ?
EDIT : je post cette question dans un nouveau thread, je passe le sujet en résolu, et merci encore !