acvp: load config later.

The config file is only needed if interacting with an ACVP server.
Invocations that just want to process input from a file don't need it.
By moving this chunk of code down, the config isn't loaded until
after handling JSON inputs and just can be ignore if not needed.

Change-Id: Ibce334f63ddf8df34cf2917b923db20b3aaa735f
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/44744
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/util/fipstools/acvp/acvptool/acvp.go b/util/fipstools/acvp/acvptool/acvp.go
index 3522473..df627cc 100644
--- a/util/fipstools/acvp/acvptool/acvp.go
+++ b/util/fipstools/acvp/acvptool/acvp.go
@@ -260,6 +260,45 @@
 func main() {
 	flag.Parse()
 
+	var err error
+	var middle Middle
+	middle, err = subprocess.New(*wrapperPath)
+	if err != nil {
+		log.Fatalf("failed to initialise middle: %s", err)
+	}
+	defer middle.Close()
+
+	configBytes, err := middle.Config()
+	if err != nil {
+		log.Fatalf("failed to get config from middle: %s", err)
+	}
+
+	var supportedAlgos []map[string]interface{}
+	if err := json.Unmarshal(configBytes, &supportedAlgos); err != nil {
+		log.Fatalf("failed to parse configuration from Middle: %s", err)
+	}
+
+	if *dumpRegcap {
+		regcap := []map[string]interface{}{
+			map[string]interface{}{"acvVersion": "1.0"},
+			map[string]interface{}{"algorithms": supportedAlgos},
+		}
+		regcapBytes, err := json.MarshalIndent(regcap, "", "    ")
+		if err != nil {
+			log.Fatalf("failed to marshal regcap: %s", err)
+		}
+		os.Stdout.Write(regcapBytes)
+		os.Stdout.WriteString("\n")
+		os.Exit(0)
+	}
+
+	if len(*jsonInputFile) > 0 {
+		if err := processFile(*jsonInputFile, supportedAlgos, middle); err != nil {
+			log.Fatalf("failed to process input file: %s", err)
+		}
+		os.Exit(0)
+	}
+
 	var config Config
 	if err := jsonFromFile(&config, *configFilename); err != nil {
 		log.Fatalf("Failed to load config file: %s", err)
@@ -314,44 +353,6 @@
 		}
 	}
 
-	var middle Middle
-	middle, err = subprocess.New(*wrapperPath)
-	if err != nil {
-		log.Fatalf("failed to initialise middle: %s", err)
-	}
-	defer middle.Close()
-
-	configBytes, err := middle.Config()
-	if err != nil {
-		log.Fatalf("failed to get config from middle: %s", err)
-	}
-
-	var supportedAlgos []map[string]interface{}
-	if err := json.Unmarshal(configBytes, &supportedAlgos); err != nil {
-		log.Fatalf("failed to parse configuration from Middle: %s", err)
-	}
-
-	if *dumpRegcap {
-		regcap := []map[string]interface{}{
-			map[string]interface{}{"acvVersion": "1.0"},
-			map[string]interface{}{"algorithms": supportedAlgos},
-		}
-		regcapBytes, err := json.MarshalIndent(regcap, "", "    ")
-		if err != nil {
-			log.Fatalf("failed to marshal regcap: %s", err)
-		}
-		os.Stdout.Write(regcapBytes)
-		os.Stdout.WriteString("\n")
-		os.Exit(0)
-	}
-
-	if len(*jsonInputFile) > 0 {
-		if err := processFile(*jsonInputFile, supportedAlgos, middle); err != nil {
-			log.Fatalf("failed to process input file: %s", err)
-		}
-		os.Exit(0)
-	}
-
 	var requestedAlgosFlag string
 	if len(*runFlag) > 0 && len(*fetchFlag) > 0 {
 		log.Fatalf("cannot specify both -run and -fetch")