From 513209b27ff55e2841eac0e4120199c23acce758 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Thu, 18 Nov 2010 18:32:45 +0000 Subject: Merge Chromium at r65505: Initial merge by git. Change-Id: I31d8f1d8cd33caaf7f47ffa7350aef42d5fbdb45 --- base/openssl_util.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 base/openssl_util.h (limited to 'base/openssl_util.h') diff --git a/base/openssl_util.h b/base/openssl_util.h new file mode 100644 index 0000000..4f564cf --- /dev/null +++ b/base/openssl_util.h @@ -0,0 +1,53 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_OPENNSSL_UTIL_H_ +#define BASE_OPENNSSL_UTIL_H_ +#pragma once + +#include "base/basictypes.h" + +namespace base { + +// Provides a buffer of at least MIN_SIZE bytes, for use when calling OpenSSL's +// SHA256, HMAC, etc functions, adapting the buffer sizing rules to meet those +// of the our base wrapper APIs. +// This allows the library to write directly to the caller's buffer if it is of +// sufficient size, but if not it will write to temporary |min_sized_buffer_| +// of required size and then its content is automatically copied out on +// destruction, with truncation as appropriate. +template +class ScopedOpenSSLSafeSizeBuffer { + public: + ScopedOpenSSLSafeSizeBuffer(unsigned char* output, size_t output_len) + : output_(output), + output_len_(output_len) { + } + + ~ScopedOpenSSLSafeSizeBuffer() { + if (output_len_ < MIN_SIZE) { + // Copy the temporary buffer out, truncating as needed. + memcpy(output_, min_sized_buffer_, output_len_); + } + // else... any writing already happened directly into |output_|. + } + + unsigned char* safe_buffer() { + return output_len_ < MIN_SIZE ? min_sized_buffer_ : output_; + } + + private: + // Pointer to the caller's data area and it's associated size, where data + // written via safe_buffer() will [eventually] end up. + unsigned char* output_; + size_t output_len_; + + // Temporary buffer writen into in the case where the caller's + // buffer is not of sufficient size. + unsigned char min_sized_buffer_[MIN_SIZE]; +}; + +} // namespace base + +#endif // BASE_NSS_UTIL_H_ -- cgit v1.1