Skip to content

Commit 69d9984

Browse files
authored
MONGOCRYPT-778 Split derivation of text data-derived token off of data+contention derived token (#966)
1 parent f9e5e0e commit 69d9984

File tree

6 files changed

+176
-109
lines changed

6 files changed

+176
-109
lines changed

src/mc-tokens-private.h

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -197,38 +197,56 @@ DECL_TOKEN_TYPE(mc_ServerTextSuffixToken,
197197
DECL_TOKEN_TYPE(mc_ServerTextPrefixToken,
198198
const mc_ServerTokenDerivationLevel1Token_t *serverTokenDerivationLevel1Token);
199199

200-
DECL_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
200+
DECL_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataToken,
201201
const mc_EDCTextExactToken_t *edcTextExactToken,
202-
const _mongocrypt_buffer_t *v,
202+
const _mongocrypt_buffer_t *v);
203+
DECL_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataToken,
204+
const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
205+
const _mongocrypt_buffer_t *v);
206+
DECL_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataToken,
207+
const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
208+
const _mongocrypt_buffer_t *v);
209+
DECL_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataToken,
210+
const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
211+
const _mongocrypt_buffer_t *v);
212+
213+
DECL_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
214+
const mc_EDCTextExactDerivedFromDataToken_t *edcTextExactToken,
203215
uint64_t u);
204216
DECL_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
205-
const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
206-
const _mongocrypt_buffer_t *v,
217+
const mc_EDCTextSubstringDerivedFromDataToken_t *edcTextSubstringToken,
207218
uint64_t u);
208219
DECL_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
209-
const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
210-
const _mongocrypt_buffer_t *v,
220+
const mc_EDCTextSuffixDerivedFromDataToken_t *edcTextSuffixToken,
211221
uint64_t u);
212222
DECL_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
213-
const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
214-
const _mongocrypt_buffer_t *v,
223+
const mc_EDCTextPrefixDerivedFromDataToken_t *edcTextPrefixToken,
215224
uint64_t u);
216225

217-
DECL_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
226+
DECL_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataToken,
218227
const mc_ESCTextExactToken_t *escTextExactToken,
219-
const _mongocrypt_buffer_t *v,
228+
const _mongocrypt_buffer_t *v);
229+
DECL_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataToken,
230+
const mc_ESCTextSubstringToken_t *escTextSubstringToken,
231+
const _mongocrypt_buffer_t *v);
232+
DECL_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataToken,
233+
const mc_ESCTextSuffixToken_t *escTextSuffixToken,
234+
const _mongocrypt_buffer_t *v);
235+
DECL_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataToken,
236+
const mc_ESCTextPrefixToken_t *escTextPrefixToken,
237+
const _mongocrypt_buffer_t *v);
238+
239+
DECL_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
240+
const mc_ESCTextExactDerivedFromDataToken_t *escTextExactToken,
220241
uint64_t u);
221242
DECL_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
222-
const mc_ESCTextSubstringToken_t *escTextSubstringToken,
223-
const _mongocrypt_buffer_t *v,
243+
const mc_ESCTextSubstringDerivedFromDataToken_t *escTextSubstringToken,
224244
uint64_t u);
225245
DECL_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
226-
const mc_ESCTextSuffixToken_t *escTextSuffixToken,
227-
const _mongocrypt_buffer_t *v,
246+
const mc_ESCTextSuffixDerivedFromDataToken_t *escTextSuffixToken,
228247
uint64_t u);
229248
DECL_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
230-
const mc_ESCTextPrefixToken_t *escTextPrefixToken,
231-
const _mongocrypt_buffer_t *v,
249+
const mc_ESCTextPrefixDerivedFromDataToken_t *escTextPrefixToken,
232250
uint64_t u);
233251

