فهرست منبع

Include `offenderEntropy` in the JSON output (#549)

* Pass the entropy data back to the Leak struct

Do this to make it easier to tune entropy checks and make decisions in
systems consuming the output.

~ B'ezrat Hashem ~

* Return negative number when entropy not checked

That way you can tell the difference between not checking or an
actual entropy level of 0

~ B'ezrat Hashem ~

* Make sure to handle range checks properly

Make sure to show when something had an entropy returned but was outside
range, or didn't have a hit at all, etc...

~ B'zrat Hashem ~

* Add a few doc strings

Follow the project's conventiona add a comment above the methods

~ B'ezrat Hashem ~

* Update tests and get them to pass

~ B'ezrat Hashem ~

* Remove checked in `.got` files

~ B'ezrat Hashem ~

* Add `*.got` to the `.gitignore`

Make sure the test output files aren't checked-in

~ B'ezrat Hashem ~
bplaxco 4 سال پیش
والد
کامیت
8250e40a75
52فایلهای تغییر یافته به همراه240 افزوده شده و 50 حذف شده
  1. 1 0
      .gitignore
  2. 8 7
      Makefile
  3. 60 14
      config/rule.go
  4. 2 2
      scan/commit.go
  5. 2 3
      scan/filesatcommit.go
  6. 26 17
      scan/leak.go
  7. 2 2
      scan/nogit.go
  8. 5 1
      scan/scan_test.go
  9. 4 4
      scan/unstaged.go
  10. 1 0
      test_data/test_additional_config.json
  11. 5 0
      test_data/test_allow_list_docx_no_git.json
  12. 1 0
      test_data/test_allow_list_file.json
  13. 2 0
      test_data/test_allow_list_file_no_git.json
  14. 1 0
      test_data/test_append_repo.json
  15. 2 0
      test_data/test_dir1_aws_leak.json
  16. 1 0
      test_data/test_entropy.json
  17. 1 0
      test_data/test_file1_aws_leak.json
  18. 23 0
      test_data/test_local_owner_aws_leak.json
  19. 22 0
      test_data/test_local_owner_aws_leak_allowlist_repo.json
  20. 7 0
      test_data/test_local_owner_aws_leak_depth_2.json
  21. 3 0
      test_data/test_local_repo_eight.json
  22. 1 0
      test_data/test_local_repo_five_at_latest_commit.json
  23. 1 0
      test_data/test_local_repo_five_commit.json
  24. 2 0
      test_data/test_local_repo_five_files_at_commit.json
  25. 2 0
      test_data/test_local_repo_five_files_at_latest_commit.json
  26. 2 0
      test_data/test_local_repo_four_alt_config_entropy.json
  27. 2 0
      test_data/test_local_repo_four_leaks_commit_timerange.json
  28. 1 0
      test_data/test_local_repo_nine_aws_leak.json
  29. 1 0
      test_data/test_local_repo_one_aws_leak.json
  30. 1 0
      test_data/test_local_repo_one_aws_leak_and_file_leak.json
  31. 1 0
      test_data/test_local_repo_one_aws_leak_commit.json
  32. 1 0
      test_data/test_local_repo_one_aws_leak_uncommitted.json
  33. 1 0
      test_data/test_local_repo_seven_aws_leak_uncommitted.json
  34. 3 0
      test_data/test_local_repo_six.json
  35. 2 0
      test_data/test_local_repo_six_filename.json
  36. 1 0
      test_data/test_local_repo_six_filepath.json
  37. 1 0
      test_data/test_local_repo_six_filepath_filename.json
  38. 1 0
      test_data/test_local_repo_six_leaks_since_date.json
  39. 1 0
      test_data/test_local_repo_six_leaks_until_date.json
  40. 1 0
      test_data/test_local_repo_six_path_globally_allowlisted.json
  41. 4 0
      test_data/test_local_repo_three_leaks.json
  42. 3 0
      test_data/test_local_repo_three_leaks_with_report_groups.json
  43. 1 0
      test_data/test_local_repo_two_allowlist_commits.json
  44. 3 0
      test_data/test_local_repo_two_leaks.json
  45. 2 0
      test_data/test_local_repo_two_leaks_commit_from.json
  46. 2 0
      test_data/test_local_repo_two_leaks_commit_range.json
  47. 1 0
      test_data/test_local_repo_two_leaks_commit_to.json
  48. 1 0
      test_data/test_local_repo_two_leaks_commit_to_from.json
  49. 6 0
      test_data/test_local_repo_two_leaks_deletion.json
  50. 2 0
      test_data/test_local_repo_two_leaks_file_commit_range.json
  51. 9 0
      test_data/test_only_files_no_git.json
  52. 1 0
      test_data/test_regex_entropy.json

+ 1 - 0
.gitignore

@@ -6,6 +6,7 @@
 *.dylib
 *.dylib
 *.DS_STORE
 *.DS_STORE
 *.idea
 *.idea
+*.got
 gitleaks
 gitleaks
 build
 build
 
 

+ 8 - 7
Makefile

@@ -10,15 +10,16 @@ test-cover:
 	go test ./... --race $(COVER) $(PKG) -v
 	go test ./... --race $(COVER) $(PKG) -v
 	go tool cover -html=cover.out
 	go tool cover -html=cover.out
 
 
-test:
-	go get golang.org/x/lint/golint
+format:
 	go fmt ./...
 	go fmt ./...
+
+test: format
+	go get golang.org/x/lint/golint
 	go vet ./...
 	go vet ./...
 	golint ./...
 	golint ./...
 	go test ./... --race $(PKG) -v
 	go test ./... --race $(PKG) -v
 
 
-build:
-	go fmt ./...
+build: format
 	golint ./...
 	golint ./...
 	go vet ./...
 	go vet ./...
 	go mod tidy
 	go mod tidy
@@ -41,9 +42,9 @@ release-builds:
 
 
 deploy:
 deploy:
 	@echo "$(DOCKER_PASSWORD)" | docker login -u "$(DOCKER_USERNAME)" --password-stdin
 	@echo "$(DOCKER_PASSWORD)" | docker login -u "$(DOCKER_USERNAME)" --password-stdin
-	docker build --build-arg ldflags=$(_LDFLAGS) -f Dockerfile -t zricethezav/gitleaks:latest -t zricethezav/gitleaks:$(VERSION) . 
+	docker build --build-arg ldflags=$(_LDFLAGS) -f Dockerfile -t zricethezav/gitleaks:latest -t zricethezav/gitleaks:$(VERSION) .
 	echo "Pushing zricethezav/gitleaks:$(VERSION) and zricethezav/gitleaks:latest"
 	echo "Pushing zricethezav/gitleaks:$(VERSION) and zricethezav/gitleaks:latest"
 	docker push zricethezav/gitleaks
 	docker push zricethezav/gitleaks
 
 
-dockerbuild: 
-	docker build --build-arg ldflags=$(_LDFLAGS) -f Dockerfile -t zricethezav/gitleaks:latest -t zricethezav/gitleaks:$(VERSION) . 
+dockerbuild:
+	docker build --build-arg ldflags=$(_LDFLAGS) -f Dockerfile -t zricethezav/gitleaks:latest -t zricethezav/gitleaks:$(VERSION) .

+ 60 - 14
config/rule.go

@@ -6,6 +6,23 @@ import (
 	"regexp"
 	"regexp"
 )
 )
 
 
