From 6f3cbb0a38e2757556961fe467d10553de42d36e Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 00:27:36 -0400
Subject: [PATCH 1/9] Auto press start/process button on Enter key
---
src/Picocrypt.go | 205 +++++++++++++++++++++++++----------------------
1 file changed, 108 insertions(+), 97 deletions(-)
diff --git a/src/Picocrypt.go b/src/Picocrypt.go
index 10baa94..430b94f 100644
--- a/src/Picocrypt.go
+++ b/src/Picocrypt.go
@@ -173,10 +173,117 @@ func (p *compressorProgress) Read(data []byte) (int, error) {
return read, err
}
+var onClickStartButton = func() {
+ // Start button should be disabled if these conditions are true; don't do anything if so
+ if (len(keyfiles) == 0 && password == "") || (mode == "encrypt" && password != cpassword) {
+ return
+ }
+
+ if keyfile && keyfiles == nil {
+ mainStatus = "Please select your keyfiles"
+ mainStatusColor = RED
+ return
+ }
+ tmp, err := strconv.Atoi(splitSize)
+ if split && (splitSize == "" || tmp <= 0 || err != nil) {
+ mainStatus = "Invalid chunk size"
+ mainStatusColor = RED
+ return
+ }
+
+ // Check if output file already exists
+ _, err = os.Stat(outputFile)
+
+ // Check if any split chunks already exist
+ if split {
+ names, _ := filepath.Glob(outputFile + ".*")
+ if len(names) > 0 {
+ err = nil
+ } else {
+ err = os.ErrNotExist
+ }
+ }
+
+ // If files already exist, show the overwrite modal
+ if err == nil && !recursively {
+ showOverwrite = true
+ modalId++
+ giu.Update()
+ } else { // Nothing to worry about, start working
+ showProgress = true
+ fastDecode = true
+ canCancel = true
+ modalId++
+ giu.Update()
+ if !recursively {
+ go func() {
+ work()
+ working = false
+ showProgress = false
+ giu.Update()
+ }()
+ } else {
+ // Store variables as they will be cleared
+ oldPassword := password
+ oldKeyfile := keyfile
+ oldKeyfiles := keyfiles
+ oldKeyfileOrdered := keyfileOrdered
+ oldKeyfileLabel := keyfileLabel
+ oldComments := comments
+ oldParanoid := paranoid
+ oldReedsolo := reedsolo
+ oldDeniability := deniability
+ oldSplit := split
+ oldSplitSize := splitSize
+ oldSplitSelected := splitSelected
+ oldDelete := delete
+ files := allFiles
+ go func() {
+ for _, file := range files {
+ // Simulate dropping the file
+ onDrop([]string{file})
+
+ // Restore variables and options
+ password = oldPassword
+ cpassword = oldPassword
+ keyfile = oldKeyfile
+ keyfiles = oldKeyfiles
+ keyfileOrdered = oldKeyfileOrdered
+ keyfileLabel = oldKeyfileLabel
+ comments = oldComments
+ paranoid = oldParanoid
+ reedsolo = oldReedsolo
+ deniability = oldDeniability
+ split = oldSplit
+ splitSize = oldSplitSize
+ splitSelected = oldSplitSelected
+ delete = oldDelete
+
+ work()
+ if !working {
+ resetUI()
+ cancel(nil, nil)
+ showProgress = false
+ giu.Update()
+ return
+ }
+ }
+ working = false
+ showProgress = false
+ giu.Update()
+ }()
+ }
+ }
+}
+
// The main user interface
func draw() {
giu.SingleWindow().Flags(524351).Layout(
giu.Custom(func() {
+ if giu.IsKeyReleased(giu.KeyEnter) {
+ onClickStartButton()
+ return
+ }
if showPassgen {
giu.PopupModal("Generate password:##"+strconv.Itoa(modalId)).Flags(6).Layout(
giu.Row(
@@ -653,103 +760,7 @@ func draw() {
return startLabel
}
return "Process"
- }()).Size(giu.Auto, 34).OnClick(func() {
- if keyfile && keyfiles == nil {
- mainStatus = "Please select your keyfiles"
- mainStatusColor = RED
- return
- }
- tmp, err := strconv.Atoi(splitSize)
- if split && (splitSize == "" || tmp <= 0 || err != nil) {
- mainStatus = "Invalid chunk size"
- mainStatusColor = RED
- return
- }
-
- // Check if output file already exists
- _, err = os.Stat(outputFile)
-
- // Check if any split chunks already exist
- if split {
- names, _ := filepath.Glob(outputFile + ".*")
- if len(names) > 0 {
- err = nil
- } else {
- err = os.ErrNotExist
- }
- }
-
- // If files already exist, show the overwrite modal
- if err == nil && !recursively {
- showOverwrite = true
- modalId++
- giu.Update()
- } else { // Nothing to worry about, start working
- showProgress = true
- fastDecode = true
- canCancel = true
- modalId++
- giu.Update()
- if !recursively {
- go func() {
- work()
- working = false
- showProgress = false
- giu.Update()
- }()
- } else {
- // Store variables as they will be cleared
- oldPassword := password
- oldKeyfile := keyfile
- oldKeyfiles := keyfiles
- oldKeyfileOrdered := keyfileOrdered
- oldKeyfileLabel := keyfileLabel
- oldComments := comments
- oldParanoid := paranoid
- oldReedsolo := reedsolo
- oldDeniability := deniability
- oldSplit := split
- oldSplitSize := splitSize
- oldSplitSelected := splitSelected
- oldDelete := delete
- files := allFiles
- go func() {
- for _, file := range files {
- // Simulate dropping the file
- onDrop([]string{file})
-
- // Restore variables and options
- password = oldPassword
- cpassword = oldPassword
- keyfile = oldKeyfile
- keyfiles = oldKeyfiles
- keyfileOrdered = oldKeyfileOrdered
- keyfileLabel = oldKeyfileLabel
- comments = oldComments
- paranoid = oldParanoid
- reedsolo = oldReedsolo
- deniability = oldDeniability
- split = oldSplit
- splitSize = oldSplitSize
- splitSelected = oldSplitSelected
- delete = oldDelete
-
- work()
- if !working {
- resetUI()
- cancel(nil, nil)
- showProgress = false
- giu.Update()
- return
- }
- }
- working = false
- showProgress = false
- giu.Update()
- }()
- }
- }
- }),
+ }()).Size(giu.Auto, 34).OnClick(onClickStartButton),
giu.Style().SetColor(giu.StyleColorText, mainStatusColor).To(
giu.Label(mainStatus),
),
From d9473f777bf020f79db8b057ca7510413df138d8 Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 00:38:09 -0400
Subject: [PATCH 2/9] Bump to 1.48, update changelog
---
Changelog.md | 5 +++++
VERSION | 2 +-
src/Picocrypt.go | 4 ++--
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/Changelog.md b/Changelog.md
index 8a81c2e..4ede0b6 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -3,6 +3,11 @@
Migrate golang.org/x/crypto to standard library imports (https://github.com/golang/go/issues/65269)
+# v1.48 (Released 04/11/2025)
+
+ - ✓ Allow pressing 'Enter' key to press Start/Process button
+
+
# v1.47 (Released 02/19/2025)
- ✓ No code changes, just build on newly released Go 1.24
diff --git a/VERSION b/VERSION
index 99dd716..46284af 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.47
+1.48
\ No newline at end of file
diff --git a/src/Picocrypt.go b/src/Picocrypt.go
index 430b94f..84ac805 100644
--- a/src/Picocrypt.go
+++ b/src/Picocrypt.go
@@ -2,7 +2,7 @@ package main
/*
-Picocrypt v1.47
+Picocrypt v1.48
Copyright (c) Evan Su
Released under a GNU GPL v3 License
https://github.com/Picocrypt/Picocrypt
@@ -60,7 +60,7 @@ var TRANSPARENT = color.RGBA{0x00, 0x00, 0x00, 0x00}
// Generic variables
var window *giu.MasterWindow
-var version = "v1.47"
+var version = "v1.48"
var dpi float32
var mode string
var working bool
From 333aca2a8053dbda76a0892ac10f73b94396d128 Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 01:20:40 -0400
Subject: [PATCH 3/9] Add warnings for zip and external destinations
When encrypting multiple files, Picocrypt will zip them to a temporary zip file on the target location with a .tmp extension. This comes with two issues: 1. requires double the volume size of free storage; 2. external drive must not be unsafe to host the unencrypted temporary zip file.
Prevent potential footguns by showing warnings where appropriate.
---
src/Picocrypt.go | 46 ++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 42 insertions(+), 4 deletions(-)
diff --git a/src/Picocrypt.go b/src/Picocrypt.go
index 84ac805..2c2cc0a 100644
--- a/src/Picocrypt.go
+++ b/src/Picocrypt.go
@@ -30,6 +30,7 @@ import (
"os"
"path/filepath"
"regexp"
+ "runtime"
"strconv"
"strings"
"time"
@@ -131,6 +132,9 @@ var mainStatus = "Ready"
var mainStatusColor = WHITE
var popupStatus string
+var temporaryZip bool
+var externalDst bool
+
// Progress variables
var progress float32
var progressInfo string
@@ -606,7 +610,7 @@ func draw() {
giu.Checkbox("Paranoid mode", ¶noid),
giu.Tooltip("Provides the highest level of security attainable"),
giu.Dummy(-170, 0),
- giu.Style().SetDisabled(recursively).To(
+ giu.Style().SetDisabled(recursively || !(len(allFiles) > 1 || len(onlyFolders) > 0)).To(
giu.Checkbox("Compress files", &compress).OnChange(func() {
if !(len(allFiles) > 1 || len(onlyFolders) > 0) {
if compress {
@@ -736,6 +740,21 @@ func draw() {
} else {
file += filepath.Ext(inputFile) + ".pcv"
}
+ externalDst = false
+ GOOS := strings.ToLower(runtime.GOOS)
+ if strings.HasPrefix(GOOS, "windows") {
+ if !strings.HasPrefix(file, "C:") {
+ externalDst = true
+ }
+ } else if strings.HasPrefix(GOOS, "linux") {
+ if strings.Contains(file, "/media/") || strings.Contains(file, "/mnt/") {
+ externalDst = true
+ }
+ } else if strings.HasPrefix(GOOS, "darwin") {
+ if strings.Contains(file, "/Volumes/") {
+ externalDst = true
+ }
+ }
} else {
if strings.HasSuffix(inputFile, ".zip.pcv") {
file += ".zip"
@@ -761,9 +780,25 @@ func draw() {
}
return "Process"
}()).Size(giu.Auto, 34).OnClick(onClickStartButton),
- giu.Style().SetColor(giu.StyleColorText, mainStatusColor).To(
- giu.Label(mainStatus),
- ),
+ giu.Custom(func() {
+ if temporaryZip && externalDst {
+ giu.Style().SetColor(giu.StyleColorText, YELLOW).To(
+ giu.Label("Warning: unencrypted temp files will be created"),
+ ).Build()
+ } else if temporaryZip {
+ giu.Style().SetColor(giu.StyleColorText, WHITE).To(
+ giu.Label(mainStatus + " (info: will create temporary files)"),
+ ).Build()
+ } else if externalDst {
+ giu.Style().SetColor(giu.StyleColorText, WHITE).To(
+ giu.Label(mainStatus + " (info: target may be an external drive)"),
+ ).Build()
+ } else {
+ giu.Style().SetColor(giu.StyleColorText, mainStatusColor).To(
+ giu.Label(mainStatus),
+ ).Build()
+ }
+ }),
),
giu.Custom(func() {
@@ -1000,6 +1035,7 @@ func onDrop(names []string) {
// Set the input and output paths
inputFile = filepath.Join(filepath.Dir(names[0]), "Encrypted") + ".zip"
outputFile = inputFile + ".pcv"
+ temporaryZip = true
}
// Recursively add all files in 'onlyFolders' to 'allFiles'
@@ -2262,6 +2298,8 @@ func resetUI() {
mainStatus = "Ready"
mainStatusColor = WHITE
popupStatus = ""
+ temporaryZip = false
+ externalDst = false
progress = 0
progressInfo = ""
From a0e6e30e7b12e5b435b520976acccc48892a8ced Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 01:37:56 -0400
Subject: [PATCH 4/9] add external drive warnings to changelog and readme
---
Changelog.md | 1 +
README.md | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/Changelog.md b/Changelog.md
index 4ede0b6..3a088ad 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -6,6 +6,7 @@
# v1.48 (Released 04/11/2025)
- ✓ Allow pressing 'Enter' key to press Start/Process button
+ - ✓ Warn user when encrypting multiple files to an external drive
# v1.47 (Released 02/19/2025)
diff --git a/README.md b/README.md
index 73f0835..2b15221 100644
--- a/README.md
+++ b/README.md
@@ -92,6 +92,14 @@ While being simple, Picocrypt also strives to be powerful in the hands of knowle
- Recursively: If you want to encrypt and/or decrypt a large set of files individually, this option will tell Picocrypt to go through every recursive file that you drop in and encrypt/decrypt it separately. This is useful, for example, if you are encrypting thousands of large documents and want to be able to decrypt any one of them in particular without having to download and decrypt the entire set of documents. Keep in mind that this is a very complex feature that should only be used if you know what you are doing.
+# Caveats
+When encrypting multiple files, Picocrypt will automatically zip them into one file before encrypting it. However, this requires a two-step process that creates an unencrypted temporary `.zip.tmp` file in the same destination folder. This has two implications:
+
+ - There must be at least double the available free space on the target drive as the combined total size of input files
+ - The target drive must be safe to save confidential data; if not, the unencrypted temporary file may be recoverable even after deletion
+
+To mitigate these caveats, Picocrypt will show info and warning labels accordingly. However, it is best to prevent these issues altogether by always encrypting and decrypting on your main host drive and then copying encrypted volumes to and from external sources, or zipping up input files beforehand and encrypting that single file which doesn't have these caveats.
+
# Security
For more information on how Picocrypt handles cryptography, see Internals for the technical details. If you're worried about the safety of me or this project, let me assure you that this repository won't be hijacked or backdoored. I have 2FA (TOTP) enabled on all accounts with a tie to Picocrypt (GitHub, Reddit, Google, etc.), in addition to full-disk encryption on all of my portable devices. For further hardening, Picocrypt uses my isolated forks of dependencies and I fetch upstream only when I have taken a look at the changes and believe that there aren't any security issues. This means that if a dependency gets hacked or deleted by the author, Picocrypt will be using my fork of it and remain completely unaffected. You can feel confident about using Picocrypt as long as you understand:
From 55ec72864e941fd39e0c43fcc40b285988d73aaa Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 12:27:49 -0400
Subject: [PATCH 5/9] Only show info/warnings if status is "Ready"
If not, it's probably showing some error message which would happen after starting encryption, so user would've already seen the info/warning status
---
src/Picocrypt.go | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/Picocrypt.go b/src/Picocrypt.go
index 2c2cc0a..3587e44 100644
--- a/src/Picocrypt.go
+++ b/src/Picocrypt.go
@@ -781,21 +781,27 @@ func draw() {
return "Process"
}()).Size(giu.Auto, 34).OnClick(onClickStartButton),
giu.Custom(func() {
+ if mainStatus != "Ready" {
+ giu.Style().SetColor(giu.StyleColorText, mainStatusColor).To(
+ giu.Label(mainStatus),
+ ).Build()
+ return
+ }
if temporaryZip && externalDst {
giu.Style().SetColor(giu.StyleColorText, YELLOW).To(
giu.Label("Warning: unencrypted temp files will be created"),
).Build()
} else if temporaryZip {
giu.Style().SetColor(giu.StyleColorText, WHITE).To(
- giu.Label(mainStatus + " (info: will create temporary files)"),
+ giu.Label("Ready (info: will create a temporary zip file)"),
).Build()
} else if externalDst {
giu.Style().SetColor(giu.StyleColorText, WHITE).To(
- giu.Label(mainStatus + " (info: target may be an external drive)"),
+ giu.Label("Ready (info: target may be an external drive)"),
).Build()
} else {
giu.Style().SetColor(giu.StyleColorText, mainStatusColor).To(
- giu.Label(mainStatus),
+ giu.Label("Ready"),
).Build()
}
}),
From f429f1b1eeb8f4589bbbaf7c7b298411f7bc2094 Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 12:29:10 -0400
Subject: [PATCH 6/9] README.md: remove installer link
Maybe will add in a future release, but not for 1.48
---
README.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/README.md b/README.md
index 2b15221..ecf5b3e 100644
--- a/README.md
+++ b/README.md
@@ -18,8 +18,6 @@ Picocrypt is a very small (hence Pico), very simple, yet very secure encr
## Windows
Picocrypt for Windows is as simple as it gets. To download the latest, standalone, and portable executable for Windows, click here. If Microsoft Defender or your antivirus flags Picocrypt as a virus, please do your part and submit it as a false positive for the betterment of everyone.
-If you use Picocrypt frequently, you can download an installer here for easier launching. It does not require any admin permissions to install and it also bundles a software OpenGL renderer for compatibility, so if the portable executable isn't working, this installer likely will.
-
## macOS
Picocrypt for macOS is very simple as well. Download Picocrypt here, open the container, and drag Picocrypt to your Applications. You may need to manually trust the app from a terminal and control-click on the app if macOS prevents you from opening it:
```
From 9287fca7b72fad93be223b4968c33726f29c6a74 Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 12:33:21 -0400
Subject: [PATCH 7/9] Remove future section from changelog
The golang.org/x/crypto -> stdlib migration done in Go 1.24 is not a simple find and replace as some types changed. Will stick with golang.org/x/crypto for the foreseeable future.
---
Changelog.md | 5 -----
1 file changed, 5 deletions(-)
diff --git a/Changelog.md b/Changelog.md
index 3a088ad..fffc47f 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,8 +1,3 @@
-# Future
-
- - Migrate golang.org/x/crypto to standard library imports (https://github.com/golang/go/issues/65269)
-
-
# v1.48 (Released 04/11/2025)
- ✓ Allow pressing 'Enter' key to press Start/Process button
From fd95597f02d5662abc0c313ea55ee76623b71109 Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Thu, 10 Apr 2025 12:37:35 -0400
Subject: [PATCH 8/9] go get -u -v all && go mod tidy
Nothing really changed, just bumped go version in go.mod of deps to 1.24
---
src/go.mod | 14 +++++++-------
src/go.sum | 28 ++++++++++++++--------------
2 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/src/go.mod b/src/go.mod
index 2f30308..0b8c76d 100644
--- a/src/go.mod
+++ b/src/go.mod
@@ -3,18 +3,18 @@ module Picocrypt
go 1.24
require (
- github.com/Picocrypt/dialog v0.0.0-20240831001746-9ca708a9cd29
- github.com/Picocrypt/giu v0.0.0-20240831005244-5771b35043ac
- github.com/Picocrypt/imgui-go v0.0.0-20240831004007-6f60d7beadf6
- github.com/Picocrypt/infectious v0.0.0-20240830233326-3a050f65f9ec
+ github.com/Picocrypt/dialog v0.0.0-20250410154130-d98dc55ea635
+ github.com/Picocrypt/giu v0.0.0-20250410155113-88f8ef80cbaf
+ github.com/Picocrypt/imgui-go v0.0.0-20250410154824-2e0c0440a8da
+ github.com/Picocrypt/infectious v0.0.0-20250410153626-f2f1c05d0452
github.com/Picocrypt/serpent v0.0.0-20240830233833-9ad6ab254fd7
- github.com/Picocrypt/zxcvbn-go v0.0.0-20240831000415-fccb38ccb913
+ github.com/Picocrypt/zxcvbn-go v0.0.0-20250410153845-b5da60d3e882
golang.org/x/crypto v0.37.0
)
require (
- github.com/Picocrypt/gl v0.0.0-20240831002619-6531d2bba5fc // indirect
- github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20240831003212-7f16c5fb374b // indirect
+ github.com/Picocrypt/gl v0.0.0-20250410154226-55bdd7d785fc // indirect
+ github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250410154351-5db5bbd64322 // indirect
github.com/Picocrypt/mainthread v0.0.0-20240831004314-496f638392b3 // indirect
github.com/Picocrypt/w32 v0.0.0-20240831001500-1183079d4d57 // indirect
golang.org/x/sys v0.32.0 // indirect
diff --git a/src/go.sum b/src/go.sum
index b6b9df4..1817016 100644
--- a/src/go.sum
+++ b/src/go.sum
@@ -1,23 +1,23 @@
-github.com/Picocrypt/dialog v0.0.0-20240831001746-9ca708a9cd29 h1:WIgRST/mpLiBEG2MF5MRPBDYYevLw7y14cwUEDjG5+Q=
-github.com/Picocrypt/dialog v0.0.0-20240831001746-9ca708a9cd29/go.mod h1:raXVkdcX4495+fW9Ac+kvPMHRNk0rOcNXEWFD71B2As=
-github.com/Picocrypt/giu v0.0.0-20240831005244-5771b35043ac h1:Z21enGbi450NyI7UZSoEuu//axifyGl63BJVjHX3ZXc=
-github.com/Picocrypt/giu v0.0.0-20240831005244-5771b35043ac/go.mod h1:x7jbmZVofU9rn5WJj2+riU85Zo0MFlfp1sMTnKFQhc0=
-github.com/Picocrypt/gl v0.0.0-20240831002619-6531d2bba5fc h1:5ckKMFhiz/Af6+sdkGlw74BU+rKRmoFWqU/rXHGUe3g=
-github.com/Picocrypt/gl v0.0.0-20240831002619-6531d2bba5fc/go.mod h1:VknKAZzEoKP9nqrc/dveCwR5L01B9V8yLqtpvYmQ3DA=
-github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20240831003212-7f16c5fb374b h1:hSaQU4P9KbMg9s2Jp2mTk9G5G+zkf4Yse5YRoxWTDTk=
-github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20240831003212-7f16c5fb374b/go.mod h1:r5awTCSm/ugmTRKmT8Hr0T4xGPI6K35eFK0s3jYCW+s=
-github.com/Picocrypt/imgui-go v0.0.0-20240831004007-6f60d7beadf6 h1:Y6SuxbSkQSU1hdEOpoMvp6Akq3RVX6KP1U4pKjGv3qo=
-github.com/Picocrypt/imgui-go v0.0.0-20240831004007-6f60d7beadf6/go.mod h1:mGfOCkgyafVMIs1tU70va3lFSh6hSb+Vq4paVLX1Fjg=
-github.com/Picocrypt/infectious v0.0.0-20240830233326-3a050f65f9ec h1:/cop0/v0HxIJm1XGDgIlzNJ3e4HhM8nIUPZi5RZ/n1w=
-github.com/Picocrypt/infectious v0.0.0-20240830233326-3a050f65f9ec/go.mod h1:aaFq/WMVxrU2Exl/tXbTFSXajZrqw0mgn/wi42n0fK4=
+github.com/Picocrypt/dialog v0.0.0-20250410154130-d98dc55ea635 h1:mZl+aiuQSQhe/C1Y4NdJ7w6KdjAEyr5Va2JHGdDvF3E=
+github.com/Picocrypt/dialog v0.0.0-20250410154130-d98dc55ea635/go.mod h1:bScGI7SMxXUo4EtwGfDkeA7owLj99QBn8nlqnqxacHU=
+github.com/Picocrypt/giu v0.0.0-20250410155113-88f8ef80cbaf h1:mDXu/vjyoxcXg44ejbpRhiZg1NmzMlez6ikEkZ03G6c=
+github.com/Picocrypt/giu v0.0.0-20250410155113-88f8ef80cbaf/go.mod h1:fDUYbcghlVwlEoWkp+4LwQd1DJft1XZ9uTaHskd2gno=
+github.com/Picocrypt/gl v0.0.0-20250410154226-55bdd7d785fc h1:PhgkrhrXcMVDJUHfTjJ+U1soq+eiaeWheEELXZau62k=
+github.com/Picocrypt/gl v0.0.0-20250410154226-55bdd7d785fc/go.mod h1:aHUxrywhiLVtrH6Yus/4N9VtOFzsEPp1AJj2ioFgswg=
+github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250410154351-5db5bbd64322 h1:eeD6947JcMIeRhlPkXWedfi8IqdZuX/k0dVM8nEB+bc=
+github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250410154351-5db5bbd64322/go.mod h1:7StnBznBEzR4cEtV5ptfQfMBgmv05p+b4ImwZ+pXXKQ=
+github.com/Picocrypt/imgui-go v0.0.0-20250410154824-2e0c0440a8da h1:zea0P1s/ykcWU1zbBxVLgCjSwRhT7+u1KoYPQHuStjQ=
+github.com/Picocrypt/imgui-go v0.0.0-20250410154824-2e0c0440a8da/go.mod h1:crmefGfhM5+lQUU/fbS9Hjs8xOlrrJI235vwnktN9PE=
+github.com/Picocrypt/infectious v0.0.0-20250410153626-f2f1c05d0452 h1:9UqCRY4qLDpIfxW+N51JPTn0KDKg88um+BVXApTl0NI=
+github.com/Picocrypt/infectious v0.0.0-20250410153626-f2f1c05d0452/go.mod h1:S99y5mnE1SZcr3n2DNDkdYZ9QJD4OmnGXlQ9TvLLC+M=
github.com/Picocrypt/mainthread v0.0.0-20240831004314-496f638392b3 h1:a62XmbZYhHGDR15C1gxp/IPfJX5SflrJuGpqNoOOK7w=
github.com/Picocrypt/mainthread v0.0.0-20240831004314-496f638392b3/go.mod h1:bsUKeX+/53rCTrItl3YUaeaN5tXl1v6326ZI90xIOsc=
github.com/Picocrypt/serpent v0.0.0-20240830233833-9ad6ab254fd7 h1:G36G2vmQAS7CVoHQrHDGAoCWll/0kPCI8Dk7mgwcJFE=
github.com/Picocrypt/serpent v0.0.0-20240830233833-9ad6ab254fd7/go.mod h1:BxsgRYwUVd92aEwXnXsfXfHw8aHlD/PUyExC/wwk9oI=
github.com/Picocrypt/w32 v0.0.0-20240831001500-1183079d4d57 h1:jusSXTp0h5wz8lxNXStw0jXr/ogZF6rzRF8gu0534hA=
github.com/Picocrypt/w32 v0.0.0-20240831001500-1183079d4d57/go.mod h1:FkeZHdKlITdP34VknO8yLdRY5pCi+iWEhDSA0YsBhZc=
-github.com/Picocrypt/zxcvbn-go v0.0.0-20240831000415-fccb38ccb913 h1:QGv9QiTkNZ2iRmXEd7nNopaUJMBhBdBcsvWPl+v51AY=
-github.com/Picocrypt/zxcvbn-go v0.0.0-20240831000415-fccb38ccb913/go.mod h1:dMyJ/0E4MeBo2wH1ZYmvPTChnYSj2MjLUndvYQt0vGw=
+github.com/Picocrypt/zxcvbn-go v0.0.0-20250410153845-b5da60d3e882 h1:W5f997Hcoi9PiU2j3TSsjryNKQ2+jIiHChpOnf485Xc=
+github.com/Picocrypt/zxcvbn-go v0.0.0-20250410153845-b5da60d3e882/go.mod h1:pIpFJD6Ey6jxU5GXMZ3Kc4wF9B49OJy9wTwwE3bJRPI=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
From a849de0edd9dabd7894b8bf7e651c8680d660357 Mon Sep 17 00:00:00 2001
From: Evan Su <48808396+HACKERALERT@users.noreply.github.com>
Date: Sun, 13 Apr 2025 00:59:56 -0400
Subject: [PATCH 9/9] go get -u -v all && go mod tidy
codeql doesn't like go 1.24 without the .0 after 1.24in go.mod, so I added those in all dependencies
---
src/go.mod | 14 +++++++-------
src/go.sum | 28 ++++++++++++++--------------
2 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/src/go.mod b/src/go.mod
index 0b86bd6..e1efc59 100644
--- a/src/go.mod
+++ b/src/go.mod
@@ -3,18 +3,18 @@ module Picocrypt
go 1.24.2
require (
- github.com/Picocrypt/dialog v0.0.0-20250410154130-d98dc55ea635
- github.com/Picocrypt/giu v0.0.0-20250410155113-88f8ef80cbaf
- github.com/Picocrypt/imgui-go v0.0.0-20250410154824-2e0c0440a8da
- github.com/Picocrypt/infectious v0.0.0-20250410153626-f2f1c05d0452
+ github.com/Picocrypt/dialog v0.0.0-20250412233924-78f7b909315b
+ github.com/Picocrypt/giu v0.0.0-20250412235908-fe90a482e6f2
+ github.com/Picocrypt/imgui-go v0.0.0-20250412235405-d86b230f5fbb
+ github.com/Picocrypt/infectious v0.0.0-20250412183341-9f88c6307b39
github.com/Picocrypt/serpent v0.0.0-20240830233833-9ad6ab254fd7
- github.com/Picocrypt/zxcvbn-go v0.0.0-20250410153845-b5da60d3e882
+ github.com/Picocrypt/zxcvbn-go v0.0.0-20250412183938-d59695960527
golang.org/x/crypto v0.37.0
)
require (
- github.com/Picocrypt/gl v0.0.0-20250410154226-55bdd7d785fc // indirect
- github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250410154351-5db5bbd64322 // indirect
+ github.com/Picocrypt/gl v0.0.0-20250412234430-767b58dbf936 // indirect
+ github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250412234750-7b96bfdb8dd8 // indirect
github.com/Picocrypt/mainthread v0.0.0-20240831004314-496f638392b3 // indirect
github.com/Picocrypt/w32 v0.0.0-20240831001500-1183079d4d57 // indirect
golang.org/x/sys v0.32.0 // indirect
diff --git a/src/go.sum b/src/go.sum
index 1817016..7314822 100644
--- a/src/go.sum
+++ b/src/go.sum
@@ -1,23 +1,23 @@
-github.com/Picocrypt/dialog v0.0.0-20250410154130-d98dc55ea635 h1:mZl+aiuQSQhe/C1Y4NdJ7w6KdjAEyr5Va2JHGdDvF3E=
-github.com/Picocrypt/dialog v0.0.0-20250410154130-d98dc55ea635/go.mod h1:bScGI7SMxXUo4EtwGfDkeA7owLj99QBn8nlqnqxacHU=
-github.com/Picocrypt/giu v0.0.0-20250410155113-88f8ef80cbaf h1:mDXu/vjyoxcXg44ejbpRhiZg1NmzMlez6ikEkZ03G6c=
-github.com/Picocrypt/giu v0.0.0-20250410155113-88f8ef80cbaf/go.mod h1:fDUYbcghlVwlEoWkp+4LwQd1DJft1XZ9uTaHskd2gno=
-github.com/Picocrypt/gl v0.0.0-20250410154226-55bdd7d785fc h1:PhgkrhrXcMVDJUHfTjJ+U1soq+eiaeWheEELXZau62k=
-github.com/Picocrypt/gl v0.0.0-20250410154226-55bdd7d785fc/go.mod h1:aHUxrywhiLVtrH6Yus/4N9VtOFzsEPp1AJj2ioFgswg=
-github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250410154351-5db5bbd64322 h1:eeD6947JcMIeRhlPkXWedfi8IqdZuX/k0dVM8nEB+bc=
-github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250410154351-5db5bbd64322/go.mod h1:7StnBznBEzR4cEtV5ptfQfMBgmv05p+b4ImwZ+pXXKQ=
-github.com/Picocrypt/imgui-go v0.0.0-20250410154824-2e0c0440a8da h1:zea0P1s/ykcWU1zbBxVLgCjSwRhT7+u1KoYPQHuStjQ=
-github.com/Picocrypt/imgui-go v0.0.0-20250410154824-2e0c0440a8da/go.mod h1:crmefGfhM5+lQUU/fbS9Hjs8xOlrrJI235vwnktN9PE=
-github.com/Picocrypt/infectious v0.0.0-20250410153626-f2f1c05d0452 h1:9UqCRY4qLDpIfxW+N51JPTn0KDKg88um+BVXApTl0NI=
-github.com/Picocrypt/infectious v0.0.0-20250410153626-f2f1c05d0452/go.mod h1:S99y5mnE1SZcr3n2DNDkdYZ9QJD4OmnGXlQ9TvLLC+M=
+github.com/Picocrypt/dialog v0.0.0-20250412233924-78f7b909315b h1:k5YGEx61N6K8l2l6AQ1u5W2aR+47sVZWFyqXS/f5lIA=
+github.com/Picocrypt/dialog v0.0.0-20250412233924-78f7b909315b/go.mod h1:OyaP0Tz19qL3RAGq5Ntues+WVrIbHh5MrfqoA/qhqeg=
+github.com/Picocrypt/giu v0.0.0-20250412235908-fe90a482e6f2 h1:SPR2efZTpZJON/2mNifLi68Gl9Epxh/1nXb3kGGHCcg=
+github.com/Picocrypt/giu v0.0.0-20250412235908-fe90a482e6f2/go.mod h1:jd6AonK0ZI02R7GqLWb4gWJz/A2ClF36Y4fFMR8Lzbk=
+github.com/Picocrypt/gl v0.0.0-20250412234430-767b58dbf936 h1:6MChjQ4AZC2ISBjbgZU/z6tSUxYP50NkRvAu0T2kjlY=
+github.com/Picocrypt/gl v0.0.0-20250412234430-767b58dbf936/go.mod h1:pMdf3io/y3I+zYZ6/xFb3MlI2AgL38enDDIKuR0n2qA=
+github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250412234750-7b96bfdb8dd8 h1:i8wXJhSYIJTXb6sqBS6JZW7QosI9u8Ysy1BHZCTuZEc=
+github.com/Picocrypt/glfw/v3.3/glfw v0.0.0-20250412234750-7b96bfdb8dd8/go.mod h1:cX5N2TrX03DC5i5eplxopglDue/vHDs+6Ng9G9uItaI=
+github.com/Picocrypt/imgui-go v0.0.0-20250412235405-d86b230f5fbb h1:0XMtv2CXx3QvC9ikeH43fJl6ql8j5EsnaiOqhsToFnY=
+github.com/Picocrypt/imgui-go v0.0.0-20250412235405-d86b230f5fbb/go.mod h1:N+NVTIIMz6icYltvaKHMvmVIllZDYUyscJ8wpcLKDZ4=
+github.com/Picocrypt/infectious v0.0.0-20250412183341-9f88c6307b39 h1:czHyPoiNrILv9xjfQ87UFllJgak8W6gVcYkmfOay/BE=
+github.com/Picocrypt/infectious v0.0.0-20250412183341-9f88c6307b39/go.mod h1:2ZVEanURxuWmxYZ6W6xMMy4ZR6xmQr16Vq/XPTLIspQ=
github.com/Picocrypt/mainthread v0.0.0-20240831004314-496f638392b3 h1:a62XmbZYhHGDR15C1gxp/IPfJX5SflrJuGpqNoOOK7w=
github.com/Picocrypt/mainthread v0.0.0-20240831004314-496f638392b3/go.mod h1:bsUKeX+/53rCTrItl3YUaeaN5tXl1v6326ZI90xIOsc=
github.com/Picocrypt/serpent v0.0.0-20240830233833-9ad6ab254fd7 h1:G36G2vmQAS7CVoHQrHDGAoCWll/0kPCI8Dk7mgwcJFE=
github.com/Picocrypt/serpent v0.0.0-20240830233833-9ad6ab254fd7/go.mod h1:BxsgRYwUVd92aEwXnXsfXfHw8aHlD/PUyExC/wwk9oI=
github.com/Picocrypt/w32 v0.0.0-20240831001500-1183079d4d57 h1:jusSXTp0h5wz8lxNXStw0jXr/ogZF6rzRF8gu0534hA=
github.com/Picocrypt/w32 v0.0.0-20240831001500-1183079d4d57/go.mod h1:FkeZHdKlITdP34VknO8yLdRY5pCi+iWEhDSA0YsBhZc=
-github.com/Picocrypt/zxcvbn-go v0.0.0-20250410153845-b5da60d3e882 h1:W5f997Hcoi9PiU2j3TSsjryNKQ2+jIiHChpOnf485Xc=
-github.com/Picocrypt/zxcvbn-go v0.0.0-20250410153845-b5da60d3e882/go.mod h1:pIpFJD6Ey6jxU5GXMZ3Kc4wF9B49OJy9wTwwE3bJRPI=
+github.com/Picocrypt/zxcvbn-go v0.0.0-20250412183938-d59695960527 h1:IqypAzv5COsByMhiSdwlgafA5SBRG7Z0binnBSo3htM=
+github.com/Picocrypt/zxcvbn-go v0.0.0-20250412183938-d59695960527/go.mod h1:u0rcUNEwy7st1DnPxdOJdTsh0aSRhrdMOxlIGrXR1Ls=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=