diff --git a/util/convert_wycheproof.go b/util/convert_wycheproof.go
index f07621b..deabc75 100644
--- a/util/convert_wycheproof.go
+++ b/util/convert_wycheproof.go
@@ -132,7 +132,7 @@
 	}
 }
 
-func convertWycheproof(jsonPath, txtPath string) error {
+func convertWycheproof(f io.Writer, jsonPath string) error {
 	jsonData, err := ioutil.ReadFile(jsonPath)
 	if err != nil {
 		return err
@@ -143,11 +143,6 @@
 		return err
 	}
 
-	f, err := os.OpenFile(txtPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
-	if err != nil {
-		return err
-	}
-	defer f.Close()
 	if _, err := fmt.Fprintf(f, `# Imported from Wycheproof's %s.
 # This file is generated by convert_wycheproof.go. Do not edit by hand.
 #
@@ -225,34 +220,55 @@
 	return nil
 }
 
+var defaultInputs = []string{
+	"aes_cbc_pkcs5_test.json",
+	"aes_gcm_siv_test.json",
+	"aes_gcm_test.json",
+	"chacha20_poly1305_test.json",
+	"dsa_test.json",
+	"ecdh_test.json",
+	"ecdsa_secp224r1_sha224_test.json",
+	"ecdsa_secp224r1_sha256_test.json",
+	"ecdsa_secp256r1_sha256_test.json",
+	"ecdsa_secp384r1_sha384_test.json",
+	"ecdsa_secp384r1_sha512_test.json",
+	"ecdsa_secp521r1_sha512_test.json",
+	"eddsa_test.json",
+	"kw_test.json",
+	"rsa_signature_test.json",
+	"x25519_test.json",
+}
+
 func main() {
-	jsonPaths := []string{
-		"aes_cbc_pkcs5_test.json",
-		"aes_cmac_test.json",
-		"aes_gcm_siv_test.json",
-		"aes_gcm_test.json",
-		"chacha20_poly1305_test.json",
-		"dsa_test.json",
-		"ecdh_test.json",
-		"ecdsa_secp224r1_sha224_test.json",
-		"ecdsa_secp224r1_sha256_test.json",
-		"ecdsa_secp256r1_sha256_test.json",
-		"ecdsa_secp384r1_sha384_test.json",
-		"ecdsa_secp384r1_sha512_test.json",
-		"ecdsa_secp521r1_sha512_test.json",
-		"eddsa_test.json",
-		"kw_test.json",
-		"rsa_signature_test.json",
-		"x25519_test.json",
-	}
-	for _, jsonPath := range jsonPaths {
-		if !strings.HasSuffix(jsonPath, ".json") {
-			panic(jsonPath)
+	switch len(os.Args) {
+	case 1:
+		for _, jsonPath := range defaultInputs {
+			if !strings.HasSuffix(jsonPath, ".json") {
+				panic(jsonPath)
+			}
+
+			txtPath := jsonPath[:len(jsonPath)-len(".json")] + ".txt"
+			out, err := os.Create(txtPath)
+			if err != nil {
+				fmt.Fprintf(os.Stderr, "Error opening output %s: %s\n", txtPath, err)
+				os.Exit(1)
+			}
+			defer out.Close()
+
+			if err := convertWycheproof(out, jsonPath); err != nil {
+				fmt.Fprintf(os.Stderr, "Error converting %s: %s\n", jsonPath, err)
+				os.Exit(1)
+			}
 		}
-		txtPath := jsonPath[:len(jsonPath)-len(".json")] + ".txt"
-		if err := convertWycheproof(jsonPath, txtPath); err != nil {
-			fmt.Fprintf(os.Stderr, "Error converting %s: %s\n", jsonPath, err)
+
+	case 2:
+		if err := convertWycheproof(os.Stdout, os.Args[1]); err != nil {
+			fmt.Fprintf(os.Stderr, "Error converting %s: %s\n", os.Args[1], err)
 			os.Exit(1)
 		}
+
+	default:
+		fmt.Fprintf(os.Stderr, "Usage: %s [input JSON]\n", os.Args[0])
+		os.Exit(1)
 	}
 }
