diff --git a/filesig/helpers.go b/filesig/helpers.go
index 91e19cb..188ff21 100644
--- a/filesig/helpers.go
+++ b/filesig/helpers.go
@@ -4,13 +4,17 @@ import (
 	"errors"
 	"fmt"
 	"io/ioutil"
+	"os"
 	"strings"
 
 	"github.com/safing/jess"
 	"github.com/safing/jess/hashtools"
+	"github.com/safing/jess/lhash"
 )
 
 // SignFile signs a file and replaces the signature file with a new one.
+// If the dataFilePath is "-", the file data is read from stdin.
+// Existing jess signatures in the signature file are removed.
 func SignFile(dataFilePath, signatureFilePath string, metaData map[string]string, envelope *jess.Envelope, trustStore jess.TrustStore) (fileData *FileData, err error) {
 	// Load encryption suite.
 	if err := envelope.LoadSuite(); err != nil {
@@ -21,7 +25,7 @@ func SignFile(dataFilePath, signatureFilePath string, metaData map[string]string
 	var hashTool *hashtools.HashTool
 	for _, toolID := range envelope.Suite().Tools {
 		if strings.Contains(toolID, "(") {
-			hashToolID := strings.Trim(strings.Split(toolID, "(")[0], "()")
+			hashToolID := strings.Trim(strings.Split(toolID, "(")[1], "()")
 			hashTool, _ = hashtools.Get(hashToolID)
 			break
 		}
@@ -31,7 +35,12 @@ func SignFile(dataFilePath, signatureFilePath string, metaData map[string]string
 	}
 
 	// Hash the data file.
-	fileHash, err := hashTool.LabeledHasher().DigestFile(dataFilePath)
+	var fileHash *lhash.LabeledHash
+	if dataFilePath == "-" {
+		fileHash, err = hashTool.LabeledHasher().DigestFromReader(os.Stdin)
+	} else {
+		fileHash, err = hashTool.LabeledHasher().DigestFile(dataFilePath)
+	}
 	if err != nil {
 		return nil, fmt.Errorf("failed to hash file: %w", err)
 	}
@@ -57,6 +66,7 @@ func SignFile(dataFilePath, signatureFilePath string, metaData map[string]string
 }
 
 // VerifyFile verifies the given files and returns the verified file data.
+// If the dataFilePath is "-", the file data is read from stdin.
 // If an error is returned, there was an error in at least some part of the process.
 // Any returned file data struct must be checked for an verification error.
 func VerifyFile(dataFilePath, signatureFilePath string, metaData map[string]string, trustStore jess.TrustStore) (verifiedFileData []*FileData, err error) {
@@ -95,7 +105,12 @@ func VerifyFile(dataFilePath, signatureFilePath string, metaData map[string]stri
 		}
 
 		// Hash the file.
-		fileHash, err := fileData.FileHash().Algorithm().DigestFile(dataFilePath)
+		var fileHash *lhash.LabeledHash
+		if dataFilePath == "-" {
+			fileHash, err = fileData.FileHash().Algorithm().DigestFromReader(os.Stdin)
+		} else {
+			fileHash, err = fileData.FileHash().Algorithm().DigestFile(dataFilePath)
+		}
 		if err != nil {
 			lastErr = err
 			fileData.verificationError = err