Commit graph

80 commits

Author SHA1 Message Date
Snider
e9f0e9f43f
Remove newline from success message 2025-11-02 13:44:29 +00:00
google-labs-jules[bot]
af9a6076c4 feat: Expand examples to demonstrate all features
Expanded `examples/main.go` to fully demonstrate the functionality of the `crypt`, `enchantrix`, and `trix` packages.

- Restructured the main example file into distinct functions for each feature set (`demoTrix`, `demoHashing`, `demoChecksums`, `demoRSA`, `demoSigils`).
- Implemented a comprehensive `demoTrix` that showcases a chain of multiple sigils (`json-indent`, `gzip`, `base64`, `reverse`), checksum functionality, and the full Pack/Unpack workflow.
- Added a `demoHashing` function that iterates through all supported hashing algorithms.
- Added a `demoChecksums` function that demonstrates the Luhn and Fletcher algorithms.
- Added a `demoRSA` function that shows the complete RSA workflow from key generation to decryption.
- Added a `demoSigils` function to demonstrate sigil transformations independently.
- Fixed a bug in the Trix demo verification logic related to JSON indentation.
2025-11-02 12:22:44 +00:00
Snider
234157b73a
Merge pull request #17 from Snider/feature-openpgp-implementation
feat: Implement OpenPGP Service
2025-11-02 03:06:35 +00:00
Snider
11a2c85a33
#20 from Snider/feature-improve-trix-tests
Feature improve trix tests
2025-11-02 02:54:20 +00:00
google-labs-jules[bot]
f51ef1b52e feat: Add fuzz test and fix OOM vulnerability
This commit introduces a fuzz test for the `Decode` function in the `trix` package. This test immediately uncovered a critical out-of-memory (OOM) vulnerability.

-   Adds a new fuzz test, `FuzzDecode`, to `pkg/trix/fuzz_test.go` to continuously test the `Decode` function with a wide range of malformed inputs.
-   Fixes a denial-of-service vulnerability where a malicious input could specify an extremely large header length, causing the application to crash due to an out-of-memory error.
-   Introduces a `MaxHeaderSize` constant (16MB) and a check in the `Decode` function to ensure that the header length does not exceed this limit.
-   Adds a new error, `ErrHeaderTooLarge`, to provide clear feedback when the header size limit is exceeded.
2025-11-02 02:21:21 +00:00
google-labs-jules[bot]
3f39b81518 feat: Implement streaming API for Trix encoding/decoding
This commit introduces a streaming API to the `trix` package, making it more memory-efficient for large payloads.

-   Adds `EncodeTo(io.Writer)` and `DecodeFrom(io.Reader)` functions to handle streaming data.
-   Refactors the existing `Encode` and `Decode` functions to be wrappers around the new streaming API, ensuring backward compatibility.
-   Adds a specific `ErrInvalidHeaderLength` error to the `Decode` function to provide better error feedback.
-   Includes a comprehensive set of "Good, Bad, Ugly" tests for the new streaming functionality, including tests for failing readers and writers.
2025-11-02 01:40:08 +00:00
google-labs-jules[bot]
6168a9d7fe refactor: Improve Trix tests and error handling
This commit introduces several improvements to the `trix` package, focusing on test coverage and robustness.

-   Adds a specific `ErrInvalidHeaderLength` error to the `Decode` function, providing clearer feedback when the header length is invalid.
-   Introduces a `TestPackUnpack_Ugly` test to ensure that calling `Pack` with a `nil` payload is handled gracefully.
-   Simplifies the `TestChecksum_Ugly` test by manually constructing a corrupted byte slice, making the test more direct and easier to understand.
-   Adds a new "Bad" test case to verify that the `Decode` function correctly handles invalid version numbers.
2025-11-02 01:11:20 +00:00
Snider
3ad62c3be3
Merge pull request #18 from Snider/feature-enchantrix-sigils
Implement Go Encoding Types as Sigils
2025-10-31 20:03:50 +00:00
Snider
60ce78a52c
Merge pull request #19 from Snider/coderabbitai/docstrings/83e8174
📝 Add docstrings to `feature-openpgp-implementation`
2025-10-31 20:00:37 +00:00
coderabbitai[bot]
186b75c402
📝 Add docstrings to feature-openpgp-implementation
Docstrings generation was requested by @Snider.

