Je coince sur la génération de lien, plus exactement sur la signature. Le résultat pour un lien déjà connu ne me donne pas la même signature… alors que le code pour vérifier la signature des liens existants marche bien maintenant.
Le code qui ne me retourne pas la bonne valeur :
function _l_gen($dat, $typ, $src, $dst, $met) { global $nebule_publ_entite, $nebule_priv_entite, $nebule_pass_entite; if ($nebule_publ_entite == '') return(false); if ($nebule_priv_entite == '') return(false); if ($nebule_pass_entite == '') return(false); if (! file_exists("o/$nebule_priv_entite")) return(false); if ($typ == '') return(false); if ($src == '') return(false); if ($dst == '') return(false); if ($met == '') return(false); if ($dat == '-') $dat = date(DATE_ATOM); $privcert=(nebReadObjText($nebule_priv_entite,10000)); $private_key=openssl_pkey_get_private($privcert, $nebule_pass_entite); if ($private_key === false) { return(false); } $data='_'.$nebule_publ_entite.'_'.$dat.'_'.$typ.'_'.$src.'_'.$dst.'_'.$met; $hexsign=''; $binary_signature=''; $hashdata=hash("sha256", $data); $binhash = pack("H*", $hashdata); $ok=openssl_private_encrypt($binhash, $binary_signature, $private_key, OPENSSL_PKCS1_PADDING); unset($private_key); unset($hashdata); unset($binhash); if ($ok === false) return(false); $hexsign = bin2hex($binary_signature); return("$hexsign.sha256$data"); }
Il y a bien la fonction openssl_sign, mais l’algorithme OPENSSL_ALGO_SHA256 n’est pris en charge que à partir de php v5.4.8. C’est à dire que toutes les machines ne le supportent pas encore…
Je dois me tromper quelque part… la fonction openssl_sign retourne bien une signature correcte…