acvp: allow passing custom subprocess I/O.

Change-Id: Ic87cdc84b7684c344af7aa2ef8673264d402c492
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/37164
Reviewed-by: Adam Langley <alangley@gmail.com>
diff --git a/util/fipstools/acvp/acvptool/subprocess/subprocess.go b/util/fipstools/acvp/acvptool/subprocess/subprocess.go
index 404569f..3550b4d 100644
--- a/util/fipstools/acvp/acvptool/subprocess/subprocess.go
+++ b/util/fipstools/acvp/acvptool/subprocess/subprocess.go
@@ -36,10 +36,16 @@
 		return nil, err
 	}
 
+	return NewWithIO(cmd, stdin, stdout), nil
+}
+
+// NewWithIO returns a new Subprocess middle layer with the given ReadCloser and
+// WriteCloser. The returned Subprocess will call Wait on the Cmd when closed.
+func NewWithIO(cmd *exec.Cmd, in io.WriteCloser, out io.ReadCloser) *Subprocess {
 	m := &Subprocess{
-		cmd:    cmd,
-		stdin:  stdin,
-		stdout: stdout,
+		cmd:	cmd,
+		stdin:  in,
+		stdout: out,
 	}
 
 	m.primitives = map[string]primitive{
@@ -52,7 +58,7 @@
 		"ACVP-AES-CBC": &blockCipher{"AES-CBC", 16, true, m},
 	}
 
-	return m, nil
+	return m
 }
 
 // Close signals the child process to exit and waits for it to complete.