+// Offender is a struct that contains the information matched when searching
+// content and information on why it matched (i.e. the EntropyLevel)
+type Offender struct {
+	Match        string
+	EntropyLevel float64
+}
+
+// IsEmpty checks to see if nothing was found in the match
+func (o *Offender) IsEmpty() bool {
+	return o.Match == ""
+}
+
+// ToString the contents of the match
+func (o *Offender) ToString() string {
+	return o.Match
+}
+
 // Rule is a struct that contains information that is loaded from a gitleaks config.
 // Rule is a struct that contains information that is loaded from a gitleaks config.
 // This struct is used in the Config struct as an array of Rules and is iterated
 // This struct is used in the Config struct as an array of Rules and is iterated
 // over during an scan. Each rule will be checked. If a regex match is found AND
 // over during an scan. Each rule will be checked. If a regex match is found AND
@@ -23,28 +40,46 @@ type Rule struct {
 }
 }
 
 
 // Inspect checks the content of a line for a leak
 // Inspect checks the content of a line for a leak
-func (r *Rule) Inspect(line string) string {
-	offender := r.Regex.FindString(line)
-	if offender == "" {
-		return ""
+func (r *Rule) Inspect(line string) *Offender {
+	match := r.Regex.FindString(line)
+
+	// EntropyLevel -1 means not checked
+	if match == "" {
+		return &Offender{
+			Match:        "",
+			EntropyLevel: -1,
+		}
 	}
 	}
 
 
 	// check if offender is allowed
 	// check if offender is allowed
+	// EntropyLevel -1 means not checked
 	if r.RegexAllowed(line) {
 	if r.RegexAllowed(line) {
-		return ""
+		return &Offender{
+			Match:        "",
+			EntropyLevel: -1,
+		}
 	}
 	}
 
 
 	// check entropy
 	// check entropy
-	groups := r.Regex.FindStringSubmatch(offender)
-	if len(r.Entropies) != 0 && !r.ContainsEntropyLeak(groups) {
-		return ""
+	groups := r.Regex.FindStringSubmatch(match)
+	entropyWithinRange, entropyLevel := r.CheckEntropy(groups)
+
+	if len(r.Entropies) != 0 && !entropyWithinRange {
+		return &Offender{
+			Match:        "",
+			EntropyLevel: entropyLevel,
+		}
 	}
 	}
 
 
 	// 0 is a match for the full regex pattern
 	// 0 is a match for the full regex pattern
 	if 0 < r.ReportGroup && r.ReportGroup < len(groups) {
 	if 0 < r.ReportGroup && r.ReportGroup < len(groups) {
-		offender = groups[r.ReportGroup]
+		match = groups[r.ReportGroup]
+	}
+
+	return &Offender{
+		Match:        match,
+		EntropyLevel: entropyLevel,
 	}
 	}
-	return offender
 }
 }
 
 
 // RegexAllowed checks if the content is allowlisted
 // RegexAllowed checks if the content is allowlisted
@@ -57,17 +92,28 @@ func (r *Rule) CommitAllowed(commit string) bool {
 	return r.AllowList.CommitAllowed(commit)
 	return r.AllowList.CommitAllowed(commit)
 }
 }
 
 