234252
DECL_TOKEN_TYPE(mc_ServerTextExactDerivedFromDataToken,

src/mc-tokens.c

Lines changed: 65 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -233,97 +233,89 @@ IMPL_TOKEN_NEW_CONST(mc_ServerTextPrefixToken,
233233
mc_ServerTokenDerivationLevel1Token_get(serverTokenDerivationLevel1Token),
234234
TEXT_PREFIX_ID)
235235

236-
#define IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(Name, Key, BufferArg, UintArg) \
237-
{ \
238-
BSON_CONCAT(Name, _t) *t = bson_malloc(sizeof(BSON_CONCAT(Name, _t))); \
239-
_mongocrypt_buffer_t tmp; \
240-
_mongocrypt_buffer_init(&tmp); \
241-
_mongocrypt_buffer_resize(&tmp, MONGOCRYPT_HMAC_SHA256_LEN); \
242-
_mongocrypt_buffer_init(&t->data); \
243-
_mongocrypt_buffer_resize(&t->data, MONGOCRYPT_HMAC_SHA256_LEN); \
244-
if (!_mongocrypt_hmac_sha_256(crypto, Key, BufferArg, &tmp, status)) { \
245-
BSON_CONCAT(Name, _destroy)(t); \
246-
_mongocrypt_buffer_cleanup(&tmp); \
247-
return NULL; \
248-
} \
249-
_mongocrypt_buffer_t uint_arg; \
250-
_mongocrypt_buffer_copy_from_uint64_le(&uint_arg, UintArg); \
251-
if (!_mongocrypt_hmac_sha_256(crypto, &tmp, &uint_arg, &t->data, status)) { \
252-
BSON_CONCAT(Name, _destroy)(t); \
253-
_mongocrypt_buffer_cleanup(&tmp); \
254-
_mongocrypt_buffer_cleanup(&uint_arg); \
255-
return NULL; \
256-
} \
257-
_mongocrypt_buffer_cleanup(&tmp); \
258-
_mongocrypt_buffer_cleanup(&uint_arg); \
259-
return t; \
260-
}
236+
DEF_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataToken,
237+
const mc_EDCTextExactToken_t *edcTextExactToken,
238+
const _mongocrypt_buffer_t *v)
239+
IMPL_TOKEN_NEW(mc_EDCTextExactDerivedFromDataToken, mc_EDCTextExactToken_get(edcTextExactToken), v)
240+
DEF_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataToken,
241+
const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
242+
const _mongocrypt_buffer_t *v)
243+
IMPL_TOKEN_NEW(mc_EDCTextSubstringDerivedFromDataToken, mc_EDCTextSubstringToken_get(edcTextSubstringToken), v)
244+
DEF_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataToken,
245+
const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
246+
const _mongocrypt_buffer_t *v)
247+
IMPL_TOKEN_NEW(mc_EDCTextSuffixDerivedFromDataToken, mc_EDCTextSuffixToken_get(edcTextSuffixToken), v)
248+
DEF_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataToken,
249+
const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
250+
const _mongocrypt_buffer_t *v)
251+
IMPL_TOKEN_NEW(mc_EDCTextPrefixDerivedFromDataToken, mc_EDCTextPrefixToken_get(edcTextPrefixToken), v)
261252

262253
DEF_TOKEN_TYPE(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
263-
const mc_EDCTextExactToken_t *edcTextExactToken,
264-
const _mongocrypt_buffer_t *v,
254+
const mc_EDCTextExactDerivedFromDataToken_t *edcTextExactToken,
265255
uint64_t u)
266-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
267-
mc_EDCTextExactToken_get(edcTextExactToken),
268-
v,
269-
u)
256+
IMPL_TOKEN_NEW_CONST(mc_EDCTextExactDerivedFromDataTokenAndContentionFactorToken,
257+
mc_EDCTextExactDerivedFromDataToken_get(edcTextExactToken),
258+
u)
270259
DEF_TOKEN_TYPE(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
271-
const mc_EDCTextSubstringToken_t *edcTextSubstringToken,
272-
const _mongocrypt_buffer_t *v,
260+
const mc_EDCTextSubstringDerivedFromDataToken_t *edcTextSubstringToken,
273261
uint64_t u)
274-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
275-
mc_EDCTextSubstringToken_get(edcTextSubstringToken),
276-
v,
277-
u)
262+
IMPL_TOKEN_NEW_CONST(mc_EDCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
263+
mc_EDCTextSubstringDerivedFromDataToken_get(edcTextSubstringToken),
264+
u)
278265
DEF_TOKEN_TYPE(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
279-
const mc_EDCTextSuffixToken_t *edcTextSuffixToken,
280-
const _mongocrypt_buffer_t *v,
266+
const mc_EDCTextSuffixDerivedFromDataToken_t *edcTextSuffixToken,
281267
uint64_t u)
282-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
283-
mc_EDCTextSuffixToken_get(edcTextSuffixToken),
284-
v,
285-
u)
268+
IMPL_TOKEN_NEW_CONST(mc_EDCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
269+
mc_EDCTextSuffixDerivedFromDataToken_get(edcTextSuffixToken),
270+
u)
286271
DEF_TOKEN_TYPE(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
287-
const mc_EDCTextPrefixToken_t *edcTextPrefixToken,
288-
const _mongocrypt_buffer_t *v,
272+
const mc_EDCTextPrefixDerivedFromDataToken_t *edcTextPrefixToken,
289273
uint64_t u)
290-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
291-
mc_EDCTextPrefixToken_get(edcTextPrefixToken),
292-
v,
293-
u)
274+
IMPL_TOKEN_NEW_CONST(mc_EDCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
275+
mc_EDCTextPrefixDerivedFromDataToken_get(edcTextPrefixToken),
276+
u)
294277

