Bisher habe ich gesehen zwei verschiedene Ansätze zur RSA Unterzeichnung mit OpenSSL:
Mit EVP_PKEY_signUnterschied zwischen EVP_PKEY_sign und EVP_DigestSignInit?
ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */);
if (!ctx)
/* Error occurred */
if (EVP_PKEY_sign_init(ctx) <= 0)
/* Error */
if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
/* Error */
if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
/* Error */
/* Determine buffer length */
if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0)
Mit EVP_DigestSignInit:
if(1 != EVP_DigestSignInit(mdctx, NULL, EVP_sha256(), NULL, key))
goto err;
if(1 != EVP_DigestSignUpdate(mdctx, msg, strlen(msg)))
goto err;
if(1 != EVP_DigestSignFinal(mdctx, NULL, slen))
goto err;
if(!(*sig = OPENSSL_malloc(sizeof(unsigned char) * (*slen))))
goto err;
if(1 != EVP_DigestSignFinal(mdctx, *sig, slen))
goto err;
Sind diese nur zwei verschiedene Arten zu tun das gleiche?
auch trotz vorheriger EVP_PKEY_CTX_set_signature_md Aufruf? – olegst
Ich kann im Moment nicht testen, aber Sie könnten versuchen, EVP_PKEY_sign zu viele Daten (zB 4000 Bytes) zu übergeben und sehen, ob es es verarbeiten wird ... und wenn ja, entschlüsselt RSA das Ergebnis als RAW und überprüft die Struktur um sicherzustellen, dass Teile nicht ignoriert wurden. – lockcmpxchg8b