Outils pour utilisateurs

Outils du site


notes:webcrypto

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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
 +</code>
 +
  
 === OpenSSH === === OpenSSH ===
Ligne 182: Ligne 188:
 echo base64_encode($signature); echo base64_encode($signature);
 ?> ?>
 +</code>
 +
 +=== C/OpenSSL EVP ===
 +
 +<code c>
 +/* Pour lire la clé :
 + 
 + * FILE * fp = fopen("pkey.pem", "r");
 + * sign(PEM_read_PrivateKey(fp, NULL, NULL, NULL), ...);
 + */
 +
 +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, NULL);
 +  if (kctx) {
 +    /* ordre important ici */
 +    EVP_MD_CTX_set_pkey_ctx(mctx, kctx);
 +    EVP_DigestSignInit(mctx, NULL, EVP_sha256(), NULL, NULL);
 +
 +    EVP_PKEY_CTX_set_rsa_padding(kctx, RSA_PKCS1_PSS_PADDING);
 +    EVP_PKEY_CTX_set_signature_md(kctx, EVP_sha256());
 +    EVP_PKEY_CTX_set_rsa_mgf1_md(kctx, EVP_sha256());
 +    EVP_PKEY_CTX_set_rsa_pss_saltlen(kctx, 0);
 +
 +    EVP_DigestSignUpdate(mctx, text, strlen(text));
 +    EVP_DigestSignFinal(mctx, NULL, &siglen);
 +    
 +    *stext = calloc(siglen, sizeof(**stext));
 +    if (*stext == NULL) {
 +      EVP_MD_CTX_free(mctx);
 +      return;
 +    }
 +    EVP_DigestSignFinal(mctx, *stext, &siglen);
 +    *slen = siglen;
 +  }
 +  EVP_MD_CTX_free(mctx);
 +  
 +  return;
 +}
 </code> </code>
  
notes/webcrypto.1582791182.txt.gz · Dernière modification: 2020/02/27 09:13 de etienne