@@ -33,6 +33,7 @@ void mc_FLE2TagAndEncryptedMetadataBlock_init(mc_FLE2TagAndEncryptedMetadataBloc
3333void mc_FLE2TagAndEncryptedMetadataBlock_cleanup (mc_FLE2TagAndEncryptedMetadataBlock_t * metadata ) {
3434 BSON_ASSERT_PARAM (metadata );
3535
36+ _mongocrypt_buffer_cleanup (& metadata -> rawBlock );
3637 _mongocrypt_buffer_cleanup (& metadata -> encryptedCount );
3738 _mongocrypt_buffer_cleanup (& metadata -> tag );
3839 _mongocrypt_buffer_cleanup (& metadata -> encryptedZeros );
@@ -54,11 +55,16 @@ bool mc_FLE2TagAndEncryptedMetadataBlock_parse(mc_FLE2TagAndEncryptedMetadataBlo
5455
5556 mc_FLE2TagAndEncryptedMetadataBlock_init (metadata );
5657
57- CHECK_AND_RETURN (mc_reader_read_buffer (& reader , & metadata -> encryptedCount , kFieldLen , status ));
58+ CHECK_AND_RETURN (mc_reader_read_buffer (& reader , & metadata -> rawBlock , kMetadataLen , status ));
5859
59- CHECK_AND_RETURN (mc_reader_read_buffer (& reader , & metadata -> tag , kFieldLen , status ));
60+ uint64_t offset = 0 ;
61+ _mongocrypt_buffer_from_data (& metadata -> encryptedCount , metadata -> rawBlock .data + offset , kFieldLen );
6062
61- CHECK_AND_RETURN (mc_reader_read_buffer (& reader , & metadata -> encryptedZeros , kFieldLen , status ));
63+ offset += kFieldLen ;
64+ _mongocrypt_buffer_from_data (& metadata -> tag , metadata -> rawBlock .data + offset , kFieldLen );
65+
66+ offset += kFieldLen ;
67+ _mongocrypt_buffer_from_data (& metadata -> encryptedZeros , metadata -> rawBlock .data + offset , kFieldLen );
6268
6369 return true;
6470}
@@ -72,12 +78,7 @@ bool mc_FLE2TagAndEncryptedMetadataBlock_serialize(const mc_FLE2TagAndEncryptedM
7278 _mongocrypt_buffer_resize (buf , kMetadataLen );
7379 mc_writer_t writer ;
7480 mc_writer_init_from_buffer (& writer , buf , __func__ );
75-
76- CHECK_AND_RETURN (mc_writer_write_buffer (& writer , & metadata -> encryptedCount , kFieldLen , status ));
77-
78- CHECK_AND_RETURN (mc_writer_write_buffer (& writer , & metadata -> tag , kFieldLen , status ));
79-
80- CHECK_AND_RETURN (mc_writer_write_buffer (& writer , & metadata -> encryptedZeros , kFieldLen , status ));
81+ CHECK_AND_RETURN (mc_writer_write_buffer (& writer , & metadata -> rawBlock , kMetadataLen , status ));
8182
8283 return true;
8384}
@@ -92,6 +93,7 @@ bool mc_FLE2TagAndEncryptedMetadataBlock_serialize(const mc_FLE2TagAndEncryptedM
9293
9394bool mc_FLE2TagAndEncryptedMetadataBlock_validate (const mc_FLE2TagAndEncryptedMetadataBlock_t * metadata ,
9495 mongocrypt_status_t * status ) {
96+ CHECK (metadata -> rawBlock .len == kMetadataLen , "Length of metadata block was unexpected" );
9597 CHECK (metadata -> encryptedCount .len == kFieldLen , "Length of encrypted count was unexpected" );
9698 CHECK (metadata -> tag .len == kFieldLen , "Length of tag was unexpected" );
9799 CHECK (metadata -> encryptedZeros .len == kFieldLen , "Length of encrypted zeros was unexpected" );
0 commit comments