Welcome! Log In Create A New Profile

Advanced

ngx_encode_base64url

August 21, 2012 02:50PM
Вопрос предложение навеяное java ( http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html#Base64(int, byte[], boolean) )

Есть логика которая добавляет заголовок который потом переходит как часть урла (с помощью rewrite rules "rewrite ^ http://blah/qwe=$http_my_header;"), соответственно в нем бинарные данные которые base64 а потом на него делается urlescape, но поскольку помнится можно делать эти действия urlsafe то можно все это было бы делать без ескейпинга, тоесть за один проход base64_encode.

Соответственно можно было бы добавить функцию в ngx_string.c которая делала бы это все безболезненно. Что кто может сказать по данному вопросу? у меня нарисовался даже вот такой патч, но это только в первом приближении.

--- ngx_string.c.bak 2012-08-21 11:18:22.342532943 -0700
+++ ngx_string.c 2012-08-21 11:39:36.899480335 -0700
@@ -1057,13 +1057,11 @@
}


-void
-ngx_encode_base64(ngx_str_t *dst, ngx_str_t *src)
+static void
+ngx_encode_base64_internal(ngx_str_t *dst, ngx_str_t *src, const u_char *basis64, int is_url)
{
u_char *d, *s;
size_t len;
- static u_char basis64[] =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

len = src->len;
s = src->data;
@@ -1084,20 +1082,40 @@

if (len == 1) {
*d++ = basis64[(s[0] & 3) << 4];
- *d++ = '=';
+ if (!is_url)
+ *d++ = '=';

} else {
*d++ = basis64[((s[0] & 3) << 4) | (s[1] >> 4)];
*d++ = basis64[(s[1] & 0x0f) << 2];
}

- *d++ = '=';
+ if (!is_url)
+ *d++ = '=';
}

dst->len = d - dst->data;
}


+void
+ngx_encode_base64(ngx_str_t *dst, ngx_str_t *src)
+{
+ static u_char basis64[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ ngx_encode_base64_internal(dst, src, basis64, 0);
+}
+
+
+void
+ngx_encode_base64url(ngx_str_t *dst, ngx_str_t *src)
+{
+ static u_char basis64[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
+ ngx_encode_base64_internal(dst, src, basis64, 1);
+}
+
+
ngx_int_t
ngx_decode_base64(ngx_str_t *dst, ngx_str_t *src)
{
Subject Author Posted

ngx_encode_base64url

theromis1 August 21, 2012 02:50PM

Re: ngx_encode_base64url

Maxim Dounin September 01, 2012 05:24AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 255
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready