-static const OSSL_PARAM raw_params[] = {
- { "p1", OSSL_PARAM_INTEGER, &app_p1, sizeof(app_p1), NULL },
- { "p3", OSSL_PARAM_UNSIGNED_INTEGER, &bignumbin, sizeof(bignumbin),
- &bignumbin_l },
- { "p4", OSSL_PARAM_UTF8_STRING, &app_p4, sizeof(app_p4), &app_p4_l },
- { "p5", OSSL_PARAM_UTF8_STRING_PTR, &app_p5, sizeof(app_p5), &app_p5_l },
- { "foo", OSSL_PARAM_OCTET_STRING, &foo, sizeof(foo), &foo_l },
- { NULL, 0, NULL, 0, NULL }
+static OSSL_PARAM static_raw_params[] = {
+ { "p1", OSSL_PARAM_INTEGER, &app_p1, sizeof(app_p1), 0 },
+ { "p3", OSSL_PARAM_UNSIGNED_INTEGER, &bignumbin, sizeof(bignumbin), 0 },
+ { "p4", OSSL_PARAM_UTF8_STRING, &app_p4, sizeof(app_p4), 0 },
+ { "p5", OSSL_PARAM_UTF8_STRING, &app_p5, sizeof(app_p5), 0 },
+ /* sizeof(app_p6_init), because we know that's what we're using */
+ { "p6", OSSL_PARAM_UTF8_PTR, &app_p6, sizeof(app_p6_init), 0 },
+ { "foo", OSSL_PARAM_OCTET_STRING, &foo, sizeof(foo), 0 },
+ { NULL, 0, NULL, 0, 0 }
+};
+
+/* The same array of OSSL_PARAM, specified with the macros from params.h */
+static OSSL_PARAM static_api_params[] = {
+ OSSL_PARAM_int("p1", &app_p1),
+ OSSL_PARAM_BN("p3", &bignumbin, sizeof(bignumbin)),
+ OSSL_PARAM_DEFN("p4", OSSL_PARAM_UTF8_STRING, &app_p4, sizeof(app_p4)),
+ OSSL_PARAM_DEFN("p5", OSSL_PARAM_UTF8_STRING, &app_p5, sizeof(app_p5)),
+ /* sizeof(app_p6_init), because we know that's what we're using */
+ OSSL_PARAM_DEFN("p6", OSSL_PARAM_UTF8_PTR, &app_p6, sizeof(app_p6_init)),
+ OSSL_PARAM_DEFN("foo", OSSL_PARAM_OCTET_STRING, &foo, sizeof(foo)),
+ OSSL_PARAM_END
+};
+
+/*
+ * The same array again, but constructed at run-time
+ * This exercises the OSSL_PARAM constructor functions
+ */
+static OSSL_PARAM *construct_api_params(void)
+{
+ size_t n = 0;
+ static OSSL_PARAM params[10];
+
+ params[n++] = OSSL_PARAM_construct_int("p1", &app_p1);
+ params[n++] = OSSL_PARAM_construct_BN("p3", bignumbin, sizeof(bignumbin));
+ params[n++] = OSSL_PARAM_construct_utf8_string("p4", app_p4,
+ sizeof(app_p4));
+ params[n++] = OSSL_PARAM_construct_utf8_string("p5", app_p5,
+ sizeof(app_p5));
+ /* sizeof(app_p6_init), because we know that's what we're using */
+ params[n++] = OSSL_PARAM_construct_utf8_ptr("p6", (char **)&app_p6,
+ sizeof(app_p6_init));
+ params[n++] = OSSL_PARAM_construct_octet_string("foo", &foo, sizeof(foo));
+ params[n++] = OSSL_PARAM_construct_end();
+
+ return params;
+}
+
+struct param_owner_st {
+ OSSL_PARAM *static_params;
+ OSSL_PARAM *(*constructed_params)(void);
+};
+
+static const struct param_owner_st raw_params = {
+ static_raw_params, NULL
+};
+
+static const struct param_owner_st api_params = {
+ static_api_params, construct_api_params