⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huge.h

📁 详细的AESRSASHA1实现原理
💻 H
字号:
// Huge.h: interface for the CHuge class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HUGE_H__E3BA5718_7A62_4FCF_822F_E03224FAB86B__INCLUDED_)
#define AFX_HUGE_H__E3BA5718_7A62_4FCF_822F_E03224FAB86B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#pragma warning(disable:4018)
//////////////////////////////////////////////////////////////////////
// typedef / constant
//////////////////////////////////////////////////////////////////////
typedef unsigned char BYTE;

const unsigned MAX_HUGE_SIZE	    = 40;
const unsigned MB_TEST_TIMES	    = 15;

const unsigned ELEM_MAX_VALUE	    = -1;
const unsigned ELEM_BYTE_SIZE	    = sizeof(unsigned);
const unsigned ELEM_BYTE_SIZE_LOG2	= 2;
const unsigned ELEM_BYTE_SIZE_MASK = ELEM_BYTE_SIZE-1;

const unsigned ELEM_BIT_SIZE	    = ELEM_BYTE_SIZE<<3;
const unsigned ELEM_BIT_SIZE_LOG2 	= 5;
const unsigned ELEM_BIT_SIZE_MASK   = ELEM_BIT_SIZE-1;

//////////////////////////////////////////////////////////////////////
// Class CHuge
//////////////////////////////////////////////////////////////////////
class CHuge  
{
public:
    CHuge();
    virtual ~CHuge();
    
private:
    unsigned    m_pValue[MAX_HUGE_SIZE];
    int		    m_iSize;
    bool	    m_bSign;
    
private:	
    void        Zero( );
    void        Tidy( );
    
public:
    bool        IsMinus( );
    void        SetBit( unsigned pos, bool flag = true );
    bool        GetBit( unsigned pos );
    unsigned    GetBitLength( );
    unsigned    CountLastZeros( );
    
    bool        CreateFromBytes( BYTE pBytes[], int size );
    bool        TransToBytes(BYTE pBytes[], int size);
    
private:
    friend	int		AbsCompare	( CHuge& a, CHuge& b );
    friend	int     Compare		( CHuge& a, CHuge& b );
    friend	CHuge	AbsAdd		( CHuge& a, CHuge& b );
    friend	CHuge	AbsSub		( CHuge& a, CHuge& b );	
    friend	void	Divide		( CHuge& a, CHuge& b, CHuge& res, CHuge& rem );
    
public:
    friend  bool    CreateRandomHuge( CHuge& n, const unsigned bits );
    friend  bool    CreateRandomHugePrime( CHuge& n, const unsigned bits );
    friend  bool	IsPrime     ( CHuge& n );
    friend  bool    Miller_Rabin( CHuge& n, CHuge& t, const unsigned shift );
    friend  CHuge   PowerMod    ( CHuge& base, CHuge& exp, CHuge& div );
    
public:
    void	    operator =	( const int n );
    void	    operator =	( const CHuge n );
    unsigned    operator []	( const int index ) const;
    unsigned&	operator []	( const int pos );
    
    
    friend	CHuge   operator <<	( CHuge& n, unsigned shift );
    friend	CHuge   operator >>	( CHuge& n, unsigned shift );
    ///////////////////////////////////////////////////
    friend	bool	operator <	( CHuge& a, CHuge& b );
    friend	bool	operator <=	( CHuge& a, CHuge& b );
    friend	bool	operator >	( CHuge& a, CHuge& b );
    friend	bool	operator >=	( CHuge& a, CHuge& b );
    friend	bool	operator ==	( CHuge& a, CHuge& b );
    friend	bool	operator !=	( CHuge& a, CHuge& b );
    
    friend	CHuge	operator -	( CHuge& n );
    friend	CHuge   operator +	( CHuge& a, CHuge& b );
    friend	CHuge   operator -	( CHuge& a, CHuge& b );
    friend	CHuge   operator *	( CHuge& a, CHuge& b );
    friend	CHuge   operator /	( CHuge& a, CHuge& b );
    friend	CHuge   operator %	( CHuge& a, CHuge& b );
    
    ///////////////////////////////////////////////////
    friend	bool	operator <	( CHuge& a, int n );
    friend	bool	operator <=	( CHuge& a, int n );
    friend	bool	operator >	( CHuge& a, int n );
    friend	bool	operator >=	( CHuge& a, int n );
    friend	bool	operator ==	( CHuge& a, int n );
    friend  bool    operator != ( CHuge& a, int n );
    
    friend	CHuge   operator +	( CHuge& a, int n );
    friend	CHuge   operator -	( CHuge& a, int n );
    friend	CHuge   operator *	( CHuge& a, int n );
    friend	CHuge   operator /	( CHuge& a, int n );
    friend	CHuge   operator %	( CHuge& a, int n );
};

#endif // !defined(AFX_HUGE_H__E3BA5718_7A62_4FCF_822F_E03224FAB86B__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -