@@ -44,10 +44,11 @@ func init() {
4444// Register registers the encryption rule executor
4545func Register () {
4646 serde .RegisterRuleExecutor (NewExecutor ())
47+ serde .RegisterRuleExecutor (NewFieldExecutor ())
4748}
4849
49- // RegisterWithClock registers the encryption rule executor with a given clock
50- func RegisterWithClock (c Clock ) * FieldEncryptionExecutor {
50+ // RegisterExecutorWithClock registers the encryption rule executor with a given clock
51+ func RegisterExecutorWithClock (c Clock ) * Executor {
5152 f := NewExecutorWithClock (c )
5253 serde .RegisterRuleExecutor (f )
5354 return f
@@ -60,10 +61,8 @@ func NewExecutor() serde.RuleExecutor {
6061}
6162
6263// NewExecutorWithClock creates a new encryption rule executor with a given clock
63- func NewExecutorWithClock (c Clock ) * FieldEncryptionExecutor {
64- a := & serde.AbstractFieldRuleExecutor {}
65- f := & FieldEncryptionExecutor {* a , nil , nil , c }
66- f .FieldRuleExecutor = f
64+ func NewExecutorWithClock (c Clock ) * Executor {
65+ f := & Executor {nil , nil , c }
6766 return f
6867}
6968
@@ -101,16 +100,15 @@ func (*clock) NowUnixMilli() int64 {
101100 return time .Now ().UnixMilli ()
102101}
103102
104- // FieldEncryptionExecutor is a field encryption executor
105- type FieldEncryptionExecutor struct {
106- serde.AbstractFieldRuleExecutor
103+ // Executor is an encryption executor
104+ type Executor struct {
107105 Config map [string ]string
108106 Client deks.Client
109107 Clock Clock
110108}
111109
112110// Configure configures the executor
113- func (f * FieldEncryptionExecutor ) Configure (clientConfig * schemaregistry.Config , config map [string ]string ) error {
111+ func (f * Executor ) Configure (clientConfig * schemaregistry.Config , config map [string ]string ) error {
114112 if f .Client != nil {
115113 if ! schemaregistry .ConfigsEqual (f .Client .Config (), clientConfig ) {
116114 return errors .New ("executor already configured" )
@@ -143,12 +141,21 @@ func (f *FieldEncryptionExecutor) Configure(clientConfig *schemaregistry.Config,
143141}
144142
145143// Type returns the type of the executor
146- func (f * FieldEncryptionExecutor ) Type () string {
147- return "ENCRYPT"
144+ func (f * Executor ) Type () string {
145+ return "ENCRYPT_PAYLOAD"
146+ }
147+
148+ // Transform transforms the message using the rule
149+ func (f * Executor ) Transform (ctx serde.RuleContext , msg interface {}) (interface {}, error ) {
150+ transform , err := f .NewTransform (ctx )
151+ if err != nil {
152+ return nil , err
153+ }
154+ return transform .Transform (ctx , serde .TypeBytes , msg )
148155}
149156
150157// NewTransform creates a new transform
151- func (f * FieldEncryptionExecutor ) NewTransform (ctx serde.RuleContext ) (serde. FieldTransform , error ) {
158+ func (f * Executor ) NewTransform (ctx serde.RuleContext ) (* ExecutorTransform , error ) {
152159 kekName , err := getKekName (ctx )
153160 if err != nil {
154161 return nil , err
@@ -157,7 +164,7 @@ func (f *FieldEncryptionExecutor) NewTransform(ctx serde.RuleContext) (serde.Fie
157164 if err != nil {
158165 return nil , err
159166 }
160- transform := FieldEncryptionExecutorTransform {
167+ transform := ExecutorTransform {
161168 Executor : * f ,
162169 Cryptor : getCryptor (ctx ),
163170 KekName : kekName ,
@@ -172,13 +179,13 @@ func (f *FieldEncryptionExecutor) NewTransform(ctx serde.RuleContext) (serde.Fie
172179}
173180
174181// Close closes the executor
175- func (f * FieldEncryptionExecutor ) Close () error {
182+ func (f * Executor ) Close () error {
176183 return f .Client .Close ()
177184}
178185
179- // FieldEncryptionExecutorTransform is a field encryption executor transform
180- type FieldEncryptionExecutorTransform struct {
181- Executor FieldEncryptionExecutor
186+ // ExecutorTransform is a field encryption executor transform
187+ type ExecutorTransform struct {
188+ Executor Executor
182189 Cryptor Cryptor
183190 KekName string
184191 Kek deks.Kek
@@ -290,11 +297,11 @@ func getDekExpiryDays(ctx serde.RuleContext) (int, error) {
290297 return i , nil
291298}
292299
293- func (f * FieldEncryptionExecutorTransform ) isDekRotated () bool {
300+ func (f * ExecutorTransform ) isDekRotated () bool {
294301 return f .DekExpiryDays > 0
295302}
296303
297- func (f * FieldEncryptionExecutorTransform ) getOrCreateKek (ctx serde.RuleContext ) (* deks.Kek , error ) {
304+ func (f * ExecutorTransform ) getOrCreateKek (ctx serde.RuleContext ) (* deks.Kek , error ) {
298305 isRead := ctx .RuleMode == schemaregistry .Read
299306 kekID := deks.KekID {
300307 Name : f .KekName ,
@@ -334,7 +341,7 @@ func (f *FieldEncryptionExecutorTransform) getOrCreateKek(ctx serde.RuleContext)
334341 return kek , nil
335342}
336343
337- func (f * FieldEncryptionExecutorTransform ) retrieveKekFromRegistry (key deks.KekID ) (* deks.Kek , error ) {
344+ func (f * ExecutorTransform ) retrieveKekFromRegistry (key deks.KekID ) (* deks.Kek , error ) {
338345 kek , err := f .Executor .Client .GetKek (key .Name , key .Deleted )
339346 if err != nil {
340347 var restErr * rest.Error
@@ -348,7 +355,7 @@ func (f *FieldEncryptionExecutorTransform) retrieveKekFromRegistry(key deks.KekI
348355 return & kek , nil
349356}
350357
351- func (f * FieldEncryptionExecutorTransform ) storeKekToRegistry (key deks.KekID , kmsType string , kmsKeyID string , shared bool ) (* deks.Kek , error ) {
358+ func (f * ExecutorTransform ) storeKekToRegistry (key deks.KekID , kmsType string , kmsKeyID string , shared bool ) (* deks.Kek , error ) {
352359 kek , err := f .Executor .Client .RegisterKek (key .Name , kmsType , kmsKeyID , nil , "" , shared )
353360 if err != nil {
354361 var restErr * rest.Error
@@ -362,7 +369,7 @@ func (f *FieldEncryptionExecutorTransform) storeKekToRegistry(key deks.KekID, km
362369 return & kek , nil
363370}
364371
365- func (f * FieldEncryptionExecutorTransform ) getOrCreateDek (ctx serde.RuleContext , version * int ) (* deks.Dek , error ) {
372+ func (f * ExecutorTransform ) getOrCreateDek (ctx serde.RuleContext , version * int ) (* deks.Dek , error ) {
366373 isRead := ctx .RuleMode == schemaregistry .Read
367374 ver := 1
368375 if version != nil {
@@ -442,7 +449,7 @@ func (f *FieldEncryptionExecutorTransform) getOrCreateDek(ctx serde.RuleContext,
442449 return dek , nil
443450}
444451
445- func (f * FieldEncryptionExecutorTransform ) createDek (dekID deks.DekID , newVersion int , encryptedDek []byte ) (* deks.Dek , error ) {
452+ func (f * ExecutorTransform ) createDek (dekID deks.DekID , newVersion int , encryptedDek []byte ) (* deks.Dek , error ) {
446453 newDekID := deks.DekID {
447454 KekName : dekID .KekName ,
448455 Subject : dekID .Subject ,
@@ -466,7 +473,7 @@ func (f *FieldEncryptionExecutorTransform) createDek(dekID deks.DekID, newVersio
466473 return dek , nil
467474}
468475
469- func (f * FieldEncryptionExecutorTransform ) retrieveDekFromRegistry (key deks.DekID ) (* deks.Dek , error ) {
476+ func (f * ExecutorTransform ) retrieveDekFromRegistry (key deks.DekID ) (* deks.Dek , error ) {
470477 var dek deks.Dek
471478 var err error
472479 if key .Version != 0 {
@@ -486,7 +493,7 @@ func (f *FieldEncryptionExecutorTransform) retrieveDekFromRegistry(key deks.DekI
486493 return & dek , nil
487494}
488495
489- func (f * FieldEncryptionExecutorTransform ) storeDekToRegistry (key deks.DekID , encryptedDek []byte ) (* deks.Dek , error ) {
496+ func (f * ExecutorTransform ) storeDekToRegistry (key deks.DekID , encryptedDek []byte ) (* deks.Dek , error ) {
490497 var encryptedDekStr string
491498 if encryptedDek != nil {
492499 encryptedDekStr = base64 .StdEncoding .EncodeToString (encryptedDek )
@@ -510,7 +517,7 @@ func (f *FieldEncryptionExecutorTransform) storeDekToRegistry(key deks.DekID, en
510517 return & dek , nil
511518}
512519
513- func (f * FieldEncryptionExecutorTransform ) isExpired (ctx serde.RuleContext , dek * deks.Dek ) bool {
520+ func (f * ExecutorTransform ) isExpired (ctx serde.RuleContext , dek * deks.Dek ) bool {
514521 now := f .Executor .Clock .NowUnixMilli ()
515522 return ctx .RuleMode != schemaregistry .Read &&
516523 f .DekExpiryDays > 0 &&
@@ -519,15 +526,15 @@ func (f *FieldEncryptionExecutorTransform) isExpired(ctx serde.RuleContext, dek
519526}
520527
521528// Transform transforms the field value using the rule
522- func (f * FieldEncryptionExecutorTransform ) Transform (ctx serde.RuleContext , fieldCtx serde.FieldContext , fieldValue interface {}) (interface {}, error ) {
529+ func (f * ExecutorTransform ) Transform (ctx serde.RuleContext , fieldType serde.FieldType , fieldValue interface {}) (interface {}, error ) {
523530 if fieldValue == nil {
524531 return nil , nil
525532 }
526533 switch ctx .RuleMode {
527534 case schemaregistry .Write :
528- plaintext := toBytes (fieldCtx . Type , fieldValue )
535+ plaintext := toBytes (fieldType , fieldValue )
529536 if plaintext == nil {
530- return nil , fmt .Errorf ("type '%v' not supported for encryption" , fieldCtx . Type )
537+ return nil , fmt .Errorf ("type '%v' not supported for encryption" , fieldType )
531538 }
532539 var version * int
533540 if f .isDekRotated () {
@@ -552,16 +559,16 @@ func (f *FieldEncryptionExecutorTransform) Transform(ctx serde.RuleContext, fiel
552559 return nil , err
553560 }
554561 }
555- if fieldCtx . Type == serde .TypeString {
562+ if fieldType == serde .TypeString {
556563 return base64 .StdEncoding .EncodeToString (ciphertext ), nil
557564 }
558565 return ciphertext , nil
559566 case schemaregistry .Read :
560- ciphertext := toBytes (fieldCtx . Type , fieldValue )
567+ ciphertext := toBytes (fieldType , fieldValue )
561568 if ciphertext == nil {
562569 return fieldValue , nil
563570 }
564- if fieldCtx . Type == serde .TypeString {
571+ if fieldType == serde .TypeString {
565572 var err error
566573 ciphertext , err = base64 .StdEncoding .DecodeString (string (ciphertext ))
567574 if err != nil {
@@ -589,7 +596,7 @@ func (f *FieldEncryptionExecutorTransform) Transform(ctx serde.RuleContext, fiel
589596 if err != nil {
590597 return nil , err
591598 }
592- return toObject (fieldCtx . Type , plaintext ), nil
599+ return toObject (fieldType , plaintext ), nil
593600 default :
594601 return nil , fmt .Errorf ("unsupported rule mode %v" , ctx .RuleMode )
595602 }
0 commit comments