aboutsummaryrefslogtreecommitdiffstats
path: root/src/cli
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-04-05 13:58:01 -0400
committerJack Lloyd <[email protected]>2018-04-05 13:58:01 -0400
commitfb7071404471bcd1961ee2d3bf49e0d7fce6bf88 (patch)
treefd4e40bf23492afcce210fefe94a5c6a32323a26 /src/cli
parentba5ac0eddfa4ba4ac818de69c6b54200ee86699a (diff)
Add pk_workfactor CLI and refactor workfactor estimator functions
No reason to duplicate the NFS workfactor estimator twice
Diffstat (limited to 'src/cli')
-rw-r--r--src/cli/pubkey.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/cli/pubkey.cpp b/src/cli/pubkey.cpp
index 5a8cfcf44..3af91b722 100644
--- a/src/cli/pubkey.cpp
+++ b/src/cli/pubkey.cpp
@@ -17,6 +17,7 @@
#include <botan/pk_algs.h>
#include <botan/pkcs8.h>
#include <botan/pubkey.h>
+#include <botan/workfactor.h>
#if defined(BOTAN_HAS_DL_GROUP)
#include <botan/dl_group.h>
@@ -392,6 +393,39 @@ class DL_Group_Info final : public Command
BOTAN_REGISTER_COMMAND("dl_group_info", DL_Group_Info);
+class PK_Workfactor final : public Command
+ {
+ public:
+ PK_Workfactor() : Command("pk_workfactor --type=rsa bits") {}
+
+ std::string group() const override
+ {
+ return "pubkey";
+ }
+
+ std::string description() const override
+ {
+ return "Provide estimate of strength of public key based on size";
+ }
+
+ void go() override
+ {
+ const size_t bits = get_arg_sz("bits");
+ const std::string type = get_arg("type");
+
+ if(type == "rsa")
+ output() << Botan::if_work_factor(bits) << "\n";
+ else if(type == "dl")
+ output() << Botan::dl_work_factor(bits) << "\n";
+ else if(type == "dl_exp")
+ output() << Botan::dl_exponent_size(bits) << "\n";
+ else
+ throw CLI_Usage_Error("Unknown type for pk_workfactor");
+ }
+ };
+
+BOTAN_REGISTER_COMMAND("pk_workfactor", PK_Workfactor);
+
class Gen_DL_Group final : public Command
{
public: