Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
notes:webcrypto [2020/02/27 07:00] etienne |
notes:webcrypto [2021/05/28 15:12] (Version actuelle) etienne |
||
|---|---|---|---|
| Ligne 9: | Ligne 9: | ||
| ==== Conversion de clés ==== | ==== Conversion de clés ==== | ||
| + | |||
| + | ==== Clé publique de PEM vers DER ==== | ||
| + | <code shell> | ||
| + | $ openssl pkey -pubin -in rsapub.pem -out rsapub.der -outform DER | ||
| + | </ | ||
| + | |||
| === OpenSSH === | === OpenSSH === | ||
| Ligne 162: | Ligne 168: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | === PHP/ | ||
| + | |||
| + | Signature avec [[http:// | ||
| + | |||
| + | <code php> | ||
| + | <?PHP | ||
| + | require(' | ||
| + | use phpseclib\Crypt\RSA; | ||
| + | |||
| + | $rsa = new RSA(); | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $text = 'Texte à signer'; | ||
| + | $signature = $rsa-> | ||
| + | echo base64_encode($signature); | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | === C/OpenSSL EVP === | ||
| + | |||
| + | <code c> | ||
| + | /* Pour lire la clé : | ||
| + | | ||
| + | * FILE * fp = fopen(" | ||
| + | * sign(PEM_read_PrivateKey(fp, | ||
| + | */ | ||
| + | |||
| + | void sign (EVP_PKEY * pkey, const char * text, unsigned char ** stext, size_t * slen) { | ||
| + | size_t siglen = 0; | ||
| + | EVP_PKEY_CTX * kctx = NULL; | ||
| + | EVP_MD_CTX * mctx = NULL; | ||
| + | |||
| + | mctx = EVP_MD_CTX_new(); | ||
| + | if (!mctx) { return; } | ||
| + | | ||
| + | kctx = EVP_PKEY_CTX_new(pkey, | ||
| + | if (kctx) { | ||
| + | /* ordre important ici */ | ||
| + | EVP_MD_CTX_set_pkey_ctx(mctx, | ||
| + | EVP_DigestSignInit(mctx, | ||
| + | |||
| + | EVP_PKEY_CTX_set_rsa_padding(kctx, | ||
| + | EVP_PKEY_CTX_set_signature_md(kctx, | ||
| + | EVP_PKEY_CTX_set_rsa_mgf1_md(kctx, | ||
| + | EVP_PKEY_CTX_set_rsa_pss_saltlen(kctx, | ||
| + | |||
| + | EVP_DigestSignUpdate(mctx, | ||
| + | EVP_DigestSignFinal(mctx, | ||
| + | | ||
| + | *stext = calloc(siglen, | ||
| + | if (*stext == NULL) { | ||
| + | EVP_MD_CTX_free(mctx); | ||
| + | return; | ||
| + | } | ||
| + | EVP_DigestSignFinal(mctx, | ||
| + | *slen = siglen; | ||
| + | } | ||
| + | EVP_MD_CTX_free(mctx); | ||
| + | | ||
| + | return; | ||
| + | } | ||
| + | </ | ||
| + | |||
| ==== Vérification de signature ==== | ==== Vérification de signature ==== | ||
| Ligne 201: | Ligne 274: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | === PHP/ | ||
| + | |||
| + | L' | ||
| + | |||
| + | <code php> | ||
| + | <?PHP | ||
| + | $rsa = new RSA(); | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $rsa-> | ||
| + | $text = 'Texte à signer'; | ||
| + | echo $rsa-> | ||
| + | ?> | ||
| + | </ | ||
| + | |||