Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

aws: Base64 1.8 #4801

Merged
merged 4 commits into from
Feb 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions include/fluent-bit/flb_base64.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

/* Fluent Bit
* ==========
* Copyright (C) 2019-2021 The Fluent Bit Authors
* Copyright (C) 2015-2018 Treasure Data Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/**
* \file base64.h
*
* \brief RFC 1521 base64 encoding/decoding
*/

/* This code is based on base64.h from the mbedtls-2.25.0 Library distribution,
* as originally written by Paul Bakker, et al., and forked by the Fluent Bit
* project to provide performant base64 encoding and decoding routines.
* The 2.25.0 implementation is included rather than 2.26.0+ implementation due
* to performance degradation introduced in 2.26.0.
*
* Method and variable names are changed by the Fluent Bit authors to maintain
* consistency with the Fluent Bit project.
* The self test section of the code was removed by the Fluent Bit authors.
* Other minor changes are made by the Fluent Bit authors.
*
* The original source file base64.h is copyright and licensed as follows;
*
* Copyright The Mbed TLS Contributors
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#ifndef FLB_BASE64_H
#define FLB_BASE64_H

#include <stddef.h>

#define FLB_BASE64_ERR_BUFFER_TOO_SMALL -0x002A /**< Output buffer too small. */
#define FLB_BASE64_ERR_INVALID_CHARACTER -0x002C /**< Invalid character in input. */

/**
* \brief Encode a buffer into base64 format
*
* \param dst destination buffer
* \param dlen size of the destination buffer
* \param olen number of bytes written
* \param src source buffer
* \param slen amount of data to be encoded
*
* \return 0 if successful, or FLB_BASE64_ERR_BUFFER_TOO_SMALL.
* *olen is always updated to reflect the amount
* of data that has (or would have) been written.
* If that length cannot be represented, then no data is
* written to the buffer and *olen is set to the maximum
* length representable as a size_t.
*
* \note Call this function with dlen = 0 to obtain the
* required buffer size in *olen
*/
int flb_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
const unsigned char *src, size_t slen );

/**
* \brief Decode a base64-formatted buffer
*
* \param dst destination buffer (can be NULL for checking size)
* \param dlen size of the destination buffer
* \param olen number of bytes written
* \param src source buffer
* \param slen amount of data to be decoded
*
* \return 0 if successful, FLB_BASE64_ERR_BUFFER_TOO_SMALL, or
* FLB_BASE64_ERR_INVALID_CHARACTER if the input data is
* not correct. *olen is always updated to reflect the amount
* of data that has (or would have) been written.
*
* \note Call this function with *dst = NULL or dlen = 0 to obtain
* the required buffer size in *olen
*/
int flb_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
const unsigned char *src, size_t slen );

#endif /* base64.h */
5 changes: 3 additions & 2 deletions plugins/out_kinesis_firehose/firehose_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@
#include <fluent-bit/flb_http_client.h>
#include <fluent-bit/flb_utils.h>

#include <fluent-bit/flb_base64.h>

#include <monkey/mk_core.h>
#include <mbedtls/base64.h>
#include <msgpack.h>
#include <string.h>
#include <stdio.h>
Expand Down Expand Up @@ -276,7 +277,7 @@ static int process_event(struct flb_firehose *ctx, struct flush *buf,
}

tmp_buf_ptr = buf->tmp_buf + buf->tmp_buf_offset;
ret = mbedtls_base64_encode((unsigned char *) buf->event_buf, size, &b64_len,
ret = flb_base64_encode((unsigned char *) buf->event_buf, size, &b64_len,
(unsigned char *) tmp_buf_ptr, written);
if (ret != 0) {
flb_errno();
Expand Down
4 changes: 2 additions & 2 deletions plugins/out_kinesis_streams/kinesis_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@
#include <fluent-bit/flb_mem.h>
#include <fluent-bit/flb_http_client.h>
#include <fluent-bit/flb_utils.h>
#include <fluent-bit/flb_base64.h>

#include <monkey/mk_core.h>
#include <mbedtls/base64.h>
#include <msgpack.h>
#include <string.h>
#include <stdio.h>
Expand Down Expand Up @@ -342,7 +342,7 @@ static int process_event(struct flb_kinesis *ctx, struct flush *buf,
}

tmp_buf_ptr = buf->tmp_buf + buf->tmp_buf_offset;
ret = mbedtls_base64_encode((unsigned char *) buf->event_buf, size, &b64_len,
ret = flb_base64_encode((unsigned char *) buf->event_buf, size, &b64_len,
(unsigned char *) tmp_buf_ptr, written);
if (ret != 0) {
flb_errno();
Expand Down
5 changes: 3 additions & 2 deletions plugins/out_s3/s3.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@
#include <fluent-bit/flb_signv4.h>
#include <fluent-bit/flb_scheduler.h>
#include <fluent-bit/flb_gzip.h>
#include <fluent-bit/flb_base64.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <mbedtls/base64.h>

#include <mbedtls/md5.h>
#include <msgpack.h>

Expand Down Expand Up @@ -1363,7 +1364,7 @@ int get_md5_base64(char *buf, size_t buf_size, char *md5_str, size_t md5_str_siz
return ret;
}

ret = mbedtls_base64_encode((unsigned char*) md5_str, md5_str_size, &olen, md5_bin,
ret = flb_base64_encode((unsigned char*) md5_str, md5_str_size, &olen, md5_bin,
sizeof(md5_bin));
if (ret != 0) {
return ret;
Expand Down
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ set(src
flb_fstore.c
flb_thread_pool.c
flb_routes_mask.c
flb_base64.c
)

# Multiline subsystem
Expand Down
Loading