public DiffieHellmanRatchet(ILogger <DiffieHellmanRatchet> _logger, IDiffieHellmanHandler _DHH, IKeyDerivationFunction _kdf, ISignatureHandler _signer)
        {
            logger = _logger;
            dHH    = _DHH;
            kdf    = _kdf;
            signer = _signer;
            logger = _logger;

            // create identity key
            (x509IdentityKey, x509IdentityPrivateKey) = dHH.GenerateKeys();

            // create starting keys
            (publicKey, privateKey) = dHH.GenerateKeys();

            // sign the identity key
            SignPublicKey();
        }
        public MusicallyClient(string username, ICacheHandler cacheHandler = null, ISignatureHandler signApi = null)
        {
            ApiSignature = signApi ?? new SignatureHandlerLocal();

            _username     = username;
            _cacheHandler = cacheHandler;

            _client = new FlurlClient();
            _client.Configure(settings =>
            {
                settings.CookiesEnabled = true;
            });

            _client.Headers["User-Agent"] = "Musical.ly/2018031901 (Android; OnePlus ONEPLUS A3003 8.0.0;rv:26)";

            LoadCache();
        }