- for (i=0; i<n_mechs; i++) mechs[i]= getarg_mech();
- for (i=0; i<n_mechs; i++) mechs[i]->encsetup(&md_in[i], &maxprefix, &maxsuffix);
- for (i=0; i<n_mechs; i++) mechs[i]->decsetup(&md_out[i]);
+ i= 0;
+ while ((arg= *++argv)) {
+ arg_assert(*arg++ == '|');
+ arg_assert(i <= MAXMECHS);
+ mechs[i]= find_mech(arg);
+
+ cdebug(i,"writer->reader setup");
+ argv_save= argv;
+
+ if (encdec_keys_write)
+ mechs[i]->encsetup(&md_out[i], &maxprefix, &maxsuffix);
+ else
+ mechs[i]->decsetup(&md_in[i]);
+
+ argv_done= argv;
+ argv= argv_save;
+ cdebug(i,"reader->writer setup");
+
+ if (encdec_keys_write)
+ mechs[i]->decsetup(&md_in[i]);
+ else
+ mechs[i]->encsetup(&md_out[i], &maxprefix, &maxsuffix);
+
+ assert(argv == argv_done);
+
+ i++;
+ }
+ n_mechs= i;