diff --git a/i2psam.cpp b/i2psam.cpp index 17d981c..c83bb31 100644 --- a/i2psam.cpp +++ b/i2psam.cpp @@ -241,7 +241,8 @@ StreamSession::StreamSession( const std::string& SAMHost /*= SAM_DEFAULT_ADDRESS*/, uint16_t SAMPort /*= SAM_DEFAULT_PORT*/, const std::string& destination /*= SAM_GENERATE_MY_DESTINATION*/, - const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/) + const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/, + const std::string& signatureType /*= SAM_SIGNATURE_TYPE */ ) : socket_(SAMHost, SAMPort) , nickname_(nickname) , sessionID_(generateSessionID()) @@ -419,7 +420,7 @@ FullDestination StreamSession::createStreamSession(const std::string& destinatio { typedef Message::Answer AnswerType; - const AnswerType answer = createStreamSession(socket_, sessionID_, nickname_, destination, i2pOptions_); + const AnswerType answer = createStreamSession(socket_, sessionID_, nickname_, destination, i2pOptions_, SAM_SIGNATURE_TYPE); if (answer.status != Message::OK) { fallSick(); @@ -486,9 +487,9 @@ Message::eStatus StreamSession::request(I2pSocket& socket, const std::string& re } /*static*/ -Message::Answer StreamSession::createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options) +Message::Answer StreamSession::createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options, const std::string& signatureType) { - return request(socket, Message::sessionCreate(Message::sssStream, sessionID, nickname, destination, options), "DESTINATION"); + return request(socket, Message::sessionCreate(Message::sssStream, sessionID, nickname, destination, options, signatureType), "DESTINATION"); } /*static*/ @@ -649,7 +650,7 @@ std::string Message::hello(const std::string &minVer, const std::string &maxVer) return createSAMRequest(helloFormat, minVer.c_str(), maxVer.c_str()); } -std::string Message::sessionCreate(SessionStyle style, const std::string& sessionID, const std::string& nickname, const std::string& destination /*= SAM_GENERATE_MY_DESTINATION*/, const std::string& options /*= ""*/) +std::string Message::sessionCreate(SessionStyle style, const std::string& sessionID, const std::string& nickname, const std::string& destination /*= SAM_GENERATE_MY_DESTINATION*/, const std::string& options /*= ""*/, const std::string& signatureType /*= SAM_SIGNATURE_TYPE*/) { /////////////////////////////////////////////////////////// // @@ -673,8 +674,8 @@ std::string Message::sessionCreate(SessionStyle style, const std::string& sessio case sssRaw: sessionStyle = "RAW"; break; } - static const char* sessionCreateFormat = "SESSION CREATE STYLE=%s ID=%s DESTINATION=%s inbound.nickname=%s %s\n"; // we add inbound.nickname option - return createSAMRequest(sessionCreateFormat, sessionStyle.c_str(), sessionID.c_str(), destination.c_str(), nickname.c_str(), options.c_str()); + static const char* sessionCreateFormat = "SESSION CREATE STYLE=%s ID=%s DESTINATION=%s SIGNATURE_TYPE=%s inbound.nickname=%s %s\n"; // we add inbound.nickname option + return createSAMRequest(sessionCreateFormat, sessionStyle.c_str(), sessionID.c_str(), destination.c_str(), signatureType.c_str(), nickname.c_str(), options.c_str()); } std::string Message::streamAccept(const std::string& sessionID, bool silent /*= false*/) diff --git a/i2psam.h b/i2psam.h index 8a081d2..b46686f 100644 --- a/i2psam.h +++ b/i2psam.h @@ -21,6 +21,7 @@ #define SAM_GENERATE_MY_DESTINATION "TRANSIENT" #define SAM_MY_NAME "ME" #define SAM_DEFAULT_I2P_OPTIONS "" +#define SAM_SIGNATURE_TYPE "ECDSA_SHA256_P256" #define SAM_NAME_INBOUND_QUANTITY "inbound.quantity" #define SAM_DEFAULT_INBOUND_QUANTITY 3 // Three tunnels is default now @@ -182,7 +183,9 @@ public: }; static std::string hello(const std::string& minVer, const std::string& maxVer); - static std::string sessionCreate(SessionStyle style, const std::string& sessionID, const std::string& nickname, const std::string& destination = SAM_GENERATE_MY_DESTINATION, const std::string& options = ""); + static std::string sessionCreate(SessionStyle style, const std::string& sessionID, + const std::string& nickname, const std::string& destination = SAM_GENERATE_MY_DESTINATION, + const std::string& options = "", const std::string& signatureType = SAM_SIGNATURE_TYPE); static std::string streamAccept(const std::string& sessionID, bool silent = false); static std::string streamConnect(const std::string& sessionID, const std::string& destination, bool silent = false); static std::string streamForward(const std::string& sessionID, const std::string& host, uint16_t port, bool silent = false); @@ -328,7 +331,8 @@ public: const std::string& SAMHost = SAM_DEFAULT_ADDRESS, uint16_t SAMPort = SAM_DEFAULT_PORT, const std::string& destination = SAM_GENERATE_MY_DESTINATION, - const std::string& i2pOptions = SAM_DEFAULT_I2P_OPTIONS); + const std::string& i2pOptions = SAM_DEFAULT_I2P_OPTIONS, + const std::string& signatureType = SAM_SIGNATURE_TYPE); explicit StreamSession(StreamSession& rhs); ~StreamSession(); @@ -389,7 +393,7 @@ private: static Message::Answer request(I2pSocket& socket, const std::string& requestStr, const std::string& keyOnSuccess); static Message::eStatus request(I2pSocket& socket, const std::string& requestStr); // commands - static Message::Answer createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options); + static Message::Answer createStreamSession(I2pSocket& socket, const std::string& sessionID, const std::string& nickname, const std::string& destination, const std::string& options, const std::string& signatureType); static Message::Answer namingLookup(I2pSocket& socket, const std::string& name); static Message::Answer destGenerate(I2pSocket& socket);