OSSL_PARAM params[4];
int paramidx = 0;
int intval;
+ int expect_init_rc = 1;
*buf = consume_uint8t(*buf, len, &selector);
if (*buf == NULL)
*/
msg = (unsigned char *)*buf;
msg_len = *len;
+
+ /* if msg_len > 255, sign_message_init will fail */
+ if (msg_len > 255)
+ expect_init_rc = 0;
+
*len = 0;
if (selector & 0x1)
sig_alg = EVP_SIGNATURE_fetch(NULL, keytype, NULL);
OPENSSL_assert(sig_alg != NULL);
- OPENSSL_assert(EVP_PKEY_sign_message_init(ctx, sig_alg, params));
+ OPENSSL_assert(EVP_PKEY_sign_message_init(ctx, sig_alg, params) == expect_init_rc);
+ /*
+ * the context_string parameter can be no more than 255 bytes, so if
+ * our random input buffer is greater than that, we expect failure above,
+ * which we check for. In that event, theres nothing more we can do here
+ * so bail out
+ */
+ if (expect_init_rc == 0)
+ goto out;
OPENSSL_assert(EVP_PKEY_sign(ctx, NULL, &sig_len, msg, msg_len));
sig = OPENSSL_zalloc(sig_len);
OPENSSL_assert(EVP_PKEY_verify_message_init(ctx, sig_alg, params));
OPENSSL_assert(EVP_PKEY_verify(ctx, sig, sig_len, msg, msg_len));
+out:
OPENSSL_free(sig);
EVP_SIGNATURE_free(sig_alg);
EVP_PKEY_CTX_free(ctx);