正在显示
3 个修改的文件
包含
67 行增加
和
12 行删除
| @@ -464,8 +464,14 @@ namespace _srs_internal | @@ -464,8 +464,14 @@ namespace _srs_internal | ||
| 464 | return digest.digest; | 464 | return digest.digest; |
| 465 | } | 465 | } |
| 466 | 466 | ||
| 467 | + char* c1s1_strategy::get_key() | ||
| 468 | + { | ||
| 469 | + return key.key; | ||
| 470 | + } | ||
| 471 | + | ||
| 467 | int c1s1_strategy::dump(c1s1* owner, char* _c1s1, int size) | 472 | int c1s1_strategy::dump(c1s1* owner, char* _c1s1, int size) |
| 468 | { | 473 | { |
| 474 | + srs_assert(size == 1536); | ||
| 469 | return copy_to(owner, _c1s1, size, true); | 475 | return copy_to(owner, _c1s1, size, true); |
| 470 | } | 476 | } |
| 471 | 477 | ||
| @@ -731,6 +737,12 @@ namespace _srs_internal | @@ -731,6 +737,12 @@ namespace _srs_internal | ||
| 731 | { | 737 | { |
| 732 | int ret = ERROR_SUCCESS; | 738 | int ret = ERROR_SUCCESS; |
| 733 | 739 | ||
| 740 | + if (with_digest) { | ||
| 741 | + srs_assert(size == 1536); | ||
| 742 | + } else { | ||
| 743 | + srs_assert(size == 1504); | ||
| 744 | + } | ||
| 745 | + | ||
| 734 | SrsStream stream; | 746 | SrsStream stream; |
| 735 | 747 | ||
| 736 | if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { | 748 | if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { |
| @@ -794,6 +806,12 @@ namespace _srs_internal | @@ -794,6 +806,12 @@ namespace _srs_internal | ||
| 794 | { | 806 | { |
| 795 | int ret = ERROR_SUCCESS; | 807 | int ret = ERROR_SUCCESS; |
| 796 | 808 | ||
| 809 | + if (with_digest) { | ||
| 810 | + srs_assert(size == 1536); | ||
| 811 | + } else { | ||
| 812 | + srs_assert(size == 1504); | ||
| 813 | + } | ||
| 814 | + | ||
| 797 | SrsStream stream; | 815 | SrsStream stream; |
| 798 | 816 | ||
| 799 | if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { | 817 | if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { |
| @@ -846,8 +864,15 @@ namespace _srs_internal | @@ -846,8 +864,15 @@ namespace _srs_internal | ||
| 846 | return payload->get_digest(); | 864 | return payload->get_digest(); |
| 847 | } | 865 | } |
| 848 | 866 | ||
| 867 | + char* c1s1::get_key() | ||
| 868 | + { | ||
| 869 | + srs_assert(payload != NULL); | ||
| 870 | + return payload->get_key(); | ||
| 871 | + } | ||
| 872 | + | ||
| 849 | int c1s1::dump(char* _c1s1, int size) | 873 | int c1s1::dump(char* _c1s1, int size) |
| 850 | { | 874 | { |
| 875 | + srs_assert(size == 1536); | ||
| 851 | srs_assert(payload != NULL); | 876 | srs_assert(payload != NULL); |
| 852 | return payload->dump(this, _c1s1, size); | 877 | return payload->dump(this, _c1s1, size); |
| 853 | } | 878 | } |
| @@ -205,11 +205,16 @@ namespace _srs_internal | @@ -205,11 +205,16 @@ namespace _srs_internal | ||
| 205 | */ | 205 | */ |
| 206 | virtual srs_schema_type schema() = 0; | 206 | virtual srs_schema_type schema() = 0; |
| 207 | /** | 207 | /** |
| 208 | - * get the digest key. | 208 | + * get the digest. |
| 209 | */ | 209 | */ |
| 210 | virtual char* get_digest(); | 210 | virtual char* get_digest(); |
| 211 | /** | 211 | /** |
| 212 | + * get the key. | ||
| 213 | + */ | ||
| 214 | + virtual char* get_key(); | ||
| 215 | + /** | ||
| 212 | * copy to bytes. | 216 | * copy to bytes. |
| 217 | + * @param size must be 1536. | ||
| 213 | */ | 218 | */ |
| 214 | virtual int dump(c1s1* owner, char* _c1s1, int size); | 219 | virtual int dump(c1s1* owner, char* _c1s1, int size); |
| 215 | /** | 220 | /** |
| @@ -246,15 +251,31 @@ namespace _srs_internal | @@ -246,15 +251,31 @@ namespace _srs_internal | ||
| 246 | * server: validate the parsed s1 schema | 251 | * server: validate the parsed s1 schema |
| 247 | */ | 252 | */ |
| 248 | virtual int s1_validate_digest(c1s1* owner, bool& is_valid); | 253 | virtual int s1_validate_digest(c1s1* owner, bool& is_valid); |
| 249 | - protected: | 254 | + public: |
| 255 | + /** | ||
| 256 | + * calc the digest for c1 | ||
| 257 | + */ | ||
| 250 | virtual int calc_c1_digest(c1s1* owner, char*& c1_digest); | 258 | virtual int calc_c1_digest(c1s1* owner, char*& c1_digest); |
| 259 | + /** | ||
| 260 | + * calc the digest for s1 | ||
| 261 | + */ | ||
| 251 | virtual int calc_s1_digest(c1s1* owner, char*& s1_digest); | 262 | virtual int calc_s1_digest(c1s1* owner, char*& s1_digest); |
| 252 | /** | 263 | /** |
| 253 | * copy whole c1s1 to bytes. | 264 | * copy whole c1s1 to bytes. |
| 265 | + * @param size must always be 1536 with digest, and 1504 without digest. | ||
| 254 | */ | 266 | */ |
| 255 | virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest) = 0; | 267 | virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest) = 0; |
| 268 | + /** | ||
| 269 | + * copy time and version to stream. | ||
| 270 | + */ | ||
| 256 | virtual void copy_time_version(SrsStream* stream, c1s1* owner); | 271 | virtual void copy_time_version(SrsStream* stream, c1s1* owner); |
| 272 | + /** | ||
| 273 | + * copy key to stream. | ||
| 274 | + */ | ||
| 257 | virtual void copy_key(SrsStream* stream); | 275 | virtual void copy_key(SrsStream* stream); |
| 276 | + /** | ||
| 277 | + * copy digest to stream. | ||
| 278 | + */ | ||
| 258 | virtual void copy_digest(SrsStream* stream, bool with_digest); | 279 | virtual void copy_digest(SrsStream* stream, bool with_digest); |
| 259 | }; | 280 | }; |
| 260 | 281 | ||
| @@ -271,7 +292,7 @@ namespace _srs_internal | @@ -271,7 +292,7 @@ namespace _srs_internal | ||
| 271 | public: | 292 | public: |
| 272 | virtual srs_schema_type schema(); | 293 | virtual srs_schema_type schema(); |
| 273 | virtual int parse(char* _c1s1, int size); | 294 | virtual int parse(char* _c1s1, int size); |
| 274 | - private: | 295 | + public: |
| 275 | virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); | 296 | virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); |
| 276 | }; | 297 | }; |
| 277 | 298 | ||
| @@ -288,7 +309,7 @@ namespace _srs_internal | @@ -288,7 +309,7 @@ namespace _srs_internal | ||
| 288 | public: | 309 | public: |
| 289 | virtual srs_schema_type schema(); | 310 | virtual srs_schema_type schema(); |
| 290 | virtual int parse(char* _c1s1, int size); | 311 | virtual int parse(char* _c1s1, int size); |
| 291 | - private: | 312 | + public: |
| 292 | virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); | 313 | virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); |
| 293 | }; | 314 | }; |
| 294 | 315 | ||
| @@ -326,13 +347,19 @@ namespace _srs_internal | @@ -326,13 +347,19 @@ namespace _srs_internal | ||
| 326 | * get the digest key. | 347 | * get the digest key. |
| 327 | */ | 348 | */ |
| 328 | virtual char* get_digest(); | 349 | virtual char* get_digest(); |
| 350 | + /** | ||
| 351 | + * get the key. | ||
| 352 | + */ | ||
| 353 | + virtual char* get_key(); | ||
| 329 | public: | 354 | public: |
| 330 | /** | 355 | /** |
| 331 | * copy to bytes. | 356 | * copy to bytes. |
| 357 | + * @param size, must always be 1536. | ||
| 332 | */ | 358 | */ |
| 333 | virtual int dump(char* _c1s1, int size); | 359 | virtual int dump(char* _c1s1, int size); |
| 334 | /** | 360 | /** |
| 335 | * server: parse the c1s1, discovery the key and digest by schema. | 361 | * server: parse the c1s1, discovery the key and digest by schema. |
| 362 | + * @param size, must always be 1536. | ||
| 336 | * use the c1_validate_digest() to valid the digest of c1. | 363 | * use the c1_validate_digest() to valid the digest of c1. |
| 337 | * use the s1_validate_digest() to valid the digest of s1. | 364 | * use the s1_validate_digest() to valid the digest of s1. |
| 338 | */ | 365 | */ |
| @@ -409,10 +436,12 @@ namespace _srs_internal | @@ -409,10 +436,12 @@ namespace _srs_internal | ||
| 409 | public: | 436 | public: |
| 410 | /** | 437 | /** |
| 411 | * copy to bytes. | 438 | * copy to bytes. |
| 439 | + * @param size, must always be 1536. | ||
| 412 | */ | 440 | */ |
| 413 | virtual int dump(char* _c2s2, int size); | 441 | virtual int dump(char* _c2s2, int size); |
| 414 | /** | 442 | /** |
| 415 | * parse the c2s2 | 443 | * parse the c2s2 |
| 444 | + * @param size, must always be 1536. | ||
| 416 | */ | 445 | */ |
| 417 | virtual int parse(char* _c2s2, int size); | 446 | virtual int parse(char* _c2s2, int size); |
| 418 | public: | 447 | public: |
| @@ -285,14 +285,15 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1) | @@ -285,14 +285,15 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1) | ||
| 285 | c1s1 c1; | 285 | c1s1 c1; |
| 286 | 286 | ||
| 287 | // the schema of data must be schema0: key-digest. | 287 | // the schema of data must be schema0: key-digest. |
| 288 | - ASSERT_EQ(ERROR_SUCCESS, c1.parse(c0c1 + 1, srs_schema0)); | 288 | + ASSERT_EQ(ERROR_SUCCESS, c1.parse(c0c1 + 1, 1536, srs_schema0)); |
| 289 | EXPECT_EQ((int32_t)0x000f64d0, c1.time); | 289 | EXPECT_EQ((int32_t)0x000f64d0, c1.time); |
| 290 | EXPECT_EQ((int32_t)0x80000702, c1.version); | 290 | EXPECT_EQ((int32_t)0x80000702, c1.version); |
| 291 | 291 | ||
| 292 | // manually validate the c1 | 292 | // manually validate the c1 |
| 293 | // @see: calc_c1_digest | 293 | // @see: calc_c1_digest |
| 294 | - char* c1s1_joined_bytes = srs_bytes_join_schema0(c1.time, c1.version, &c1.block0.key, &c1.block1.digest); | 294 | + char* c1s1_joined_bytes = new char[1536 -32]; |
| 295 | SrsAutoFree(char, c1s1_joined_bytes); | 295 | SrsAutoFree(char, c1s1_joined_bytes); |
| 296 | + ASSERT_EQ(ERROR_SUCCESS, c1.payload->copy_to(&c1, c1s1_joined_bytes, 1536 - 32, false)); | ||
| 296 | 297 | ||
| 297 | bool is_valid; | 298 | bool is_valid; |
| 298 | ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); | 299 | ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); |
| @@ -304,14 +305,14 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1) | @@ -304,14 +305,14 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1) | ||
| 304 | (char)0xf4, (char)0x21, (char)0xa8, (char)0x65, (char)0xce, (char)0xf8, (char)0x8e, (char)0xcc, (char)0x16, (char)0x1e, (char)0xbb, (char)0xd8, (char)0x0e, (char)0xcb, (char)0xd2, (char)0x48, (char)0x37, (char)0xaf, (char)0x4e, (char)0x67, (char)0x45, (char)0xf1, (char)0x79, (char)0x69, (char)0xd2, (char)0xee, (char)0xa4, (char)0xb5, (char)0x01, (char)0xbf, (char)0x57, (char)0x0f, (char)0x68, (char)0x37, (char)0xbe, (char)0x4e, (char)0xff, (char)0xc9, (char)0xb9, (char)0x92, (char)0x23, (char)0x06, (char)0x75, (char)0xa0, (char)0x42, (char)0xe4, (char)0x0a, (char)0x30, | 305 | (char)0xf4, (char)0x21, (char)0xa8, (char)0x65, (char)0xce, (char)0xf8, (char)0x8e, (char)0xcc, (char)0x16, (char)0x1e, (char)0xbb, (char)0xd8, (char)0x0e, (char)0xcb, (char)0xd2, (char)0x48, (char)0x37, (char)0xaf, (char)0x4e, (char)0x67, (char)0x45, (char)0xf1, (char)0x79, (char)0x69, (char)0xd2, (char)0xee, (char)0xa4, (char)0xb5, (char)0x01, (char)0xbf, (char)0x57, (char)0x0f, (char)0x68, (char)0x37, (char)0xbe, (char)0x4e, (char)0xff, (char)0xc9, (char)0xb9, (char)0x92, (char)0x23, (char)0x06, (char)0x75, (char)0xa0, (char)0x42, (char)0xe4, (char)0x0a, (char)0x30, |
| 305 | (char)0xf0, (char)0xaf, (char)0xb0, (char)0x54, (char)0x88, (char)0x7c, (char)0xc0, (char)0xc1, (char)0x0c, (char)0x6d, (char)0x01, (char)0x36, (char)0x63, (char)0xf3, (char)0x3d, (char)0xbc, (char)0x72, (char)0xf6, (char)0x96, (char)0xc8, (char)0x87, (char)0xab, (char)0x8b, (char)0x0c, (char)0x91, (char)0x2f, (char)0x42, (char)0x2a, (char)0x11, (char)0xf6, (char)0x2d, (char)0x5e | 306 | (char)0xf0, (char)0xaf, (char)0xb0, (char)0x54, (char)0x88, (char)0x7c, (char)0xc0, (char)0xc1, (char)0x0c, (char)0x6d, (char)0x01, (char)0x36, (char)0x63, (char)0xf3, (char)0x3d, (char)0xbc, (char)0x72, (char)0xf6, (char)0x96, (char)0xc8, (char)0x87, (char)0xab, (char)0x8b, (char)0x0c, (char)0x91, (char)0x2f, (char)0x42, (char)0x2a, (char)0x11, (char)0xf6, (char)0x2d, (char)0x5e |
| 306 | }; | 307 | }; |
| 307 | - EXPECT_TRUE(srs_bytes_equals(c1.block0.key.key, key, 128)); | 308 | + EXPECT_TRUE(srs_bytes_equals(c1.get_key(), key, 128)); |
| 308 | 309 | ||
| 309 | // 32bytes digest | 310 | // 32bytes digest |
| 310 | char digest[] = { | 311 | char digest[] = { |
| 311 | (char)0x6c, (char)0x96, (char)0x9f, (char)0x26, (char)0xeb, (char)0xdc, (char)0x61, (char)0xc4, (char)0x8f, (char)0xd3, (char)0x2b, (char)0x81, (char)0x86, (char)0x6c, (char)0x9c, (char)0xc2, | 312 | (char)0x6c, (char)0x96, (char)0x9f, (char)0x26, (char)0xeb, (char)0xdc, (char)0x61, (char)0xc4, (char)0x8f, (char)0xd3, (char)0x2b, (char)0x81, (char)0x86, (char)0x6c, (char)0x9c, (char)0xc2, |
| 312 | (char)0xb1, (char)0xb5, (char)0xbc, (char)0xa6, (char)0xd6, (char)0xd6, (char)0x1d, (char)0xce, (char)0x93, (char)0x78, (char)0xb3, (char)0xec, (char)0xa8, (char)0x64, (char)0x19, (char)0x13 | 313 | (char)0xb1, (char)0xb5, (char)0xbc, (char)0xa6, (char)0xd6, (char)0xd6, (char)0x1d, (char)0xce, (char)0x93, (char)0x78, (char)0xb3, (char)0xec, (char)0xa8, (char)0x64, (char)0x19, (char)0x13 |
| 313 | }; | 314 | }; |
| 314 | - EXPECT_TRUE(srs_bytes_equals(c1.block1.digest.digest, digest, 32)); | 315 | + EXPECT_TRUE(srs_bytes_equals(c1.get_digest(), digest, 32)); |
| 315 | } | 316 | } |
| 316 | 317 | ||
| 317 | VOID TEST(ProtocolHandshakeTest, ComplexHandshake) | 318 | VOID TEST(ProtocolHandshakeTest, ComplexHandshake) |
| @@ -348,22 +349,22 @@ VOID TEST(ProtocolHandshakeTest, ComplexHandshake) | @@ -348,22 +349,22 @@ VOID TEST(ProtocolHandshakeTest, ComplexHandshake) | ||
| 348 | bool is_valid; | 349 | bool is_valid; |
| 349 | 350 | ||
| 350 | c1s1 c1; | 351 | c1s1 c1; |
| 351 | - ASSERT_EQ(ERROR_SUCCESS, c1.parse(hs_bytes->c0c1 + 1, srs_schema0)); | 352 | + ASSERT_EQ(ERROR_SUCCESS, c1.parse(hs_bytes->c0c1 + 1, 1536, srs_schema0)); |
| 352 | ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); | 353 | ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); |
| 353 | ASSERT_TRUE(is_valid); | 354 | ASSERT_TRUE(is_valid); |
| 354 | 355 | ||
| 355 | c1s1 s1; | 356 | c1s1 s1; |
| 356 | - ASSERT_EQ(ERROR_SUCCESS, s1.parse(hs_bytes->s0s1s2 + 1, c1.schema)); | 357 | + ASSERT_EQ(ERROR_SUCCESS, s1.parse(hs_bytes->s0s1s2 + 1, 1536, c1.schema())); |
| 357 | ASSERT_EQ(ERROR_SUCCESS, s1.s1_validate_digest(is_valid)); | 358 | ASSERT_EQ(ERROR_SUCCESS, s1.s1_validate_digest(is_valid)); |
| 358 | ASSERT_TRUE(is_valid); | 359 | ASSERT_TRUE(is_valid); |
| 359 | 360 | ||
| 360 | c2s2 c2; | 361 | c2s2 c2; |
| 361 | - c2.parse(hs_bytes->c2); | 362 | + c2.parse(hs_bytes->c2, 1536); |
| 362 | ASSERT_EQ(ERROR_SUCCESS, c2.c2_validate(&s1, is_valid)); | 363 | ASSERT_EQ(ERROR_SUCCESS, c2.c2_validate(&s1, is_valid)); |
| 363 | ASSERT_TRUE(is_valid); | 364 | ASSERT_TRUE(is_valid); |
| 364 | 365 | ||
| 365 | c2s2 s2; | 366 | c2s2 s2; |
| 366 | - s2.parse(hs_bytes->s0s1s2 + 1 + 1536); | 367 | + s2.parse(hs_bytes->s0s1s2 + 1 + 1536, 1536); |
| 367 | ASSERT_EQ(ERROR_SUCCESS, s2.s2_validate(&c1, is_valid)); | 368 | ASSERT_EQ(ERROR_SUCCESS, s2.s2_validate(&c1, is_valid)); |
| 368 | ASSERT_TRUE(is_valid); | 369 | ASSERT_TRUE(is_valid); |
| 369 | } | 370 | } |
-
请 注册 或 登录 后发表评论