# # # patch "key_store.cc" # from [71474c3e588d79b9b1f7af7fa0c5cbcf830d8a8c] # to [f61ede1345701254c293cd7410c8abce4e9c8be2] # # patch "keys.cc" # from [7679d9eb3cc805010e7429feacc1db0fd1498ece] # to [34475cf2bed7431a628e07feb5848cf91ac0bf39] # # patch "options_list.hh" # from [336d91c5aeb0415071678375ff9edaeeefec8367] # to [2e55c32ec7ea26c97ea7b3fbc2539088aaa6f858] # ============================================================ --- key_store.cc 71474c3e588d79b9b1f7af7fa0c5cbcf830d8a8c +++ key_store.cc f61ede1345701254c293cd7410c8abce4e9c8be2 @@ -90,24 +90,6 @@ key_store::read_key_dir() istringstream is(dat()); read_packets(is, kr, *app); } - - /* - string uri("file://"); - printf("====\n"); - printf("--%s--\n", std::getenv("SSH_AUTH_SOCK")); - uri.append(std::getenv((const char *)"SSH_AUTH_SOCK")); - printf("----%s----\n", uri.c_str()); - Netxx::Address addr(uri.c_str()); - */ - /* - for (int i = 0; i < 20; ++i) { - */ - - /* - scoped_ptr a(new ssh_agent()); - a->connect(); - a->get_keys(); - */ } void ============================================================ --- keys.cc 7679d9eb3cc805010e7429feacc1db0fd1498ece +++ keys.cc 34475cf2bed7431a628e07feb5848cf91ac0bf39 @@ -355,31 +355,31 @@ make_signature(app_state & app, base64 & signature) { string sig_string; - if (app.opts.ssh_sign_given) { + if (app.opts.ssh_sign_given || app.opts.ssh_sign_check_given) { scoped_ptr a(new ssh_agent()); a->connect(); vector ssh_keys = a->get_keys(); - vector mtn_keys; + //vector mtn_keys; keypair key; - app.keys.get_keys(mtn_keys); - for (vector::const_iterator - i = mtn_keys.begin(); i != mtn_keys.end(); ++i) { - app.keys.get_key_pair(*i, key); - shared_ptr priv = get_private_key(app.lua, *i, key.priv); + //app.keys.get_keys(mtn_keys); + //for (vector::const_iterator + // i = mtn_keys.begin(); i != mtn_keys.end(); ++i) { + //app.keys.get_key_pair(*i, key); + //shared_ptr priv = get_private_key(app.lua, *i, key.priv); for (vector::const_iterator si = ssh_keys.begin(); si != ssh_keys.end(); ++si) { - if ((*priv).get_e() == (*si).get_e() - && (*priv).get_n() == (*si).get_n()) { - L(FL(" ssh key matches monotone key")); - string sdata; + //if ((*priv).get_e() == (*si).get_e() + // && (*priv).get_n() == (*si).get_n()) { + //L(FL(" ssh key matches monotone key")); a->sign_data(*si, tosign, sig_string); - } + break;// 2; + //} } - } - }// else { - + //} + E(sig_string.length() > 0, F("make_signature: no key found to sign with")); + } string ssh_sig = sig_string; - + if (!app.opts.ssh_sign_given || app.opts.ssh_sign_check_given) { SecureVector sig; // we permit the user to relax security here, by caching a decrypted key @@ -409,10 +409,10 @@ make_signature(app_state & app, sig = signer->sign_message(reinterpret_cast(tosign.data()), tosign.size()); sig_string = string(reinterpret_cast(sig.begin()), sig.size()); - //} + } - if (app.opts.ssh_sign_given) { - E(ssh_sig == sig_string, F("make_signature: ssh_sig (%i) != sig_string (%i)\nssh_sig : %s\nsig_string: %s") % ssh_sig.length() % sig_string.length() % encode_hexenc(ssh_sig) % encode_hexenc(sig_string)); + if (app.opts.ssh_sign_check_given) { + E(ssh_sig == sig_string, F("make_signature: ssh signature (%i) != monotone sugnature (%i)\nssh signature : %s\nmonotone signature: %s") % ssh_sig.length() % sig_string.length() % encode_hexenc(ssh_sig) % encode_hexenc(sig_string)); } L(FL("produced %d-byte signature") % sig_string.size()); ============================================================ --- options_list.hh 336d91c5aeb0415071678375ff9edaeeefec8367 +++ options_list.hh 2e55c32ec7ea26c97ea7b3fbc2539088aaa6f858 @@ -265,6 +265,14 @@ GOPT(ssh_sign, "ssh-sign", bool, false, } #endif +GOPT(ssh_sign_check, "ssh-sign-check", bool, false, + gettext_noop("sign with ssh-agent, then sign with monotone and compare")) +#ifdef option_bodies +{ + ssh_sign_check = true; +} +#endif + GOPT(full_version, "full-version", bool, false, gettext_noop("print detailed version number, then exit")) #ifdef option_bodies