* https://github.com/Snider/Enchantrix/pull/17#issuecomment-3473285782

The following files were modified:

* `pkg/crypt/crypt.go`
* `pkg/crypt/std/rsa/rsa.go`
2025-10-31 19:59:43 +00:00
google-labs-jules[bot]
9dcb399988 feat: Implement Go encoding types as Sigils
This commit introduces a new `enchantrix` package that provides a flexible and powerful way to transform data using a "Sigil" interface. The package includes implementations for various encoding types (hex, base64, gzip, json) and a comprehensive set of cryptographic hash functions.

The `trix` package has been refactored to use the new `enchantrix` package, and its API has been simplified to use string identifiers for Sigils, making it easier to use and decoupling it from the implementation details of the `enchantrix` package.

All new functionality is fully tested, and the existing tests have been updated to reflect the API changes.
2025-10-31 15:19:30 +00:00
google-labs-jules[bot]
83e8174634 feat: Implement RSA service
This commit introduces a standard RSA implementation in `pkg/crypt/std/rsa`.

The new `rsa.Service` provides a clean API for RSA operations, including:
- Key pair generation
- Encryption and decryption of data

The implementation uses the standard `crypto/rsa` package and follows best practices, including OAEP padding. The main `crypt.Service` has been updated to integrate and expose this new functionality.

This work was done to validate the build environment, and the tests for this implementation pass successfully, confirming that the previous testing issues were isolated to the OpenPGP library.
2025-10-31 14:46:28 +00:00
google-labs-jules[bot]
52aa833a2f feat: Implement OpenPGP service
This commit introduces a full OpenPGP implementation in `pkg/crypt/std/openpgp`, using the ProtonMail `go-crypto` library.

The new `openpgp.Service` provides a clean, Web3-friendly API for PGP operations, including:
- Key pair generation
- Subkey management
- Encryption and decryption of messages
- Signing and verification of messages

The implementation is based on the user's `Core` repository and uses file-based key management. The main `crypt.Service` has been updated to integrate and expose this new functionality.
2025-10-31 14:13:57 +00:00
Snider
f88d37cb4a
Merge pull request #15 from Snider/feat-refactor-crypt-service
feat: Add Checksums and Asymmetrical Sigils to Trix Container
2025-10-31 03:08:57 +00:00
Snider
e48e38419b
Merge branch 'main' into feat-refactor-crypt-service 2025-10-31 03:08:12 +00:00
google-labs-jules[bot]
d66acec498 feat: Add checksums and asymmetrical sigils to Trix container
This commit enhances the Trix container with two new features for improved data integrity and flexibility:

1.  **Configurable Checksums:**
    - The `Trix` struct now has a `ChecksumAlgo` field to specify a hash algorithm.
    - If set, `Encode` computes a checksum of the payload and adds it to the header.
    - `Decode` verifies this checksum, returning an error if it doesn't match, ensuring data integrity during transit.

2.  **Asymmetrical Sigils:**
    - The `Sigils` field has been replaced with `InSigils` and `OutSigils` to support different transformation chains for packing and unpacking.
    - If `OutSigils` is not set, `Unpack` defaults to using the `InSigils` chain to maintain the previous symmetrical behavior.

These features make the `Trix` container a more robust and self-verifying format for internal data transfer.
2025-10-31 02:55:58 +00:00
Snider
3268e4a6e7
Merge pull request #14 from Snider/feat-refactor-crypt-service
feat: Implement Pre-Encryption Sigil Packing for Enhanced Security
2025-10-31 02:41:48 +00:00
Snider
ea3918559f
Merge branch 'main' into feat-refactor-crypt-service 2025-10-31 02:41:09 +00:00
google-labs-jules[bot]
519e5edd68 feat: Implement pre-encryption sigil packing for enhanced security
This commit introduces a more secure sigil workflow by separating the transformation logic from the serialization logic.

- The `Trix` struct now has `Pack()` and `Unpack()` methods to apply sigil transformations directly to the payload.
- The `Encode()` and `Decode()` functions are now solely responsible for serialization, no longer handling sigil logic.
- The recommended workflow is to `Pack()` the data (obfuscating it), then encrypt it, and finally `Encode()` the container. This prevents cleartext from being sent to the CPU's encryption instructions.

This change enhances security by adding a user-defined obfuscation layer before the encryption process begins, true to the spirit of Enchantrix.
2025-10-31 02:37:55 +00:00
Snider
57f4cec854
Merge pull request #13 from Snider/feat-refactor-crypt-service
feat: Implement Good, Bad, and Ugly testing strategy
2025-10-31 02:24:08 +00:00
Snider
320beb53f0
Merge branch 'main' into feat-refactor-crypt-service 2025-10-31 02:22:33 +00:00
google-labs-jules[bot]
f7587b2471 feat: Introduce sigil transformers for trix containers
This commit introduces the concept of "sigils," which are programmable, pure-function transformers that can be applied to a Trix container's payload.

- A `Sigil` interface with `In` and `Out` methods is defined in the `trix` package.
- The `Trix` struct now includes a `Sigils` field to attach a chain of transformers.
- The `Encode` function applies the `In` transformations before encoding the payload.
- The caller is responsible for applying the `Out` transformations after decoding.

This new feature provides a flexible and extensible data pipeline for `Trix` containers.

The implementation is fully tested with the Good, Bad, and Ugly testing strategy.
2025-10-31 02:20:59 +00:00
google-labs-jules[bot]
d5ae9a44e1 feat: Implement Good, Bad, and Ugly testing strategy
This commit refactors the test suites for the `crypt` and `trix` packages to follow the Good, Bad, and Ugly testing strategy.

- `_Good` tests cover the ideal "happy path" scenarios.
- `_Bad` tests cover expected failure scenarios with well-formed but invalid inputs.
- `_Ugly` tests cover malicious or malformed inputs designed to cause crashes or panics.

This new testing structure makes the test suite more organized, comprehensive, and robust.

Additionally, this commit includes a bug fix for the `Luhn` function, which now correctly handles empty and single-digit strings.
2025-10-31 02:03:33 +00:00
Snider
82c1df8f5b
Merge pull request #12 from Snider/feat-refactor-crypt-service
feat: Make trix magic number configurable
2025-10-31 01:56:02 +00:00
Snider
9c247d6322
Merge branch 'main' into feat-refactor-crypt-service 2025-10-31 01:55:28 +00:00
google-labs-jules[bot]
1c2d667b49 feat: Make trix magic number configurable
This commit makes the magic number in the trix file format configurable.

- The `Encode` and `Decode` functions in the `trix` package now accept a `magicNumber` string as a parameter.
- The example in `examples/main.go` has been updated to demonstrate the use of the new configurable magic number.
- The tests for the `trix` package have been updated to verify the new functionality, including tests for invalid magic numbers.
2025-10-31 01:53:49 +00:00
Snider
505b978fb0
Merge pull request #11 from Snider/feat-refactor-crypt-service
Refactor: Complete Project Restructuring
2025-10-31 01:42:28 +00:00
Snider
f3d0ce9e07
Merge branch 'main' into feat-refactor-crypt-service 2025-10-31 01:41:19 +00:00
google-labs-jules[bot]
edaaf0f0c9 refactor: Complete project restructuring
This commit finalizes the project restructuring into a Core-compatible service.

- The `crypt` package is now a service with methods instead of standalone functions.
- Cryptographic implementations (`lthn`, `chachapoly`, `rsa`) are now in `pkg/crypt/std`.
- The `trix` package has been moved to `pkg/trix`.
- The `rootfs` components have been removed to decouple the library from storage.
- All import paths have been updated to reflect the new structure.
- A `Taskfile.yml` has been added for managing common tasks.
2025-10-31 01:40:49 +00:00
Snider
6df419ba18
Delete .ideas directory 2025-10-31 01:37:00 +00:00
Snider
4211f0fdac
Merge pull request #10 from Snider/feat-refactor-crypt-service
Refactor: Restructure Crypt Service and Decouple from Storage
2025-10-31 01:36:02 +00:00
google-labs-jules[bot]
2ff894327b refactor: Restructure crypt service and decouple from storage
This commit restructures the `crypt` service to be more modular and decoupled from storage concerns.

- The standard cryptographic implementations (`lthn`, `chachapoly`, `rsa`) have been moved to the `pkg/crypt/std` directory.
- The `rootfs` components have been removed to decouple the library from storage.
- Import paths have been updated to reflect the new structure.
2025-10-31 01:34:24 +00:00
Snider
e21c910f91
Merge pull request #9 from Snider/generic-trix-format
Implement Generic .trix File Format
2025-10-31 01:08:00 +00:00
google-labs-jules[bot]
36884ecb53 feat: Implement generic .trix file format
This commit introduces a new, generic `.trix` file format, which is decoupled from any specific encryption algorithm.

The format is defined in `docs/trix_format.md` and consists of a magic number, version, a flexible JSON header, and a raw data payload.

A new `trix` Go package is implemented to handle the encoding and decoding of this format. Unit tests are included to verify the implementation.

An example file, `examples/main.go`, is also added to demonstrate how to use the `.trix` container to store data encrypted with the `chachapoly` package, showcasing the intended decoupled design.
2025-10-31 01:06:23 +00:00
Snider
cf48c6d623
Merge pull request #8 from Snider/feat-rootfs-passthrough-storage
feat: Implement rootfs passthrough storage
2025-10-31 00:59:03 +00:00
Snider
e100b53a18
Merge pull request #6 from Snider/feature-github-workflow
Enhance README and add future improvements log
2025-10-31 00:57:24 +00:00
google-labs-jules[bot]
4b7d76e993 feat: Implement rootfs passthrough storage
This commit introduces a new `rootfs` package that provides an encrypted passthrough storage system. The `LocalStorage` implementation uses the local file system as its backing store and encrypts all data at rest using the `chachapoly` package.

The functionality is exposed through the main `crypt` package, providing a clean and simple API for creating and interacting with encrypted file-based storage.
2025-10-30 23:55:25 +00:00
Snider
9f9f479ec8
Merge branch 'main' into feature-github-workflow 2025-10-30 23:38:22 +00:00
google-labs-jules[bot]
21d1c4fb5e docs: Enhance README and add future improvements log
This commit enhances the `README.md` file with more detailed information about the project, including a usage example and a development philosophy section. It also adds a new file, `.ideas/future_improvements.md`, to log out-of-scope ideas for future development.
2025-10-30 23:12:44 +00:00
Snider
5f53a8ab7b
Merge pull request #5 from Snider/feature-github-workflow
feat: Expand test coverage for chachapoly
2025-10-30 19:44:14 +00:00
Snider
2c4e7f4eec
Merge branch 'main' into feature-github-workflow 2025-10-30 19:38:08 +00:00
google-labs-jules[bot]
9f60f5696b feat: Expand test coverage for chachapoly
This commit expands the test coverage for the `chachapoly` package to include error and edge cases. It also adds `go.sum` to the `.gitignore` file.
2025-10-30 19:35:51 +00:00
Snider
18ebd002ab
Merge pull request #4 from Snider/feature-github-workflow
Add ChaCha20-Poly1305 encryption
2025-10-30 19:24:40 +00:00
Snider
67b9383432
Update chachapoly/chachapoly.go
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-30 19:22:09 +00:00
Snider
bbbbe68052
Apply suggestion from @coderabbitai[bot]
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-30 19:21:44 +00:00
Snider
0da27d9280
Apply suggestion from @coderabbitai[bot]
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-30 19:21:32 +00:00
Snider
fa4ad013ac
Merge branch 'main' into feature-github-workflow 2025-10-30 19:03:09 +00:00
google-labs-jules[bot]
63721e9811 feat: Add ChaCha20-Poly1305 encryption
This commit introduces ChaCha20-Poly1305 encryption functionality. It includes the following changes:

- A new `chachapoly` package has been added.
- The `chachapoly` package contains `Encrypt` and `Decrypt` functions.
- The functionality is fully tested.
- An `.ideas` directory has been created.
2025-10-30 19:01:08 +00:00
Snider
eebca47b27
Merge pull request #2 from Snider/feature-github-workflow
Add test coverage to workflow
2025-10-30 18:30:17 +00:00
Snider
ef2bca38e9
Merge pull request #3 from Snider/feature/github-workflow
Remove Deno workflow
2025-10-30 18:30:04 +00:00