1// Copyright 2012 Google Inc. All Rights Reserved. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15#ifndef POLO_UTIL_POLOUTIL_H_ 16#define POLO_UTIL_POLOUTIL_H_ 17 18#include <openssl/ssl.h> 19#include <stdint.h> 20#include <string> 21#include <vector> 22 23namespace polo { 24namespace util { 25 26// Utilites used for the Polo protocol. 27class PoloUtil { 28 public: 29 // Converts an array of big-endian bytes to a hex string. 30 // @param bytes an array of big-endian bytes 31 // @param length the length of the given byte array 32 // @return a hex string representing the given byte array 33 static const std::string BytesToHexString(const uint8_t* bytes, 34 size_t length); 35 36 // Converts a hex string to an array of big-endian bytes. A new byte array 37 // is created at the given bytes pointer, and the number of bytes is returned. 38 // The byte array must be freed using: delete[] bytes. 39 // @param hex_string the hex string to convert 40 // @param bytes pointer to a byte array that will be created with the 41 // big-endian result 42 // @return the number of bytes in the resulting byte array 43 static const size_t HexStringToBytes(const std::string hex_string, 44 uint8_t*& bytes); 45 46 // Converts an integer value to a big-endian array of bytes. A new byte array 47 // is created at the given bytes pointer. There are always 4 bytes in the 48 // array. The byte array must be freed using: delete[] bytes. 49 // @param value the integer value to convert 50 // @param bytes pointer to a byte array that will be created with the 4-byte 51 // big-endian array 52 static const void IntToBigEndianBytes(uint32_t value, 53 uint8_t*& bytes); 54 55 // Converts a big-endian array of bytes to an unsigned-integer. The given byte 56 // array must contain 4 bytes. 57 // @param bytes a big-endian array of bytes 58 // @return the unsigned integer representation of the given byte array 59 static const uint32_t BigEndianBytesToInt(const uint8_t* bytes); 60 61 // Generates a random array of bytes with the given length. NULL is returned 62 // if a random number could not be generated. The returned array must be freed 63 // using: delete[] bytes. 64 // @param length the number of random bytes to generate 65 // @return an array of random bytes of the given length 66 static uint8_t* GenerateRandomBytes(size_t length); 67}; 68 69} // namespace util 70} // namespace polo 71 72#endif // POLO_UTIL_POLOUTIL_H_ 73