mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-04-23 07:05:36 +03:00
109 lines
3.2 KiB
C++
109 lines
3.2 KiB
C++
/* Copyright (C) 2014 InfiniDB, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; version 2 of
|
|
the License.
|
|
|
|
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.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
/*
|
|
* @brief class SHA1
|
|
*
|
|
* Copyright (C) 1998, 2009
|
|
* Paul E. Jones <paulej@packetizer.com>
|
|
|
|
* Freeware Public License (FPL)
|
|
*
|
|
* This software is licensed as "freeware." Permission to distribute
|
|
* this software in source and binary forms, including incorporation
|
|
* into other products, is hereby granted without a fee. THIS SOFTWARE
|
|
* IS PROVIDED 'AS IS' AND WITHOUT ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
* AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHOR SHALL NOT BE HELD
|
|
* LIABLE FOR ANY DAMAGES RESULTING FROM THE USE OF THIS SOFTWARE, EITHER
|
|
* DIRECTLY OR INDIRECTLY, INCLUDING, BUT NOT LIMITED TO, LOSS OF DATA
|
|
* OR DATA BEING RENDERED INACCURATE.
|
|
*
|
|
*
|
|
* Description:
|
|
* This class implements the Secure Hashing Standard as defined
|
|
* in FIPS PUB 180-1 published April 17, 1995.
|
|
*
|
|
* Many of the variable names in this class, especially the single
|
|
* character names, were used because those were the names used
|
|
* in the publication.
|
|
*
|
|
* Please read the file sha1.cpp for more information.
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
namespace funcexp
|
|
{
|
|
class SHA1
|
|
{
|
|
public:
|
|
SHA1();
|
|
virtual ~SHA1();
|
|
|
|
/*
|
|
* Re-initialize the class
|
|
*/
|
|
void Reset();
|
|
|
|
/*
|
|
* Returns the message digest
|
|
*/
|
|
bool Result(unsigned* message_digest_array);
|
|
|
|
/*
|
|
* Provide input to SHA1
|
|
*/
|
|
void Input(const unsigned char* message_array, unsigned length);
|
|
void Input(const char* message_array, unsigned length);
|
|
void Input(unsigned char message_element);
|
|
void Input(char message_element);
|
|
SHA1& operator<<(const char* message_array);
|
|
SHA1& operator<<(const unsigned char* message_array);
|
|
SHA1& operator<<(const char message_element);
|
|
SHA1& operator<<(const unsigned char message_element);
|
|
|
|
private:
|
|
/*
|
|
* Process the next 512 bits of the message
|
|
*/
|
|
void ProcessMessageBlock();
|
|
|
|
/*
|
|
* Pads the current message block to 512 bits
|
|
*/
|
|
void PadMessage();
|
|
|
|
/*
|
|
* Performs a circular left shift operation
|
|
*/
|
|
inline unsigned CircularShift(int bits, unsigned word);
|
|
|
|
unsigned H[5]; // Message digest buffers
|
|
unsigned Length_Low; // Message length in bits
|
|
unsigned Length_High; // Message length in bits
|
|
|
|
unsigned char Message_Block[64]; // 512-bit message blocks
|
|
int Message_Block_Index; // Index into message block array
|
|
|
|
bool Computed; // Is the digest computed?
|
|
bool Corrupted; // Is the message digest corruped?
|
|
};
|
|
|
|
} // namespace funcexp
|