26     template<
typename ppT, 
typename snarkT>
 
   29         ppT::init_public_params();
 
   30         libff::inhibit_profiling_info = 
true;
 
   31         libff::inhibit_profiling_counters = 
true;
 
   33         typename snarkT::keypair keypair;
 
   36             snarkT::keypair_read_bytes(keypair, in_s);
 
   41             snarkT::verification_key_write_bytes(keypair.vk, out_s);
 
   46             snarkT::proving_key_write_bytes(keypair.pk, out_s);
 
   54         boost::program_options::options_description &options,
 
   55         boost::program_options::options_description &all_options,
 
   56         boost::program_options::positional_options_description &pos)
 override 
   60         options.add_options()(
 
   62             po::value<std::string>(),
 
   63             "Verification key file (optional)")(
 
   65             po::value<std::string>(),
 
   66             "Proving key file (optional)");
 
   68         all_options.add(options).add_options()(
 
   69             "keypair-file,k", po::value<std::string>(), 
"Keypair file");
 
   70         pos.add(
"keypair-file", 1);
 
   74         const boost::program_options::variables_map &vm)
 override 
   78         if (vm.count(
"keypair-file") == 0) {
 
   79             throw po::error(
"keypair file not specified");
 
   83         vk_file = vm.count(
"vk-file") ? vm[
"vk-file"].as<std::string>() : 
"";
 
   84         pk_file = vm.count(
"pk-file") ? vm[
"pk-file"].as<std::string>() : 
"";
 
   87             throw po::error(
"no VK or PK file specified");
 
   93         std::cout << 
"Usage:\n" 
   95                   << argv0 << 
" split-keypair <options> [keypair_file]\n";
 
  107     "Extract the verification key / proving key from a keypair.");