Commit 7541b068 authored by Pierre Téchoueyres's avatar Pierre Téchoueyres Committed by Eli Zaretskii

Add support for base64url variant of base-64 encoding/decoding

Implement the RFC4648 variant of base64 encoding used by URLs.
* doc/lispref/text.texi (base64url-encode-region,
base64url-encode-string): Document new functions.
(base64-decode-region, base64-decode-string): Document new optional
parameter 'base64url' used to use url variant when decoding data.

* src/fns.c (base64url-encode-region, base64url-encode-region): New
functions to manage url variant.
(base64-decode-region, base64-decode-string): Add optional
parameter to indicate use of url-variant.
(base64_encode_region_1, base64_encode_string_1): Internal functions
with extracted code from 'base64_encode_region' and
'base64_encode_string' and optional parameters to manage padding and
url variant.
(base64-encode-region, base64-encode-string) : Use
base64_encode_region_1 and base64_encode_string_1.
(base64-encode-1): Add parameters to manage padding and url variant.
(base64-decode-1): Add parameter to manage url variant.

* test/src/fns-tests.el (fns-tests--with-region): New helper macro to
test region variant of base64 encode / decode functions.
(fns-tests--string-repeat): Helper function used in base64 tests.
(fns-tests-base64-encode-region, fns-tests-base64-encode-string):
Tests for standard base64 function.
(fns-test-base64url-encode-region,
fns-test-base64url-encode-string): Tests for url variant.
(fns-tests-base64-decode-string): Tests for decoding part.
parent faf10bd8
......@@ -4541,7 +4541,7 @@ Internet informational document describing a standard. RFCs are
usually written by technical experts acting on their own initiative,
and are traditionally written in a pragmatic, experience-driven
manner.
}2045. This section describes the functions for
}2045 and also in RFC4648. This section describes the functions for
converting to and from this code.
@deffn Command base64-encode-region beg end &optional no-line-break
......@@ -4558,6 +4558,22 @@ text, to avoid overlong lines. However, if the optional argument
the output is just one long line.
@end deffn
@deffn Command base64url-encode-region beg end &optional no-pad
This function converts the region from @var{beg} to @var{end} into base
64 code. It returns the length of the encoded text. An error is
signaled if a character in the region is multibyte, i.e., in a
multibyte buffer the region must contain only characters from the
charsets @code{ascii}, @code{eight-bit-control} and
@code{eight-bit-graphic}.
Contrary to the function @code{base64-encode-region}, this function
doesnt inserts newline characters into the encoded text, so the output
is just one long line.
If the optional argument @var{no-pad} is non-@code{nil} then padding
(@code{=}) isn't generated.
@end deffn
@defun base64-encode-string string &optional no-line-break
This function converts the string @var{string} into base 64 code. It
returns a string containing the encoded text. As for
......@@ -4570,20 +4586,40 @@ text, to avoid overlong lines. However, if the optional argument
the result string is just one long line.
@end defun
@deffn Command base64-decode-region beg end
@defun base64url-encode-string string &optional no-pad
This function converts the string @var{string} into base 64 url code
(see RFC4648). It returns a string containing the encoded text. As
for @code{base64url-encode-region}, an error is signaled if a
character in the string is multibyte.
Contrary to @code{base64-encode-string}, this function doesnt inserts
newline characters into the encoded text, so the result string is just
one long line.
If the optional argument @var{no-pad} is non-@code{nil} then padding
(@code{=}) isn't generated.
@end defun
@deffn Command base64-decode-region beg end &optional base64url
This function converts the region from @var{beg} to @var{end} from base
64 code into the corresponding decoded text. It returns the length of
the decoded text.
The decoding functions ignore newline characters in the encoded text.
If optional argument @var{base64url} is is non-@code{nil} then padding
become optionnal and url variant is used (see RFC4648).
@end deffn
@defun base64-decode-string string
@defun base64-decode-string string &optional base64url
This function converts the string @var{string} from base 64 code into
the corresponding decoded text. It returns a unibyte string containing the
decoded text.
The decoding functions ignore newline characters in the encoded text.
If optional argument @var{base64url} is is non-@code{nil} then padding
become optionnal and url variant is used (see RFC4648).
@end defun
@node Checksum/Hash
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment