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 09:13] 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 182: | Ligne 188: | ||
| echo base64_encode($signature); | 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; | ||
| + | } | ||
| </ | </ | ||