Commit Graph
19 Commits
Author SHA1 Message Date
Ihor Antonov a5bef5224c core: add unpadded base64 encoding
core:encoding/base64 can only produce padded output, so callers that need
the canonical unpadded ("raw") form -- JOSE base64url, Go's
RawStdEncoding/RawURLEncoding -- have to encode and then trim, which
forces an extra allocation and cleanup dance around the returned string.

Add an Encode_Options bit set, mirroring Decode_Options, and honor
{.No_Padding} in `encode`, `encode_into_buf`, `encode_into`, and
`encoded_len`. Existing calls and padded output are unchanged.

Tests cover the RFC 4648 section 9 illustrations and section 10 test
vectors across the standard and URL alphabets, padded and raw, plus Go's
reference corpus. Newline characters are asserted to be rejected per
RFC 4648 section 3.3. Comments in `encode_impl` document the 24-bit group
packing and the padding decision for partial groups.
2026-09-30 19:53:10 -07:00
Ihor Antonov 2109ba8fbd core: add strict base64 decoding
core:encoding/base64 currently decodes leniently: it infers padding from the
last one or two bytes, accepts missing/extra/interior padding, and does not
check the trailing padding bits required by RFC 4648 Section 3.5.
Go exposes canonical decoding as `Encoding.Strict()`; Odin has no equivalent,
so downstream ports (e.g. age) have to reimplement base64 from scratch.

This adds opt-in strict decoding through a `Decode_Options` bit set.
Existing calls and behavior are unchanged.
2026-09-28 19:59:23 -07:00
Yawning Angel 82a18797b4 core/encoding/base64: Misc fixes and improvements
- Add error checking to `decode`
- Add `encode_into_buf`/`decode_into_buf`
2026-05-26 00:38:50 +09:00
Jeroen van Rijn c0300a3303 Remove core:mem imports from core:encoding. 2026-02-12 18:19:24 +01:00
rykad 454f75cb22 core:encoding/base64: add support for url variant 2026-01-17 22:26:25 +00:00
Franz Hoeltermann cd4bec0007 Increase base64 decoding table size to 256, preventing out of bounds reads 2025-11-22 12:54:36 +01:00
Jeroen van Rijn ece213afca Render examples. 2025-10-10 12:24:28 +02:00
Jeroen van Rijn 7a9ea3ee6d Further overhaul of package line comments. 2025-10-09 23:05:29 +02:00
Jeroen van Rijn 288b45f50c package lines for encoding 2025-10-09 16:34:18 +02:00
Jeroen van Rijn 248b0fe9e1 More package lines 2025-10-09 16:11:33 +02:00
gingerBill 334e08c750 Update numerous package declaration names 2024-04-18 12:17:39 +01:00
Laytan Laats b6c47e7963 encoding/base64: add decode_into, add tests 2024-03-04 17:26:17 +01:00
Laytan Laats 5533a327eb encoding/cbor: initial package implementation 2024-03-04 17:25:34 +01:00
gingerBill 720884e0f1 Strip even more semicolons if followed by a } or ) on the same line 2021-08-31 23:47:57 +01:00
gingerBill 251da264ed Remove unneeded semicolons from the core library 2021-08-31 22:21:13 +01:00
gingerBill 10f91a0d3f Make base32 and base64 adhere to -strict-style 2021-03-14 12:54:28 +00:00
gingerBill fc4fdd588e Remove usage of do in core library 2020-09-23 17:17:14 +01:00
Tetralux 92e1c71dd6 Fix encoding/base64 encoding null bytes incorrectly
Fixes #574.

Thanks @jroatch!
2020-02-28 14:52:16 +00:00
zhibog a7676bff6e Added an implementation for Base64. Also provides the ability to supply your own alphabet and decoding table. 2019-08-15 22:05:06 +02:00