
рд╣рд╛рдп рд╕рдм рд▓реЛрдЧ!
рдореИрдВ рдЯреЙрдХреНрд╕ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВред рдЯреЙрдХреНрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ, рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рджреЗрдЦрд╛ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЭреВрдареА рднрд╛рд╡рдирд╛ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ 2016 рдореЗрдВ ( рд░реВрд╕реА рдореЗрдВ ) рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЯреЙрдХреНрд╕ рдореЗрдВ рдХрдИ рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдореИрдВ рдПрдХ рдЯреАрдо рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдиреЗ рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ (рдЪреЗрдХ -рдЯреЙрдХреНрд╕-рдЖрд░рдПрд╕ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЯреЙрдХреНрд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИред рдореИрдВ 2019 рдореЗрдВ рдЬрд╣рд░реАрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рд░рд╕реНрдЯ рдореЗрдВ рдЯреЙрдХреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдХреНрдпрд╛ рд╣реИред
2016 рдХрд╛ рдореВрд▓ рд▓реЗрдЦ
рдХреЗрд╡рд▓ E2E рдХреЗ рдЖрдзрд╛рд░ рдкрд░ E2E рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдПрдХ рдЕрд╕реНрд╡рд╛рд╕реНрдереНрдпрдХрд░ рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реИред рдореИрдВ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдЙрджреНрджреЗрд╢реНрдп рддрдереНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ред
рд╕реНрдкреЙрдпрд▓рд░: рдЯреЙрдХреНрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрд░реА рдмрд╛рддреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ред
рдпрд╣ рд╕рдм рдиреЛрдб рдкрд░ ( рд░реВрд╕реА рдореЗрдВ ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдмрд░ рдХреЗ рд▓реЗрдЦреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рд▓реЛрдЧреЛрдВ рдиреЗ CentOS рдкрд░ рдиреЛрдб рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ CMake рдкрд░ рдПрдХ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЕрдкрдиреЗ рдкреАрдЖрд░ рдХреЛ рдлрд┐рд░рд┐рдиреЛрдб рдкрд░ рдЯреЙрдХреНрд╕ рд╕рдореБрджрд╛рдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рдореБрд▓рд╛рдХрд╛рдд рдХреА рдЧрдИ:
рдХрд┐рд╕реА рдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реАрдореЗрдХ рдХрд╛ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдЙрдирдХреЗ рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдСрдЯреЛрдЯреВрд▓ (рдПрд╕рдЖрдИрд╕реА!) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рд╡реЗ рдЕрдм рдмреЗрд╣рддрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЙрд╕ рдХреЛрдб рдХреЛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЬреЛ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛: "рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣реЛрдиреЗ рджреЗрдВред"
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдЖрдХрд░реНрд╖рдХ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдХреЗ рдХреЛрдб рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
рддрдереНрдп рд╕рдВрдЦреНрдпрд╛ 2ред рдореБрдлреНрдд рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрдорд╕реЗрдЯ (ptr, 0, рдЖрдХрд╛рд░)
рдореЗрд░реА рдЖрдВрдЦ рд▓рдЧ рдЧрдИ
memset(c, 0, sizeof(Net_Crypto)); free(c);
рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдореЗрдорд╕реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд╕рдХрд╛ рд▓реЗрдЦ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рдХрдВрдкрд╛рдЗрд▓рд░ 'рдореЗрдорд╕реЗрдЯ' рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рддрд░реНрдХ рд╕реАрдзрд╛ рд╣реИ: "рдЖрдк 'рдлреНрд░реА' рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдореЗрдорд╕реЗрдЯ рдСрдмреНрдЬрд░реНрд╡ рдХрд┐рдП рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рдЗрд╕ 'рдмреЗрдХрд╛рд░' рдХреЙрд▓ рдХреЛ рдбрд┐рд▓реАрдЯ рдХрд░рдиреЗ рджреЗрдВред"
рдПрдХ рдореЗрд╣рдирддреА рдЫрд╛рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВрдиреЗ рд╕реЛрдбрд┐рдпрдо_рдореЗрдЬрд╝реЗрд░реЛ рдФрд░ TESTS рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЛ memset($DST, 0, $SIZE)
рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред
рддрдереНрдп рд╕рдВрдЦреНрдпрд╛ 3ред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рд╕рдордп рдкрд░ рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ
toxcore
рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп рд╣реИ:
int public_key_cmp(const uint8_t *pk1, const uint8_t *pk2) { return crypto_verify_32(pk1, pk2); }
crypto_verify_32 - NaCL / рд╕реЛрдбрд┐рдпрдо рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕рдордп рдХреЗ рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░рдВрддрд░ рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдореЗрдореНрдХреИрдВрдк рдкрд╣рд▓реА рдЕрд╕рдорд╛рди рдмрд╛рдЗрдЯ рдкрд░ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдХреБрдВрдЬреА рдЬреИрд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ crypto_verify_32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмрд╛рдЗрдЯ-рдкреНрд░рддрд┐-рдмрд╛рдЗрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛рдПрдБ рд╕рдордп рдХреЗ рд╣рдорд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╢реЛрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдордПрд╕реАрдПрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП (Google рдХреА Keyczar рдХреНрд░рд┐рдкреНрдЯреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдпрд╣ рднреЗрджреНрдпрддрд╛ рджреЗрдЦреЗрдВ)ред
рдЯреЛрдХреНрд╕рдХреЛрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдЯреЛрдХреНрд╕ рдХрд╛ рдЬрдиреНрдо рдПрдХ рд╕рдордп рднреЗрджреНрдпрддрд╛ рдмрдЧ рдХреЗ рд╕рд╛рде рд╣реБрдЖ рдерд╛:
bool id_equal(const uint8_t *dest, const uint8_t *src) { return memcmp(dest, src, crypto_box_PUBLICKEYBYTES) == 0; }
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ: id_equal рдпрд╛ public_key_cmp рдФрд░ crypto_verify_32 ред
рдпрд╣рд╛рдБ DHT рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ grep рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдкреНрдпрд╛рдЬ рдорд╛рд░реНрдЧ рдФрд░ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдмрд╕рд┐рд╕реНрдЯрдо:
if (memcmp(ping->to_ping[i].public_key, public_key, crypto_box_PUBLICKEYBYTES) == 0) { if (memcmp(public_key, onion_c->friends_list[i].real_public_key, crypto_box_PUBLICKEYBYTES) == 0) if (memcmp(public_key, onion_c->path_nodes_bs[i].public_key, crypto_box_PUBLICKEYBYTES) == 0) if (memcmp(dht_public_key, dht_public_key_temp, crypto_box_PUBLICKEYBYTES) != 0) if (Local_ip(ip_port.ip) && memcmp(friend_con->dht_temp_pk, public_key, crypto_box_PUBLICKEYBYTES) == 0)
рддрдереНрдп рд╕рдВрдЦреНрдпрд╛ 4ред рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдордп рдореЗрдВ increment_nonce
void increment_nonce(uint8_t *nonce) { uint32_t i; for (i = crypto_box_NONCEBYTES; i != 0; --i) { ++nonce[i - 1]; if (nonce[i - 1] != 0) break;
рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЧреБрдкреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдпреЗ рд╕рдордп рдкрд░рд┐рд╡рд░реНрддрди рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рд╣рд╛рде рдореЗрдВ рд╣реИ, рдПрдХ рд╕рд╛рд╡рдзрд╛рди рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рднреА рдЧреБрдкреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдХреБрд▓ рд╡рд╕реВрд▓реА рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЧреИрд░-рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рд╕реЛрдбрд┐рдпрдо рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИ:
рдПрдХ рдЧрд▓рддреА рд╕реЗ рд╡рд┐рдбрдВрдмрдирд╛рдкреВрд░реНрдг рдИрд╕реНрдЯрд░ рдЕрдВрдбреЗ рд╣реИ рдХрд┐ increment_nonce рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдЬреЛ рд╢рдмреНрджреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:
рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд░рдлреЗрдХреНрдЯ рд╣реЛрдирд╛ рд╣реИред рд╣рдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЗрд╕ рд╕рдВрдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рддрдереНрдп рд╕рдВрдЦреНрдпрд╛ 5ред рдЖрдк рд╕реНрдЯреИрдХ рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рдирд┐рдЬреА рдбреЗрдЯрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд░реЗрд╢рд╛рдиреА рдХреЛрдб:
void encrypt_precompute(const uint8_t *public_key, const uint8_t *secret_key, uint8_t *enc_key) { crypto_box_beforenm(enc_key, public_key, secret_key);
рдПрдирдПрд╕реАрдПрд▓ / рд╕реЛрдбрд┐рдпрдо рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ_рдбреЗрдЯ_рд╕реНрдорд┐рдереНрд░рд┐рдХ crypto_box_detached_afternm рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдкреВрд░реЗ рдХреЛрдб рдирд╣реАрдВ рдбрд╛рд▓реВрдВрдЧрд╛, рдпрд╣рд╛рдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИред
рдХреЛрдб рдХреА рдЪрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЧрд▓рддреА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рдЪрд▓реЛ рд╕реЛрдбрд┐рдпрдо рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░реЗрдВ:
int crypto_box_detached(unsigned char *c, unsigned char *mac, const unsigned char *m, unsigned long long mlen, const unsigned char *n, const unsigned char *pk, const unsigned char *sk) { unsigned char k[crypto_box_BEFORENMBYTES]; int ret; (void) sizeof(int[crypto_box_BEFORENMBYTES >= crypto_secretbox_KEYBYTES ? 1 : -1]); if (crypto_box_beforenm(k, pk, sk) != 0) { return -1; } ret = crypto_box_detached_afternm(c, mac, m, mlen, n, k); sodium_memzero(k, sizeof k); return ret; }
рд╣рдореЗрдВ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЬрд╛рдБрдЪреЛрдВ рдХреЛ рдорд┐рдЯрд╛рдХрд░:
unsigned char k[crypto_box_BEFORENMBYTES]; int ret; crypto_box_beforenm(k, pk, sk); ret = crypto_box_detached_afternm(c, mac, m, mlen, n, k); sodium_memzero(k, sizeof k); return ret;
рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рдЪрд┐рдд рджрд┐рдЦрддрд╛ рд╣реИ? рд╣рд╛рдБ! рдпрд╣ рдЯреЛрдХреНрд╕рдХреЛрд░ рд╕реЗ рдлрдВрдХреНрд╢рди рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ_рдбрд╛рдЯрд╛ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХреЛрдб рд╣реИ, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдЯреИрдХ рдкрд░ рдХреБрдВрдЬреА рдХреЛ рд╕реЛрдбрд┐рдпрдо_рдореЗрдЬрд╝реЗрд░реЛ рд╕реЗ рд╕рд╛рдл рдХрд░рдирд╛ рднреВрд▓ рдЧрдП ... рдФрд░ рдЗрд╕рдореЗрдВ рднреА рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВ: handle_TCP_handshake , handle_handrake , рдФрд░ рд╢рд╛рдпрдж рдХрд╣реАрдВ рдФрд░ рднреАред
рддрдереНрдп рд╕рдВрдЦреНрдпрд╛ 6ред рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА рдбрдордореАрдЬ рдХреЗ рд▓рд┐рдП рд╣реИрдВ!
рдЯреЙрдХреНрд╕рдХреЛрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рджреЗрд╡рддрд╛ рд╕рднреА рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рд╡реЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдЕрдкреНрд░рдпреБрдХреНрдд рдХрд╛рд░реНрдп (рдореИрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рдиреНрди рд╣реВрдВ):
../auto_tests/dht_test.c:351:12: warning: unused function 'test_addto_lists_ipv4' [-Wunused-function] START_TEST(test_addto_lists_ipv4) ^ ../auto_tests/dht_test.c:360:12: warning: unused function 'test_addto_lists_ipv6' [-Wunused-function] START_TEST(test_addto_lists_ipv6) ^ ../toxcore/TCP_server.c:1026:13: warning: unused function 'do_TCP_accept_new' [-Wunused-function] static void do_TCP_accept_new(TCP_Server *TCP_server) ^ ../toxcore/TCP_server.c:1110:13: warning: unused function 'do_TCP_incomming' [-Wunused-function] static void do_TCP_incomming(TCP_Server *TCP_server) ^ ../toxcore/TCP_server.c:1119:13: warning: unused function 'do_TCP_unconfirmed' [-Wunused-function] static void do_TCP_unconfirmed(TCP_Server *TCP_server) ^
../toxcore/Messenger.c:2040:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2095:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2110:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
-range-рддреБрд▓рдирд╛] ../toxcore/Messenger.c:2040:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2095:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2110:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
-range-рддреБрд▓рдирд╛] ../toxcore/Messenger.c:2040:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2095:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2110:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
-range-рддреБрд▓рдирд╛] ../toxcore/Messenger.c:2040:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2095:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2110:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
../auto_tests/TCP_test.c:205:24: warning: unsequenced modification and access to 'len' [-Wunsequenced] ck_assert_msg((len = recv(con->sock, data, length, 0)) == length, "wrong len %i\n", len); ^ ~~~ /usr/include/check.h:273:18: note: expanded from macro 'ck_assert_msg' _ck_assert_msg(expr, __FILE__, __LINE__,\ ^
рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рджрд░реНрдЬрди рдЪреЗрддрд╛рд╡рдиреА, рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдХреА рддреБрд▓рдирд╛, рдФрд░ рдЕрдзрд┐рдХред
рдореЗрд░рд╛ рдирд┐рд╖реНрдХрд░реНрд╖
рднрдВрдбрд╛рд░ рд╕реЗ рдЙрджреНрдзрд░рдг:
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЯреЙрдХреНрд╕ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рд╣реЛред
рдпрджрд┐ рдореИрдВ, рдПрдХ рдЧреИрд░-рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд░, рдПрдХ рджрд┐рди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рднрдпрд╛рдирдХ рдХреАрдбрд╝реЗ рдкрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдЦреБрджрд╛рдИ рдХреЗ рдмрд╛рдж рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЛ рдХрд┐рддрдиреА рдЪреАрдЬреЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ?
Tox рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдиреЗ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЦрддрд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬреЛ Tox рд╕реБрд░рдХреНрд╖рд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╕рдорд╛рдзрд╛рди рднрд░реЛрд╕реЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЗ рд╕рдорд╛рдзрд╛рди рднреА рдЙрддрдиреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рддрдиреЗ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╣рд╛рд▓рд┐рдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдЙрд▓реНрд▓рдВрдШрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ред рдЖрдЬрдХрд▓ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреАрдбрд╝реЗ рддрдп рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЯреЙрдХреНрд╕ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдЕрдЧрд▓реА рдмрд╛рд░ рдореИрдВ рдЖрдкрдХреЛ рдЯреЙрдХреНрд╕рд┐рдХ-рдЖрд░рдПрд╕ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдКрдВрдЧрд╛ред рд╣рдордиреЗ рдЬрдВрдЧ рдореЗрдВ рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
Reddit: рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