# # # patch "keys.cc" # from [7deefee7a7092643ed359d71b84c715eee8647d9] # to [ca4dcc435354d1e1be3ee25a4d0a518b1d9c8684] # ============================================================ --- keys.cc 7deefee7a7092643ed359d71b84c715eee8647d9 +++ keys.cc ca4dcc435354d1e1be3ee25a4d0a518b1d9c8684 @@ -365,15 +365,25 @@ make_signature(app_state & app, 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); + rsa_pub_key pub; + decode_base64(key.pub, pub); + SecureVector pub_block; + pub_block.set(reinterpret_cast(pub().data()), pub().size()); + L(FL("building verifier for %d-byte pub key") % pub_block.size()); + shared_ptr x509_key = + shared_ptr(Botan::X509::load_key(pub_block)); + shared_ptr pub_key = shared_dynamic_cast(x509_key); + if (!pub_key) + throw informative_failure("Failed to get RSA verifying key"); + 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")); + if ((*pub_key).get_e() == (*si).get_e() + && (*pub_key).get_n() == (*si).get_n()) { + L(FL(" ssh key matches monotone key")); a->sign_data(*si, tosign, sig_string); break; - //} + } } if (sig_string.length() > 0) { break;