-// ContainsEntropyLeak checks if there is an entropy leak
-func (r *Rule) ContainsEntropyLeak(groups []string) bool {
+// CheckEntropy checks if there is an entropy leak
+func (r *Rule) CheckEntropy(groups []string) (bool, float64) {
+	var highestFound float64 = 0
+
 	for _, e := range r.Entropies {
 	for _, e := range r.Entropies {
 		if len(groups) > e.Group {
 		if len(groups) > e.Group {
 			entropy := shannonEntropy(groups[e.Group])
 			entropy := shannonEntropy(groups[e.Group])
 			if entropy >= e.Min && entropy <= e.Max {
 			if entropy >= e.Min && entropy <= e.Max {
-				return true
+				return true, entropy
+			} else if entropy > highestFound {
+				highestFound = entropy
 			}
 			}
 		}
 		}
 	}
 	}
-	return false
+
+	if len(r.Entropies) == 0 {
+		// entropies not checked
+		return false, -1
+	}
+
+	// entropies checked but not within the range
+	return false, highestFound
 }
 }
 
 
 // HasFileOrPathLeakOnly first checks if there are no entropy/regex rules, then checks if
 // HasFileOrPathLeakOnly first checks if there are no entropy/regex rules, then checks if

+ 2 - 2
scan/commit.go

@@ -121,7 +121,7 @@ func (cs *CommitScanner) Scan() (Report, error) {
 							continue
 							continue
 						}
 						}
 						offender := rule.Inspect(line)
 						offender := rule.Inspect(line)
-						if offender == "" {
+						if offender.IsEmpty() {
 							continue
 							continue
 						}
 						}
 
 
@@ -136,7 +136,7 @@ func (cs *CommitScanner) Scan() (Report, error) {
 							continue
 							continue
 						}
 						}
 
 
-						leak := NewLeak(line, offender, defaultLineNumber).WithCommit(cs.commit)
+						leak := NewLeak(line, offender.ToString(), defaultLineNumber).WithCommit(cs.commit).WithEntropy(offender.EntropyLevel)
 						leak.File = to.Path()
 						leak.File = to.Path()
 						leak.LineNumber = extractLine(patchContent, leak, lineLookup)
 						leak.LineNumber = extractLine(patchContent, leak, lineLookup)
 						leak.RepoURL = cs.opts.RepoURL
 						leak.RepoURL = cs.opts.RepoURL

+ 2 - 3
scan/filesatcommit.go

@@ -97,8 +97,7 @@ func (fs *FilesAtCommitScanner) Scan() (Report, error) {
 				}
 				}
 
 
 				offender := rule.Inspect(line)
 				offender := rule.Inspect(line)
-
-				if offender == "" {
+				if offender.IsEmpty() {
 					continue
 					continue
 				}
 				}
 
 
@@ -113,7 +112,7 @@ func (fs *FilesAtCommitScanner) Scan() (Report, error) {
 					continue
 					continue
 				}
 				}
 
 
-				leak := NewLeak(line, offender, defaultLineNumber).WithCommit(fs.commit)
+				leak := NewLeak(line, offender.ToString(), defaultLineNumber).WithCommit(fs.commit).WithEntropy(offender.EntropyLevel)
 				leak.File = f.Name
 				leak.File = f.Name
 				leak.LineNumber = i + 1
 				leak.LineNumber = i + 1
 				leak.RepoURL = fs.opts.RepoURL
 				leak.RepoURL = fs.opts.RepoURL

+ 26 - 17
scan/leak.go

