+static GOST_NID_JOB *missing_NIDs[] = {
+ &kuznyechik_mgm_NID,
+ &magma_mgm_NID,
+};
+
+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);
+ }
+}
+