code: function initEncryption(provider, bigIp) {
          const PRIVATE_KEY_OUT_FILE = '/tmp/tempPrivateKey.pem';
  
          let passphrase;
  
          if (provider.hasFeature(CloudProvider.FEATURE_ENCRYPTION)) {
              logger.debug('Generating public/private keys for autoscaling.');
              return cryptoUtil.generateRandomBytes(PASSPHRASE_LENGTH, 'base64')
                  .then((response) => {
                      passphrase = response;
                      return cryptoUtil.generateKeyPair(
                          PRIVATE_KEY_OUT_FILE,
                          { passphrase, keyLength: '3072' }
                      );
                  })
                  .then((publicKey) => {
                      return provider.putPublicKey(this.instanceId, publicKey);
                  })
                  .then(() => {
                      return bigIp.installPrivateKey(
                          PRIVATE_KEY_OUT_FILE,
                          AUTOSCALE_PRIVATE_KEY_FOLDER,
                          AUTOSCALE_PRIVATE_KEY,
                          { passphrase }
                      );
                  })
                  .then(() => {
                      return bigIp.save();
                  })
                  .catch((err) => {
                      logger.info('initEncryption error', err && err.message ? err.message : err);
                      return q.reject(err);
                  });
          }
          return q();
      }
docs: If the provider supports encryption, initializes and stores keys.
  
  Called with this bound to the caller.