&grasshopper_cfb_cipher,
&grasshopper_ofb_cipher,
&grasshopper_ctr_cipher,
+ &magma_ecb_cipher,
&magma_cbc_cipher,
&magma_ctr_cipher,
&magma_ctr_acpkm_cipher,
return 1;
}
+static void free_NIDs();
+
static int gost_engine_destroy(ENGINE* e) {
int i;
*minfo->ameth = NULL;
}
+ free_cached_groups();
+ free_NIDs();
+
+# ifndef BUILDING_GOST_PROVIDER
ERR_unload_GOST_strings();
+# endif
return 1;
}
* binds it to OpenSSL libraries
*/
-static int populate_gost_engine(ENGINE* e) {
+static GOST_NID_JOB *missing_NIDs[] = {
+};
+
+static int create_NIDs() {
+ int i;
+ int new_nid = OBJ_new_nid(OSSL_NELEM(missing_NIDs));
+ for (i = 0; i < OSSL_NELEM(missing_NIDs); i++) {
+ GOST_NID_JOB *job = missing_NIDs[i];
+ ASN1_OBJECT *obj =
+ ASN1_OBJECT_create(new_nid + i, NULL, 0, job->sn, job->ln);
+ job->asn1 = obj;
+ if (!obj || OBJ_add_object(obj) == NID_undef) {
+ OPENSSL_free(obj);
+ return 0;
+ }
+ (*missing_NIDs[i]->callback)(new_nid + i);
+ }
+ return 1;
+}
+
+static void free_NIDs() {
+ int i;
+ for (i = 0; i < OSSL_NELEM(missing_NIDs); i++) {
+ ASN1_OBJECT_free(missing_NIDs[i]->asn1);
+ }
+}
+
+# ifndef BUILDING_GOST_PROVIDER
+static
+# endif
+int populate_gost_engine(ENGINE* e) {
int ret = 0;
if (e == NULL)
goto end;
if (!ENGINE_set_id(e, engine_gost_id)) {
- printf("ENGINE_set_id failed\n");
+ fprintf(stderr, "ENGINE_set_id failed\n");
goto end;
}
if (!ENGINE_set_name(e, engine_gost_name)) {
- printf("ENGINE_set_name failed\n");
+ fprintf(stderr, "ENGINE_set_name failed\n");
+ goto end;
+ }
+ if (!create_NIDs()) {
+ fprintf(stderr, "NID creation failed\n");
goto end;
}
if (!ENGINE_set_digests(e, gost_digests)) {
- printf("ENGINE_set_digests failed\n");
+ fprintf(stderr, "ENGINE_set_digests failed\n");
goto end;
}
if (!ENGINE_set_ciphers(e, gost_ciphers)) {
- printf("ENGINE_set_ciphers failed\n");
+ fprintf(stderr, "ENGINE_set_ciphers failed\n");
goto end;
}
if (!ENGINE_set_pkey_meths(e, gost_pkey_meths)) {
- printf("ENGINE_set_pkey_meths failed\n");
+ fprintf(stderr, "ENGINE_set_pkey_meths failed\n");
goto end;
}
if (!ENGINE_set_pkey_asn1_meths(e, gost_pkey_asn1_meths)) {
- printf("ENGINE_set_pkey_asn1_meths failed\n");
+ fprintf(stderr, "ENGINE_set_pkey_asn1_meths failed\n");
goto end;
}
/* Control function and commands */
return ret;
}
+#ifndef BUILDING_GOST_PROVIDER
static int bind_gost_engine(ENGINE* e) {
int ret = 0;
* it must manually call ENGINE_load_gost() for it to bind itself into the
* libcrypto libraries.
*/
-
void ENGINE_load_gost(void) {
ENGINE* toadd;
int ret = 0;
if (ret > 0)
ERR_clear_error();
}
-
+#endif
#endif
/* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */