// parse digest block from c1s1.
 // if created, user must free it by srs_digest_block_free
 // @c1s1_digest_bytes the digest start bytes, maybe c1s1 or c1s1+764
 int srs_digest_block_parse(digest_block* digest, char* c1s1_digest_bytes)
 {
     int ret = ERROR_SUCCESS;
 
     char* pp = c1s1_digest_bytes;
     
     digest->offset = __srs_stream_read_4bytes(pp);
     pp += sizeof(int32_t);
     
     digest->random0 = NULL;
     digest->random1 = NULL;
     
     int offset = srs_digest_block_get_offset(digest);
     srs_assert(offset >= 0);
     
     digest->random0_size = offset;
     if (digest->random0_size > 0) {
         digest->random0 = new char[digest->random0_size];
         memcpy(digest->random0, pp, digest->random0_size);
     }
     pp += digest->random0_size;
     
     memcpy(digest->digest, pp, sizeof(digest->digest));
     pp += sizeof(digest->digest);
     
     digest->random1_size = 764 - 4 - offset - 32;
     if (digest->random1_size > 0) {
         digest->random1 = new char[digest->random1_size];
         memcpy(digest->random1, pp, digest->random1_size);
     }
     
     return ret;
 }
 // create new digest block data.
 // if created, user must free it by srs_digest_block_free
 void srs_digest_block_init(digest_block* digest)
 {
     digest->offset = (int32_t)rand();
     digest->random0 = NULL;
     digest->random1 = NULL;
     
     int offset = srs_digest_block_get_offset(digest);
     srs_assert(offset >= 0);
     
     digest->random0_size = offset;
     if (digest->random0_size > 0) {
         digest->random0 = new char[digest->random0_size];
         srs_random_generate(digest->random0, digest->random0_size);
         snprintf(digest->random0, digest->random0_size, "%s", RTMP_SIG_SRS_HANDSHAKE);
     }
     
     srs_random_generate(digest->digest, sizeof(digest->digest));
     
     digest->random1_size = 764 - 4 - offset - 32;
     if (digest->random1_size > 0) {
         digest->random1 = new char[digest->random1_size];
         srs_random_generate(digest->random1, digest->random1_size);
         snprintf(digest->random1, digest->random1_size, "%s", RTMP_SIG_SRS_HANDSHAKE);
     }
 }