295-
DEF_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
278+
DEF_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataToken,
296279
const mc_ESCTextExactToken_t *escTextExactToken,
297-
const _mongocrypt_buffer_t *v,
280+
const _mongocrypt_buffer_t *v)
281+
IMPL_TOKEN_NEW(mc_ESCTextExactDerivedFromDataToken, mc_ESCTextExactToken_get(escTextExactToken), v)
282+
DEF_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataToken,
283+
const mc_ESCTextSubstringToken_t *escTextSubstringToken,
284+
const _mongocrypt_buffer_t *v)
285+
IMPL_TOKEN_NEW(mc_ESCTextSubstringDerivedFromDataToken, mc_ESCTextSubstringToken_get(escTextSubstringToken), v)
286+
DEF_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataToken,
287+
const mc_ESCTextSuffixToken_t *escTextSuffixToken,
288+
const _mongocrypt_buffer_t *v)
289+
IMPL_TOKEN_NEW(mc_ESCTextSuffixDerivedFromDataToken, mc_ESCTextSuffixToken_get(escTextSuffixToken), v)
290+
DEF_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataToken,
291+
const mc_ESCTextPrefixToken_t *escTextPrefixToken,
292+
const _mongocrypt_buffer_t *v)
293+
IMPL_TOKEN_NEW(mc_ESCTextPrefixDerivedFromDataToken, mc_ESCTextPrefixToken_get(escTextPrefixToken), v)
294+
295+
DEF_TOKEN_TYPE(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
296+
const mc_ESCTextExactDerivedFromDataToken_t *escTextExactToken,
298297
uint64_t u)
299-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
300-
mc_ESCTextExactToken_get(escTextExactToken),
301-
v,
302-
u)
298+
IMPL_TOKEN_NEW_CONST(mc_ESCTextExactDerivedFromDataTokenAndContentionFactorToken,
299+
mc_ESCTextExactDerivedFromDataToken_get(escTextExactToken),
300+
u)
303301
DEF_TOKEN_TYPE(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
304-
const mc_ESCTextSubstringToken_t *escTextSubstringToken,
305-
const _mongocrypt_buffer_t *v,
302+
const mc_ESCTextSubstringDerivedFromDataToken_t *escTextSubstringToken,
306303
uint64_t u)
307-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
308-
mc_ESCTextSubstringToken_get(escTextSubstringToken),
309-
v,
310-
u)
304+
IMPL_TOKEN_NEW_CONST(mc_ESCTextSubstringDerivedFromDataTokenAndContentionFactorToken,
305+
mc_ESCTextSubstringDerivedFromDataToken_get(escTextSubstringToken),
306+
u)
311307
DEF_TOKEN_TYPE(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
312-
const mc_ESCTextSuffixToken_t *escTextSuffixToken,
313-
const _mongocrypt_buffer_t *v,
308+
const mc_ESCTextSuffixDerivedFromDataToken_t *escTextSuffixToken,
314309
uint64_t u)
315-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
316-
mc_ESCTextSuffixToken_get(escTextSuffixToken),
317-
v,
318-
u)
310+
IMPL_TOKEN_NEW_CONST(mc_ESCTextSuffixDerivedFromDataTokenAndContentionFactorToken,
311+
mc_ESCTextSuffixDerivedFromDataToken_get(escTextSuffixToken),
312+
u)
319313
DEF_TOKEN_TYPE(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
320-
const mc_ESCTextPrefixToken_t *escTextPrefixToken,
321-
const _mongocrypt_buffer_t *v,
314+
const mc_ESCTextPrefixDerivedFromDataToken_t *escTextPrefixToken,
322315
uint64_t u)
323-
IMPL_TOKEN_NEW_FROM_DATA_AND_CONTENTION(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
324-
mc_ESCTextPrefixToken_get(escTextPrefixToken),
325-
v,
326-
u)
316+
IMPL_TOKEN_NEW_CONST(mc_ESCTextPrefixDerivedFromDataTokenAndContentionFactorToken,
317+
mc_ESCTextPrefixDerivedFromDataToken_get(escTextPrefixToken),
318+
u)
327319

328320
DEF_TOKEN_TYPE(mc_ServerTextExactDerivedFromDataToken,
329321
const mc_ServerTextExactToken_t *serverTextExactToken,

0 commit comments

Comments
 (0)