2019-05-14 18:42:25 +03:00
# ifndef BLINDING_H__
# define BLINDING_H__
# include <inttypes.h>
# include <string>
2019-05-14 21:42:10 +03:00
# include <vector>
2019-05-14 18:42:25 +03:00
# include "Identity.h"
namespace i2p
{
namespace data
{
class BlindedPublicKey // for encrypted LS2
{
public :
2019-09-06 18:02:19 +03:00
BlindedPublicKey ( std : : shared_ptr < const IdentityEx > identity , bool clientAuth = false ) ;
2019-05-14 18:42:25 +03:00
BlindedPublicKey ( const std : : string & b33 ) ; // from b33 without .b32.i2p
std : : string ToB33 ( ) const ;
const uint8_t * GetPublicKey ( ) const { return m_PublicKey . data ( ) ; } ;
size_t GetPublicKeyLen ( ) const { return m_PublicKey . size ( ) ; } ;
SigningKeyType GetSigType ( ) const { return m_SigType ; } ;
SigningKeyType GetBlindedSigType ( ) const { return m_BlindedSigType ; } ;
2019-09-23 20:42:15 +03:00
bool IsValid ( ) const { return GetSigType ( ) ; } ; // signature type 0 means invalid
2019-05-14 18:42:25 +03:00
void GetSubcredential ( const uint8_t * blinded , size_t len , uint8_t * subcredential ) const ; // 32 bytes
2019-06-03 19:51:57 +03:00
size_t GetBlindedKey ( const char * date , uint8_t * blindedKey ) const ; // date is 8 chars "YYYYMMDD", return public key length
2019-05-22 23:15:11 +03:00
size_t BlindPrivateKey ( const uint8_t * priv , const char * date , uint8_t * blindedPriv , uint8_t * blindedPub ) const ; // date is 8 chars "YYYYMMDD", return public key length
2019-05-14 18:42:25 +03:00
i2p : : data : : IdentHash GetStoreHash ( const char * date = nullptr ) const ; // date is 8 chars "YYYYMMDD", use current if null
private :
void GetCredential ( uint8_t * credential ) const ; // 32 bytes
void GenerateAlpha ( const char * date , uint8_t * seed ) const ; // 64 bytes, date is 8 chars "YYYYMMDD"
void H ( const std : : string & p , const std : : vector < std : : pair < const uint8_t * , size_t > > & bufs , uint8_t * hash ) const ;
private :
std : : vector < uint8_t > m_PublicKey ;
i2p : : data : : SigningKeyType m_SigType , m_BlindedSigType ;
2019-09-06 18:02:19 +03:00
bool m_IsClientAuth = false ;
2019-05-14 18:42:25 +03:00
} ;
}
}
# endif