code: func GetAESPrefixTransformer(config *apiserverconfig.AESConfiguration, fn BlockTransformerFunc, prefix string) (value.PrefixTransformer, error) {
  	var result value.PrefixTransformer
  
  	if len(config.Keys) == 0 {
  		return result, fmt.Errorf("aes provider has no valid keys")
  	}
  	for _, key := range config.Keys {
  		if key.Name == "" {
  			return result, fmt.Errorf("key with invalid name provided")
  		}
  		if key.Secret == "" {
  			return result, fmt.Errorf("key %v has no provided secret", key.Name)
  		}
  	}
  
  	keyTransformers := []value.PrefixTransformer{}
  
  	for _, keyData := range config.Keys {
  		key, err := base64.StdEncoding.DecodeString(keyData.Secret)
  		if err != nil {
  			return result, fmt.Errorf("could not obtain secret for named key %s: %s", keyData.Name, err)
  		}
  		block, err := aes.NewCipher(key)
  		if err != nil {
  			return result, fmt.Errorf("error while creating cipher for named key %s: %s", keyData.Name, err)
  		}
  
  		// Create a new PrefixTransformer for this key
  		keyTransformers = append(keyTransformers,
  			value.PrefixTransformer{
  				Transformer: fn(block),
  				Prefix:      []byte(keyData.Name + ":"),
  			})
  	}
  
  	// Create a prefixTransformer which can choose between these keys
  	keyTransformer := value.NewPrefixTransformers(
  		fmt.Errorf("no matching key was found for the provided AES transformer"), keyTransformers...)
  
  	// Create a PrefixTransformer which shall later be put in a list with other providers
  	result = value.PrefixTransformer{
  		Transformer: keyTransformer,
  		Prefix:      []byte(prefix),
  	}
  	return result, nil
  }
docs: // GetAESPrefixTransformer returns a prefix transformer from the provided configuration.
  // Returns an AES transformer based on the provided prefix and block transformer.