From 243c614134cd29b764425b18e85aca7c6ea21ab7 Mon Sep 17 00:00:00 2001 From: Vadim Bendebury Date: Fri, 27 Mar 2015 16:08:04 -0700 Subject: lib: add base64 decoder It became necessary to decode base64 data retrieved from VPD and convert it into binary for inclusion in the device tree. The patch introduces the decoder function based on the description found in http://en.wikipedia.org/wiki/Base64. An open source implementation from http://base64.sourceforge.net was considered, in the end the only thing borrowed from it is the table to translate base64 ascii characters into numbers in 0..63 range. BRANCH=none BUG=chromium:450169 TEST=created a test harness generating random contents of random size (in 8 to 32766 bytes range), then converting the contents into base64 using the Linux utility, and then converting it back to binary using this function and comparing the results. It succeeded 1700 iterations before it was stopped. Change-Id: I502f2c9494c99ba95ece37a7220c0c70c4755be2 Signed-off-by: Patrick Georgi Original-Commit-Id: 6609f76e1559d3cdd402276055c99e0de7da27c8 Original-Change-Id: I5ed68af3a4daead50c44ae0f0c63d836f4b66851 Original-Signed-off-by: Vadim Bendebury Original-Reviewed-on: https://chromium-review.googlesource.com/262945 Original-Reviewed-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/9892 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- src/include/b64_decode.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/include/b64_decode.h (limited to 'src/include') diff --git a/src/include/b64_decode.h b/src/include/b64_decode.h new file mode 100644 index 0000000000..b52719671e --- /dev/null +++ b/src/include/b64_decode.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2015 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __INCLUDE_B64_DECODE_H__ +#define __INCLUDE_B64_DECODE_H__ + +#include +#include + +/* + * A function to convert a buffer of base64 format data into its source. + * + * The user provides output buffer of the size guaranteed to fit the result. + * + * Returns the size of the decoded data or zero if invalid charactes were + * encountered in the input buffer. + */ +size_t b64_decode(const uint8_t *input_data, + size_t input_length, + uint8_t *output_data); + +/* A macro to derive decoded size of a base64 encoded blob. */ +#define B64_DECODED_SIZE(encoded_size) (((encoded_size) * 3)/4) + +#endif -- cgit v1.2.3