public virtual LoadStatus Decrypt(Stream data, out Stream decryptedData, out X509Certificate2 certificate)
        {
            var publicKeyHash = ParsePublicKeyHash(data);
            var found         = store.TryGetCertificateWith(publicKeyHash, out certificate);

            decryptedData = default(Stream);

            if (!found)
            {
                return(FailForMissingCertificate());
            }

            decryptedData = Decrypt(data, PUBLIC_KEY_HASH_SIZE, certificate);

            return(LoadStatus.Success);
        }