Skip to content

Commit 9cb18ba

Browse files
authored
MINOR refactor of DEK creation (#275)
* MINOR refactor of DEK creation * Minor fix
1 parent 8abce37 commit 9cb18ba

File tree

1 file changed

+29
-15
lines changed

1 file changed

+29
-15
lines changed

schemaregistry/rules/encryption/encrypt-executor.ts

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -388,21 +388,14 @@ export class FieldEncryptionExecutorTransform implements FieldTransform {
388388
encryptedDek = await kmsClient.encrypt(rawDek)
389389
}
390390
const newVersion = isExpired ? dek!.version! + 1 : null
391-
const newDekId: DekId = {
392-
kekName: this.kekName,
393-
subject: ctx.subject,
394-
version: newVersion,
395-
algorithm: this.cryptor.dekFormat,
396-
deleted: isRead,
397-
}
398-
// encryptedDek may be passed as null if kek is shared
399-
dek = await this.storeDekToRegistry(newDekId, encryptedDek)
400-
if (dek == null) {
401-
// handle conflicts (409)
402-
dek = await this.retrieveDekFromRegistry(dekId)
403-
}
404-
if (dek == null) {
405-
throw new RuleError(`no dek found for ${this.kekName} during produce`)
391+
try {
392+
dek = await this.createDek(dekId, newVersion, encryptedDek)
393+
} catch (err) {
394+
if (dek == null) {
395+
throw err;
396+
}
397+
console.warn("failed to create dek for %s, subject %s, version %d, using existing dek",
398+
this.kekName, ctx.subject, newVersion)
406399
}
407400
}
408401

@@ -419,6 +412,27 @@ export class FieldEncryptionExecutorTransform implements FieldTransform {
419412
return dek
420413
}
421414

415+
async createDek(dekId: DekId, newVersion: number | null, encryptedDek: Buffer | null): Promise<Dek> {
416+
const newDekId: DekId = {
417+
kekName: dekId.kekName,
418+
subject: dekId.subject,
419+
version: newVersion,
420+
algorithm: dekId.algorithm,
421+
deleted: dekId.deleted,
422+
}
423+
// encryptedDek may be passed as null if kek is shared
424+
let dek = await this.storeDekToRegistry(newDekId, encryptedDek)
425+
if (dek == null) {
426+
// handle conflicts (409)
427+
dek = await this.retrieveDekFromRegistry(dekId)
428+
}
429+
if (dek == null) {
430+
throw new RuleError(`no dek found for ${dekId.kekName} during produce`)
431+
}
432+
433+
return dek
434+
}
435+
422436
async retrieveDekFromRegistry(key: DekId): Promise<Dek | null> {
423437
try {
424438
let dek: Dek

0 commit comments

Comments
 (0)