12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #pragma once
- #include <cstdint> // for uint8_t
- #include <memory> // for unique_ptr
- #include <string> // for string
- #include <vector> // for vector
- #include "Crypto.h" // for Crypto
- #include "protobuf/authentication.pb.h" // for ClientResponseEncrypted
- #include "protobuf/keyexchange.pb.h" // for APResponseMessage, ClientHello
- namespace cspot {
- class AuthChallenges {
- public:
- AuthChallenges();
- ~AuthChallenges();
- /**
- * @brief Prepares a spotify authentication packet
- * @param authBlob authentication blob bytes
- * @param authType value representing spotify's authentication type
- * @param deviceId device id to use during auth.
- * @param username spotify's username
- *
- * @returns vector containing bytes of the authentication packet
- */
- std::vector<uint8_t> prepareAuthPacket(std::vector<uint8_t>& authBlob,
- int authType,
- const std::string& deviceId,
- const std::string& username);
- /**
- * @brief Solves the ApHello packet, and returns a packet with response
- *
- * @param helloPacket hello packet bytes received from the server
- * @param data authentication data received from the server
- *
- * @returns vector containing response packet
- */
- std::vector<uint8_t> solveApHello(std::vector<uint8_t>& helloPacket,
- std::vector<uint8_t>& data);
- /**
- * @brief Prepares an client hello packet, used for initial auth with spotify
- *
- * @returns vector containing the packet's data
- */
- std::vector<uint8_t> prepareClientHello();
- std::vector<uint8_t> shanSendKey = {};
- std::vector<uint8_t> shanRecvKey = {};
- private:
- const long long SPOTIFY_VERSION = 0x10800000000;
- // Protobuf structures
- ClientResponseEncrypted authRequest;
- ClientResponsePlaintext clientResPlaintext;
- ClientHello clientHello;
- APResponseMessage apResponse;
- std::unique_ptr<Crypto> crypto;
- };
- } // namespace cspot
|