4
4
"bufio"
5
5
"bytes"
6
6
"fmt"
7
+ "strings"
7
8
"time"
8
9
9
10
"crypto/tls"
@@ -34,8 +35,6 @@ const (
34
35
protocolMajor = 1
35
36
protocolMinor = 4
36
37
37
- // Expected secret data length in bits
38
- cryptographicLength = 256
39
38
)
40
39
41
40
// KMIPSecretStorage is a KMIP backend Key Management Systems (KMS)
@@ -261,10 +260,15 @@ func (k *KMIPSecretStorage) GetSecret(
261
260
262
261
log := util .Logger ()
263
262
263
+ lookfor := KMIPUniqueID // Addition to upgrade
264
+ if strings .HasSuffix (secretID , "-root-master-key-backend" ) {
265
+ lookfor = NewKMIPUniqueID
266
+ }
267
+
264
268
// KMIP key uniqueIdentifier
265
- uniqueIdentifier , exists := k .secret .StringData [KMIPUniqueID ]
269
+ uniqueIdentifier , exists := k .secret .StringData [lookfor ]
266
270
if ! exists {
267
- log .Errorf ("KMIPSecretStorage.GetSecret() uniqueIdentifier %v does not exist in secret %v" , KMIPUniqueID , k .secret )
271
+ log .Errorf ("KMIPSecretStorage.GetSecret() uniqueIdentifier %v does not exist in secret %v" , lookfor , k .secret )
268
272
return nil , secrets .NoVersion , secrets .ErrInvalidSecretId
269
273
}
270
274
@@ -305,9 +309,6 @@ func (k *KMIPSecretStorage) GetSecret(
305
309
if getRespPayload .SymmetricKey .KeyBlock .KeyFormatType != kmip14 .KeyFormatTypeRaw {
306
310
return nil , secrets .NoVersion , fmt .Errorf ("Unexpected KeyBlock format type actual %v, expected KeyFormatTypeRaw %v" , getRespPayload .SymmetricKey .KeyBlock .KeyFormatType , kmip14 .KeyFormatTypeRaw )
307
311
}
308
- if getRespPayload .SymmetricKey .KeyBlock .CryptographicLength != cryptographicLength {
309
- return nil , secrets .NoVersion , fmt .Errorf ("Unexpected KeyBlock crypto len actual %v, expected %v" , getRespPayload .SymmetricKey .KeyBlock .CryptographicLength , cryptographicLength )
310
- }
311
312
if getRespPayload .SymmetricKey .KeyBlock .CryptographicAlgorithm != kmip14 .CryptographicAlgorithmAES {
312
313
return nil , secrets .NoVersion , fmt .Errorf ("Unexpected KeyBlock crypto algo actual %v, expected CryptographicAlgorithmAES %v" , getRespPayload .SymmetricKey .KeyBlock .CryptographicAlgorithm , kmip14 .CryptographicAlgorithmAES )
313
314
}
@@ -329,10 +330,6 @@ func (k *KMIPSecretStorage) PutSecret(
329
330
keyContext map [string ]string ,
330
331
) (secrets.Version , error ) {
331
332
log := util .Logger ()
332
- if _ , exists := k .secret .StringData [KMIPUniqueID ]; exists {
333
- log .Errorf ("KMIPSecretStorage.PutSecret() Key UniqueIdentifier %v was not found in the secret" , KMIPUniqueID )
334
- return secrets .NoVersion , secrets .ErrSecretExists
335
- }
336
333
337
334
// Register the key value the KMIP endpoint
338
335
value := plainText [secretID ].(string )
@@ -356,7 +353,7 @@ func (k *KMIPSecretStorage) PutSecret(
356
353
KeyValue : & kmip.KeyValue {
357
354
KeyMaterial : valueBytes ,
358
355
},
359
- CryptographicLength : cryptographicLength ,
356
+ CryptographicLength : len ( valueBytes ) * 8 , // in bits
360
357
CryptographicAlgorithm : kmip14 .CryptographicAlgorithmAES ,
361
358
},
362
359
},
@@ -380,7 +377,7 @@ func (k *KMIPSecretStorage) PutSecret(
380
377
return secrets .NoVersion , err
381
378
}
382
379
383
- k .secret .StringData [KMIPUniqueID ] = registerRespPayload .UniqueIdentifier
380
+ k .secret .StringData [NewKMIPUniqueID ] = registerRespPayload .UniqueIdentifier
384
381
if ! util .KubeUpdate (k .secret ) {
385
382
log .Errorf ("Failed to update KMS secret %v in ns %v" , k .secret .Name , k .secret .Namespace )
386
383
return secrets .NoVersion , fmt .Errorf ("Failed to update KMS secret %v in ns %v" , k .secret .Name , k .secret .Namespace )
@@ -396,8 +393,12 @@ func (k *KMIPSecretStorage) DeleteSecret(
396
393
) error {
397
394
log := util .Logger ()
398
395
396
+ lookfor := KMIPUniqueID // Addition to upgrade
397
+ if strings .HasSuffix (secretID , "-root-master-key-backend" ) {
398
+ lookfor = NewKMIPUniqueID
399
+ }
399
400
// Find the key ID
400
- uniqueIdentifier , exists := k .secret .StringData [KMIPUniqueID ]
401
+ uniqueIdentifier , exists := k .secret .StringData [lookfor ]
401
402
if ! exists {
402
403
log .Errorf ("KMIPSecretStorage.DeleteSecret() No uniqueIdentifier in the secret" )
403
404
return secrets .ErrInvalidSecretId
@@ -437,8 +438,8 @@ func (k *KMIPSecretStorage) DeleteSecret(
437
438
return fmt .Errorf ("Unexpected uniqueIdentifier %v in destroy response , expected %v" , destroyRespPayload .UniqueIdentifier , uniqueIdentifier )
438
439
}
439
440
440
- delete (k .secret .Data , KMIPUniqueID )
441
- delete (k .secret .StringData , KMIPUniqueID )
441
+ delete (k .secret .Data , lookfor )
442
+ delete (k .secret .StringData , lookfor )
442
443
if ! util .KubeUpdate (k .secret ) {
443
444
log .Errorf ("Failed to update KMS secret %v in ns %v" , k .secret .Name , k .secret .Namespace )
444
445
return fmt .Errorf ("Failed to update KMS secret %v in ns %v" , k .secret .Name , k .secret .Namespace )
0 commit comments