@@ -3,6 +3,7 @@ package scan
 import (
 import (
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
+	"math"
 	"strings"
 	"strings"
 	"time"
 	"time"
 
 
@@ -14,20 +15,21 @@ import (
 // Leak is a struct that contains information about some line of code that contains
 // Leak is a struct that contains information about some line of code that contains
 // sensitive information as determined by the rules set in a gitleaks config
 // sensitive information as determined by the rules set in a gitleaks config
 type Leak struct {
 type Leak struct {
-	Line       string    `json:"line"`
-	LineNumber int       `json:"lineNumber"`
-	Offender   string    `json:"offender"`
-	Commit     string    `json:"commit"`
-	Repo       string    `json:"repo"`
-	RepoURL    string    `json:"repoURL"`
-	LeakURL    string    `json:"leakURL"`
-	Rule       string    `json:"rule"`
-	Message    string    `json:"commitMessage"`
-	Author     string    `json:"author"`
-	Email      string    `json:"email"`
-	File       string    `json:"file"`
-	Date       time.Time `json:"date"`
-	Tags       string    `json:"tags"`
+	Line            string    `json:"line"`
+	LineNumber      int       `json:"lineNumber"`
+	Offender        string    `json:"offender"`
+	OffenderEntropy float64   `json:"offenderEntropy"`
+	Commit          string    `json:"commit"`
+	Repo            string    `json:"repo"`
+	RepoURL         string    `json:"repoURL"`
+	LeakURL         string    `json:"leakURL"`
+	Rule            string    `json:"rule"`
+	Message         string    `json:"commitMessage"`
+	Author          string    `json:"author"`
+	Email           string    `json:"email"`
+	File            string    `json:"file"`
+	Date            time.Time `json:"date"`
+	Tags            string    `json:"tags"`
 }
 }
 
 
 // RedactLeak will replace the offending string with "REDACTED" in both
 // RedactLeak will replace the offending string with "REDACTED" in both
@@ -41,9 +43,10 @@ func RedactLeak(leak Leak) Leak {
 // NewLeak creates a new leak from common data all leaks must have, line, offender, linenumber
 // NewLeak creates a new leak from common data all leaks must have, line, offender, linenumber
 func NewLeak(line string, offender string, lineNumber int) Leak {
 func NewLeak(line string, offender string, lineNumber int) Leak {
 	return Leak{
 	return Leak{
-		Line:       line,
-		Offender:   offender,
-		LineNumber: lineNumber,
+		Line:            line,
+		Offender:        offender,
+		LineNumber:      lineNumber,
+		OffenderEntropy: -1, // -1 means not checked
 	}
 	}
 }
 }
 
 
@@ -57,6 +60,12 @@ func (leak Leak) WithCommit(commit *object.Commit) Leak {
 	return leak
 	return leak
 }
 }
 
 
+// WithEntropy adds OffenderEntropy data to the leak
+func (leak Leak) WithEntropy(entropyLevel float64) Leak {
+	leak.OffenderEntropy = math.Round(entropyLevel*1000) / 1000
+	return leak
+}
+
 // Log logs a leak and redacts if necessary
 // Log logs a leak and redacts if necessary
 func (leak Leak) Log(opts options.Options) {
 func (leak Leak) Log(opts options.Options) {
 	if !opts.Quiet && !opts.Verbose {
 	if !opts.Quiet && !opts.Verbose {

+ 2 - 2
scan/nogit.go

@@ -105,7 +105,7 @@ func (ngs *NoGitScanner) Scan() (Report, error) {
 					}
 					}
 
 
 					offender := rule.Inspect(line)
 					offender := rule.Inspect(line)
-					if offender == "" {
+					if offender.IsEmpty() {
 						continue
 						continue
 					}
 					}
 					if ngs.cfg.Allowlist.RegexAllowed(line) {
 					if ngs.cfg.Allowlist.RegexAllowed(line) {
@@ -119,7 +119,7 @@ func (ngs *NoGitScanner) Scan() (Report, error) {
 						continue
 						continue
 					}
 					}
 
 
-					leak := NewLeak(line, offender, defaultLineNumber)
+					leak := NewLeak(line, offender.ToString(), defaultLineNumber).WithEntropy(offender.EntropyLevel)
 					relPath, err := filepath.Rel(ngs.opts.Path, p)
 					relPath, err := filepath.Rel(ngs.opts.Path, p)
 					if err != nil {
 					if err != nil {
 						leak.File = p
 						leak.File = p

+ 5 - 1
scan/scan_test.go

@@ -760,7 +760,7 @@ func fileCheck(wantPath, gotPath string) error {
 			}
 			}
 		}
 		}
 		if !found {
 		if !found {
-			return fmt.Errorf("unable to find %+v in got leaks", wantLeak)
+			return fmt.Errorf("unable to find %+v in %s", wantLeak, gotPath)
 		}
 		}
 	}
 	}
 
 
@@ -779,6 +779,10 @@ func same(l1, l2 Leak) bool {
 		return false
 		return false
 	}
 	}
 
 
+	if l1.OffenderEntropy != l2.OffenderEntropy {
+		return false
+	}
+
 	if l1.Line != l2.Line {
 	if l1.Line != l2.Line {
 		return false
 		return false
 	}
 	}

+ 4 - 4
scan/unstaged.go

@@ -87,7 +87,7 @@ func (us *UnstagedScanner) Scan() (Report, error) {
 				lineNumber++
 				lineNumber++
 				for _, rule := range us.cfg.Rules {
 				for _, rule := range us.cfg.Rules {
 					offender := rule.Inspect(line)
 					offender := rule.Inspect(line)
-					if offender == "" {
+					if offender.IsEmpty() {
 						continue
 						continue
 					}
 					}
 					if us.cfg.Allowlist.RegexAllowed(line) ||
 					if us.cfg.Allowlist.RegexAllowed(line) ||
@@ -101,7 +101,7 @@ func (us *UnstagedScanner) Scan() (Report, error) {
 					if rule.Path.String() != "" && !rule.HasFilePathLeak(filepath.Base(workTreeFile.Name())) {
 					if rule.Path.String() != "" && !rule.HasFilePathLeak(filepath.Base(workTreeFile.Name())) {
 						continue
 						continue
 					}
 					}
-					leak := NewLeak(line, offender, defaultLineNumber).WithCommit(emptyCommit())
+					leak := NewLeak(line, offender.ToString(), defaultLineNumber).WithCommit(emptyCommit()).WithEntropy(offender.EntropyLevel)
 					leak.File = workTreeFile.Name()
 					leak.File = workTreeFile.Name()
 					leak.LineNumber = lineNumber
 					leak.LineNumber = lineNumber
 					leak.Repo = us.repoName
 					leak.Repo = us.repoName
@@ -206,7 +206,7 @@ func (us *UnstagedScanner) Scan() (Report, error) {
 			for _, line := range strings.Split(diffContents, "\n") {
 			for _, line := range strings.Split(diffContents, "\n") {
 				for _, rule := range us.cfg.Rules {
 				for _, rule := range us.cfg.Rules {
 					offender := rule.Inspect(line)
 					offender := rule.Inspect(line)
-					if offender == "" {
+					if offender.IsEmpty() {
 						continue
 						continue
 					}
 					}
 					if us.cfg.Allowlist.RegexAllowed(line) ||
 					if us.cfg.Allowlist.RegexAllowed(line) ||
@@ -220,7 +220,7 @@ func (us *UnstagedScanner) Scan() (Report, error) {
 					if rule.Path.String() != "" && !rule.HasFilePathLeak(filepath.Base(filename)) {
 					if rule.Path.String() != "" && !rule.HasFilePathLeak(filepath.Base(filename)) {
 						continue
 						continue
 					}
 					}
-					leak := NewLeak(line, offender, defaultLineNumber).WithCommit(emptyCommit())
+					leak := NewLeak(line, offender.ToString(), defaultLineNumber).WithCommit(emptyCommit()).WithEntropy(offender.EntropyLevel)
 					leak.File = filename
 					leak.File = filename
 					leak.LineNumber = extractLine(prettyDiff, leak, lineLookup) + 1
 					leak.LineNumber = extractLine(prettyDiff, leak, lineLookup) + 1
 					leak.Repo = us.repoName
 					leak.Repo = us.repoName

+ 1 - 0
test_data/test_additional_config.json

@@ -3,6 +3,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: tmp/bad.docx",
   "offender": "Filename or path offender: tmp/bad.docx",
+  "offenderEntropy": -1,
   "commit": "b0f9b62dfe12e4e10de180359c6b9276472494f8",
   "commit": "b0f9b62dfe12e4e10de180359c6b9276472494f8",
   "repo": "test_repo_10",
   "repo": "test_repo_10",
   "repoURL": "",
   "repoURL": "",

+ 5 - 0
test_data/test_allow_list_docx_no_git.json

@@ -3,6 +3,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/.gitignore",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/.gitignore",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/bad.zip",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/bad.zip",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/gitfile.txt",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/gitfile.txt",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -51,6 +54,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/creds.git",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/creds.git",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -67,6 +71,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/somedir.git/secret.key",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/somedir.git/secret.key",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_allow_list_file.json

@@ -3,6 +3,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: tmp/bad.docx",
   "offender": "Filename or path offender: tmp/bad.docx",
+  "offenderEntropy": -1,
   "commit": "b0f9b62dfe12e4e10de180359c6b9276472494f8",
   "commit": "b0f9b62dfe12e4e10de180359c6b9276472494f8",
   "repo": "test_repo_10",
   "repo": "test_repo_10",
   "repoURL": "",
   "repoURL": "",

+ 2 - 0
test_data/test_allow_list_file_no_git.json

@@ -3,6 +3,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/somedir.git/secret.key",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/somedir.git/secret.key",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/tmp/bad.docx",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/tmp/bad.docx",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_append_repo.json

@@ -3,6 +3,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: tmp/bad.docx",
   "offender": "Filename or path offender: tmp/bad.docx",
+  "offenderEntropy": -1,
   "commit": "b0f9b62dfe12e4e10de180359c6b9276472494f8",
   "commit": "b0f9b62dfe12e4e10de180359c6b9276472494f8",
   "repo": "test_repo_10",
   "repo": "test_repo_10",
   "repoURL": "",
   "repoURL": "",

+ 2 - 0
test_data/test_dir1_aws_leak.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_entropy.json

@@ -2,6 +2,7 @@
  {
  {
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "offender": "Entropy range [{P1:4.5 P2:4.7} {P1:5.5 P2:6.3}]",
   "offender": "Entropy range [{P1:4.5 P2:4.7} {P1:5.5 P2:6.3}]",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_1",
   "repo": "test_repo_1",
   "rule": "entropy",
   "rule": "entropy",

+ 1 - 0
test_data/test_file1_aws_leak.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",

+ 23 - 0
test_data/test_local_owner_aws_leak.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repos",
   "repo": "test_repos",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -51,6 +54,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -67,6 +71,7 @@
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -83,6 +88,7 @@
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -99,6 +105,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -115,6 +122,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -131,6 +139,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -147,6 +156,7 @@
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -163,6 +173,7 @@
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -179,6 +190,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -195,6 +207,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -211,6 +224,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -227,6 +241,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "1f2a4abc47dabf991e6af6f9770867ce0ac1f360",
   "commit": "1f2a4abc47dabf991e6af6f9770867ce0ac1f360",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "repoURL": "",
   "repoURL": "",
@@ -243,6 +258,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIAIO5FODNN7EXAMPL2",
   "offender": "AKIAIO5FODNN7EXAMPL2",
+  "offenderEntropy": -1,
   "commit": "ca71fcdeda15f25f0cc661d90e8785c255925c27",
   "commit": "ca71fcdeda15f25f0cc661d90e8785c255925c27",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "repoURL": "",
   "repoURL": "",
@@ -259,6 +275,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repos",
   "repo": "test_repos",
   "repoURL": "",
   "repoURL": "",
@@ -275,6 +292,7 @@
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "repoURL": "",
   "repoURL": "",
@@ -291,6 +309,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 2,
   "lineNumber": 2,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "ce7e8177bbf8a172c06b6a1e370a374d5c19f660",
   "commit": "ce7e8177bbf8a172c06b6a1e370a374d5c19f660",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -307,6 +326,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "9267bc86ec1497471cbc6f3308f3527f7ef34b9d",
   "commit": "9267bc86ec1497471cbc6f3308f3527f7ef34b9d",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -323,6 +343,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -339,6 +360,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE', #gitleaks:allow",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE', #gitleaks:allow",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "8d1fb60d2d80f0590f191ed5ace1e45ef780909a",
   "commit": "8d1fb60d2d80f0590f191ed5ace1e45ef780909a",
   "repo": "test_repo_9",
   "repo": "test_repo_9",
   "repoURL": "",
   "repoURL": "",
@@ -355,6 +377,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repos",
   "repo": "test_repos",
   "repoURL": "",
   "repoURL": "",

+ 22 - 0
test_data/test_local_owner_aws_leak_allowlist_repo.json

@@ -3,6 +3,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -51,6 +54,7 @@
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -67,6 +71,7 @@
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -83,6 +88,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -99,6 +105,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -115,6 +122,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -131,6 +139,7 @@
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -147,6 +156,7 @@
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -163,6 +173,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -179,6 +190,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -195,6 +207,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -211,6 +224,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIAIO5FODNN7EXAMPL2",
   "offender": "AKIAIO5FODNN7EXAMPL2",
+  "offenderEntropy": -1,
   "commit": "ca71fcdeda15f25f0cc661d90e8785c255925c27",
   "commit": "ca71fcdeda15f25f0cc661d90e8785c255925c27",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "repoURL": "",
   "repoURL": "",
@@ -227,6 +241,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "1f2a4abc47dabf991e6af6f9770867ce0ac1f360",
   "commit": "1f2a4abc47dabf991e6af6f9770867ce0ac1f360",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "repoURL": "",
   "repoURL": "",
@@ -243,6 +258,7 @@
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "repoURL": "",
   "repoURL": "",
@@ -259,6 +275,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repos",
   "repo": "test_repos",
   "repoURL": "",
   "repoURL": "",
@@ -275,6 +292,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -291,6 +309,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 2,
   "lineNumber": 2,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "ce7e8177bbf8a172c06b6a1e370a374d5c19f660",
   "commit": "ce7e8177bbf8a172c06b6a1e370a374d5c19f660",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -307,6 +326,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "9267bc86ec1497471cbc6f3308f3527f7ef34b9d",
   "commit": "9267bc86ec1497471cbc6f3308f3527f7ef34b9d",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -323,6 +343,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE', #gitleaks:allow",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE', #gitleaks:allow",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "8d1fb60d2d80f0590f191ed5ace1e45ef780909a",
   "commit": "8d1fb60d2d80f0590f191ed5ace1e45ef780909a",
   "repo": "test_repo_9",
   "repo": "test_repo_9",
   "repoURL": "",
   "repoURL": "",
@@ -339,6 +360,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repos",
   "repo": "test_repos",
   "repoURL": "",
   "repoURL": "",

+ 7 - 0
test_data/test_local_owner_aws_leak_depth_2.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repos",
   "repo": "test_repos",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "line": "const AWSKEY = \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -51,6 +54,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIAIO5FODNN7EXAMPL2",
   "offender": "AKIAIO5FODNN7EXAMPL2",
+  "offenderEntropy": -1,
   "commit": "ca71fcdeda15f25f0cc661d90e8785c255925c27",
   "commit": "ca71fcdeda15f25f0cc661d90e8785c255925c27",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "repoURL": "",
   "repoURL": "",
@@ -67,6 +71,7 @@
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "repoURL": "",
   "repoURL": "",
@@ -83,6 +88,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -99,6 +105,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE', #gitleaks:allow",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE', #gitleaks:allow",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "8d1fb60d2d80f0590f191ed5ace1e45ef780909a",
   "commit": "8d1fb60d2d80f0590f191ed5ace1e45ef780909a",
   "repo": "test_repo_9",
   "repo": "test_repo_9",
   "repoURL": "",
   "repoURL": "",

+ 3 - 0
test_data/test_local_repo_eight.json

@@ -3,6 +3,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "commit": "748f11eaf2c38c3cf0ac6a22e44208777e79fa6f",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 2,
   "lineNumber": 2,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "ce7e8177bbf8a172c06b6a1e370a374d5c19f660",
   "commit": "ce7e8177bbf8a172c06b6a1e370a374d5c19f660",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "9267bc86ec1497471cbc6f3308f3527f7ef34b9d",
   "commit": "9267bc86ec1497471cbc6f3308f3527f7ef34b9d",
   "repo": "test_repo_8",
   "repo": "test_repo_8",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_local_repo_five_at_latest_commit.json

@@ -3,6 +3,7 @@
   "line": "more_secrets = '99432bfewaf823ec3294e231'",
   "line": "more_secrets = '99432bfewaf823ec3294e231'",
   "lineNumber": 7,
   "lineNumber": 7,
   "offender": "secrets = '99432bfewaf823ec3294e231",
   "offender": "secrets = '99432bfewaf823ec3294e231",
+  "offenderEntropy": -1,
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "rule": "Generic Credential",
   "rule": "Generic Credential",

+ 1 - 0
test_data/test_local_repo_five_commit.json

@@ -3,6 +3,7 @@
   "line": "more_secrets = '99432bfewaf823ec3294e231'",
   "line": "more_secrets = '99432bfewaf823ec3294e231'",
   "lineNumber": 7,
   "lineNumber": 7,
   "offender": "secrets = '99432bfewaf823ec3294e231",
   "offender": "secrets = '99432bfewaf823ec3294e231",
+  "offenderEntropy": -1,
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "rule": "Generic Credential",
   "rule": "Generic Credential",

+ 2 - 0
test_data/test_local_repo_five_files_at_commit.json

@@ -3,6 +3,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",
@@ -18,6 +19,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIAIO5FODNN7EXAMPL2",
   "offender": "AKIAIO5FODNN7EXAMPL2",
+  "offenderEntropy": -1,
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 2 - 0
test_data/test_local_repo_five_files_at_latest_commit.json

@@ -3,6 +3,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPLE'",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",
@@ -18,6 +19,7 @@
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "line": "aws_access_key_id='AKIAIO5FODNN7EXAMPL2'",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIAIO5FODNN7EXAMPL2",
   "offender": "AKIAIO5FODNN7EXAMPL2",
+  "offenderEntropy": -1,
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "commit": "a4c9fb737d5552fd96fce5cc7eedb23353ba9ed0",
   "repo": "test_repo_5",
   "repo": "test_repo_5",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 2 - 0
test_data/test_local_repo_four_alt_config_entropy.json

@@ -3,6 +3,7 @@
   "line": "const AWSSECRET = \"99432bfewaf823ec3294e231\"",
   "line": "const AWSSECRET = \"99432bfewaf823ec3294e231\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "\"99432bfewaf823ec3294e231\"",
   "offender": "\"99432bfewaf823ec3294e231\"",
+  "offenderEntropy": 3.355,
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "commit": "84ac4e80d4dbf2c968b64e9d4005f5079795bb81",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "    const AWSSECRET = \"99432bfewaf823ec3294e231\"",
   "line": "    const AWSSECRET = \"99432bfewaf823ec3294e231\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "\"99432bfewaf823ec3294e231\"",
   "offender": "\"99432bfewaf823ec3294e231\"",
+  "offenderEntropy": 3.355,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",

+ 2 - 0
test_data/test_local_repo_four_leaks_commit_timerange.json

@@ -3,6 +3,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_4",
   "repo": "test_repo_4",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_local_repo_nine_aws_leak.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_9",
   "repo": "test_repo_9",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 1 - 0
test_data/test_local_repo_one_aws_leak.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_1",
   "repo": "test_repo_1",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_local_repo_one_aws_leak_and_file_leak.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_1",
   "repo": "test_repo_1",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 1 - 0
test_data/test_local_repo_one_aws_leak_commit.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_1",
   "repo": "test_repo_1",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 1 - 0
test_data/test_local_repo_one_aws_leak_uncommitted.json

@@ -3,6 +3,7 @@
   "line": " aws_access_key_id='AKIAIO5FODNN7DXAMPLE'",
   "line": " aws_access_key_id='AKIAIO5FODNN7DXAMPLE'",
   "lineNumber": 10,
   "lineNumber": 10,
   "offender": "AKIAIO5FODNN7DXAMPLE",
   "offender": "AKIAIO5FODNN7DXAMPLE",
+  "offenderEntropy": -1,
   "commit": "0000000000000000000000000000000000000000",
   "commit": "0000000000000000000000000000000000000000",
   "repo": "test_repo_1",
   "repo": "test_repo_1",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_local_repo_seven_aws_leak_uncommitted.json

@@ -3,6 +3,7 @@
   "line": "AKIAIO5FODNN7EXAMPLE",
   "line": "AKIAIO5FODNN7EXAMPLE",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "0000000000000000000000000000000000000000",
   "commit": "0000000000000000000000000000000000000000",
   "repo": "test_repo_7",
   "repo": "test_repo_7",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 3 - 0
test_data/test_local_repo_six.json

@@ -3,6 +3,7 @@
   "line": "api_token: exampleSecretPassword",
   "line": "api_token: exampleSecretPassword",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "token: exampleSecretPassword",
   "offender": "token: exampleSecretPassword",
+  "offenderEntropy": -1,
   "commit": "e7bf376f855ae9bc6e3bb27b5f9d65c57eba799d",
   "commit": "e7bf376f855ae9bc6e3bb27b5f9d65c57eba799d",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "Generic password",
   "rule": "Generic password",
@@ -17,6 +18,7 @@
   "line": "db_password_token: exampleSecretPassword",
   "line": "db_password_token: exampleSecretPassword",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "password_token: exampleSecretPassword",
   "offender": "password_token: exampleSecretPassword",
+  "offenderEntropy": -1,
   "commit": "e7bf376f855ae9bc6e3bb27b5f9d65c57eba799d",
   "commit": "e7bf376f855ae9bc6e3bb27b5f9d65c57eba799d",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "Generic password",
   "rule": "Generic password",
@@ -31,6 +33,7 @@
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "95cf0237f8cdfc0686a29df08260d8635f46c9b0",
   "commit": "95cf0237f8cdfc0686a29df08260d8635f46c9b0",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 2 - 0
test_data/test_local_repo_six_filename.json

@@ -3,6 +3,7 @@
   "line": "api_token: exampleSecretPassword",
   "line": "api_token: exampleSecretPassword",
   "lineNumber": 2,
   "lineNumber": 2,
   "offender": "token: exampleSecretPassword",
   "offender": "token: exampleSecretPassword",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "Generic password",
   "rule": "Generic password",
@@ -18,6 +19,7 @@
   "line": "db_password: verySecretProductionPassword",
   "line": "db_password: verySecretProductionPassword",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "password: verySecretProductionPassword",
   "offender": "password: verySecretProductionPassword",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "Generic password",
   "rule": "Generic password",

+ 1 - 0
test_data/test_local_repo_six_filepath.json

@@ -3,6 +3,7 @@
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 1 - 0
test_data/test_local_repo_six_filepath_filename.json

@@ -3,6 +3,7 @@
   "line": "apiToken=d41d8cd98f00b204e9800998ecf8427e",
   "line": "apiToken=d41d8cd98f00b204e9800998ecf8427e",
   "lineNumber": 2,
   "lineNumber": 2,
   "offender": "Token=d41d8cd98f00b204e9800998ecf8427e",
   "offender": "Token=d41d8cd98f00b204e9800998ecf8427e",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "Generic password",
   "rule": "Generic password",

+ 1 - 0
test_data/test_local_repo_six_leaks_since_date.json

@@ -3,6 +3,7 @@
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "line": "aws_access_key_id=AKIAIO5FODNN7EXAMPLE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "commit": "98b6c7cb3fb29a5993c4c95c56a2dc53050b9247",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 1 - 0
test_data/test_local_repo_six_leaks_until_date.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 1 - 0
test_data/test_local_repo_six_path_globally_allowlisted.json

@@ -3,6 +3,7 @@
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "line": "    aws_access_key_id='AKIAIO5FODNN7EXAMPLE',",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIAIO5FODNN7EXAMPLE",
   "offender": "AKIAIO5FODNN7EXAMPLE",
+  "offenderEntropy": -1,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_6",
   "repo": "test_repo_6",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 4 - 0
test_data/test_local_repo_three_leaks.json

@@ -3,6 +3,7 @@
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -51,6 +54,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",

+ 3 - 0
test_data/test_local_repo_three_leaks_with_report_groups.json

@@ -3,6 +3,7 @@
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "commit": "deea550dd6c7acaf0e59432600593533984a2125",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_3",
   "repo": "test_repo_3",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_local_repo_two_allowlist_commits.json

@@ -3,6 +3,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",

+ 3 - 0
test_data/test_local_repo_two_leaks.json

@@ -3,6 +3,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",

+ 2 - 0
test_data/test_local_repo_two_leaks_commit_from.json

@@ -3,6 +3,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",

+ 2 - 0
test_data/test_local_repo_two_leaks_commit_range.json

@@ -3,6 +3,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_local_repo_two_leaks_commit_to.json

@@ -3,6 +3,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 4,
   "lineNumber": 4,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_local_repo_two_leaks_commit_to_from.json

@@ -3,6 +3,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",

+ 6 - 0
test_data/test_local_repo_two_leaks_deletion.json

@@ -3,6 +3,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": -1,
   "lineNumber": -1,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "f61cd8587b7ac1d75a89a0c9af870a2f24c60263",
   "commit": "f61cd8587b7ac1d75a89a0c9af870a2f24c60263",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",
@@ -18,6 +19,7 @@
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "line": "    const AWSKEY = \"AKIALALEMEL33243OLIBE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIB",
   "offender": "AKIALALEMEL33243OLIB",
+  "offenderEntropy": -1,
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "commit": "b2eb34a61c988afd9b4aaa9dd58c8dd7d5f14dba",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",
@@ -33,6 +35,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": -1,
   "lineNumber": -1,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "996865bb912f3bc45898a370a13aadb315014b55",
   "commit": "996865bb912f3bc45898a370a13aadb315014b55",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",
@@ -48,6 +51,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": -1,
   "lineNumber": -1,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",
@@ -63,6 +67,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 5,
   "lineNumber": 5,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",
@@ -78,6 +83,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "rule": "AWS Access Key",
   "rule": "AWS Access Key",

+ 2 - 0
test_data/test_local_repo_two_leaks_file_commit_range.json

@@ -3,6 +3,7 @@
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "line": "Here's an AWS secret: \"AKIALALEMEL33243OLIAE\"",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "commit": "17471a5fda722a9e423f1a0d3f0d267ea009d41c",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "line": "Here's an AWS secret: AKIALALEMEL33243OLIAE",
   "lineNumber": 3,
   "lineNumber": 3,
   "offender": "AKIALALEMEL33243OLIA",
   "offender": "AKIALALEMEL33243OLIA",
+  "offenderEntropy": -1,
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "commit": "b10b3e2cb320a8c211fda94c4567299d37de7776",
   "repo": "test_repo_2",
   "repo": "test_repo_2",
   "repoURL": "",
   "repoURL": "",

+ 9 - 0
test_data/test_only_files_no_git.json

@@ -3,6 +3,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/README.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_10/README.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -19,6 +20,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_2/secrets.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_2/secrets.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -35,6 +37,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_2/no_secrets.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_2/no_secrets.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -51,6 +54,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_3/no_secrets.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_3/no_secrets.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -67,6 +71,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_3/secrets.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_3/secrets.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -83,6 +88,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_4/secrets.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_4/secrets.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -99,6 +105,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_4/no_secrets.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_4/no_secrets.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -115,6 +122,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_5/notes.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_5/notes.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",
@@ -131,6 +139,7 @@
   "line": "",
   "line": "",
   "lineNumber": 1,
   "lineNumber": 1,
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_8/README.md",
   "offender": "Filename or path offender: ../test_data/test_repos/test_repo_8/README.md",
+  "offenderEntropy": -1,
   "commit": "",
   "commit": "",
   "repo": "",
   "repo": "",
   "repoURL": "",
   "repoURL": "",

+ 1 - 0
test_data/test_regex_entropy.json

@@ -3,6 +3,7 @@
   "line": "    aws_secret_access_key='ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE'",
   "line": "    aws_secret_access_key='ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE'",
   "lineNumber": 6,
   "lineNumber": 6,
   "offender": "'ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE'",
   "offender": "'ABCDEF+c2L7yXeGvUyrPgYsDnWRRC1AYEXAMPLE'",
+  "offenderEntropy": 4.631,
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "commit": "6557c92612d3b35979bd426d429255b3bf9fab74",
   "repo": "test_repo_1",
   "repo": "test_repo_1",
   "rule": "entropy and regex",
   "rule": "entropy and regex",