sha256.h #1

  • //
  • guest/
  • perforce_software/
  • p4/
  • 2017-1/
  • support/
  • sha256.h
  • View
  • Commits
  • Open Download .zip Download (2 KB)
/*
 * Copyright 1995, 1996 Perforce Software.  All rights reserved.
 *
 * This file is part of Perforce - the FAST SCM System.
 */


/*
 * SHA256 - compute sha256 checksum given a bunch of blocks of data. This header
 *          file includes two related classes:
 *
 *          Sha256Digester: utility wrapper around the OpenSSL SHA256 libraries
 *          to simplify computing a SHA256 of some data.
 *
 *          Sha256: encapsulation of a 256-bit SHA256 value.
 */

# define Sha256Length 32

class Sha256
{
    public:
			Sha256() { Clear(); }
			Sha256( unsigned const char *bytes) { Import( bytes ); }

			~Sha256() {}

	void		Clear() { memset( data, 0, Sha256Length ); }

	void		Import( unsigned const char *bytes )
	                { memcpy( data, bytes, Sha256Length ); }
	
	void		Export( unsigned char *bytes ) const
	                { memcpy( bytes, data, Sha256Length ); }

	int		Compare( const Sha256 &other ) const
	                { return memcmp( data, other.data, Sha256Length ); }

	int		Compare( unsigned const char *bytes ) const
	                { return memcmp( data, bytes, Sha256Length ); }

	void		FromString( const StrPtr *sha );

	void		Fmt( StrBuf &buf ) const;

	int		IsSet() const;
	                    
	unsigned char data [ Sha256Length ];
} ;

class Sha256Digester
{

    public:
			Sha256Digester();
			~Sha256Digester();
	void		Update( const StrPtr &buf );
	void		Final( StrBuf &output );
	void		Final( unsigned char digest[ Sha256Length ] );
	void		Final( Sha256 &sha );

    private:
	void		*ctx;

};

# Change User Description Committed
#1 22288 mark_mears import 2017.1 code drop