`Signature` class is better to be implemented using the Factory Method pattern. You've already implemented something quite similar, but in your variant there is no way for the user to use a custom signing method.

What I might propose is to change the `Signature` class to something like this:
```c++
typedef std::function<std::string(const std::string&, const std::string&, const std::string&)> SignatureFunction;

class Signature
{
public:
    Signature(const std::string &name, SignatureFunction function);
    static Signature Create(SignatureMethod);
    std::string operator()(const std::string &, const std::string &, const std::string &);
//...
};
```
This approach is more versatile. Users will be able to use predefined signing methods without any pain and create their own if they want to.