@ -969,186 +969,4 @@ int32_t komodo_kvsigverify(uint8_t *buf,int32_t len,bits256 pubkey,bits256 sig)
else return ( 0 ) ;
}
/*
# include <stdio.h>
bits256 GENESIS_PUBKEY , GENESIS_PRIVKEY ;
bits256 acct777_pubkey ( bits256 privkey )
{
static uint8_t basepoint [ 32 ] = { 9 } ;
bits256 pubkey ;
privkey . bytes [ 0 ] & = 248 , privkey . bytes [ 31 ] & = 127 , privkey . bytes [ 31 ] | = 64 ;
curve25519_donna ( pubkey . bytes , privkey . bytes , basepoint ) ;
return ( pubkey ) ;
}
uint64_t acct777_nxt64bits ( bits256 pubkey )
{
bits256 acct ;
vcalc_sha256 ( 0 , acct . bytes , pubkey . bytes , sizeof ( pubkey ) ) ;
return ( acct . txid ) ;
}
bits256 acct777_msgprivkey ( uint8_t * data , int32_t datalen )
{
bits256 hash ;
vcalc_sha256 ( 0 , hash . bytes , data , datalen ) ;
return ( hash ) ;
}
bits256 acct777_msgpubkey ( uint8_t * data , int32_t datalen )
{
return ( acct777_pubkey ( acct777_msgprivkey ( data , datalen ) ) ) ;
}
bits256 acct777_hashiter ( bits256 privkey , bits256 pubkey , int32_t lockdays , uint8_t chainlen )
{
uint16_t lockseed , signlen = 0 ; uint8_t signbuf [ 16 ] ; bits256 shared , lockhash ;
lockseed = ( chainlen & 0x7f ) | ( lockdays < < 7 ) ;
signlen = 0 , signbuf [ signlen + + ] = lockseed & 0xff , signbuf [ signlen + + ] = ( lockseed > > 8 ) & 0xff ;
privkey . bytes [ 0 ] & = 248 , privkey . bytes [ 31 ] & = 127 , privkey . bytes [ 31 ] | = 64 ;
shared = curve25519 ( privkey , pubkey ) ;
vcalc_sha256cat ( lockhash . bytes , shared . bytes , sizeof ( shared ) , signbuf , signlen ) ;
return ( lockhash ) ;
}
bits256 acct777_lockhash ( bits256 pubkey , int32_t lockdays , uint8_t chainlen )
{
bits256 lockhash = GENESIS_PRIVKEY ;
while ( chainlen > 0 )
lockhash = acct777_hashiter ( lockhash , pubkey , lockdays , chainlen - - ) ;
return ( lockhash ) ;
}
bits256 acct777_invoicehash ( bits256 * invoicehash , uint16_t lockdays , uint8_t chainlen )
{
int32_t i ; bits256 lockhash , privkey ;
OS_randombytes ( privkey . bytes , sizeof ( privkey ) ) ; // both privkey and pubkey are sensitive. pubkey allows verification, privkey proves owner
lockhash = privkey ;
for ( i = 0 ; i < chainlen ; i + + )
lockhash = acct777_hashiter ( lockhash , GENESIS_PUBKEY , chainlen - i , lockdays ) ;
* invoicehash = lockhash ;
return ( privkey ) ;
}
//char *bits256_str();
//struct acct777_sig { bits256 sigbits,pubkey; uint64_t signer64bits; uint32_t timestamp,allocsize; };
void acct777_rwsig ( int32_t rwflag , uint8_t * serialized , struct acct777_sig * sig )
{
int32_t len = 0 ;
iguana_rwbignum ( rwflag , & serialized [ len ] , sizeof ( bits256 ) , sig - > sigbits . bytes ) , len + = sizeof ( bits256 ) ;
iguana_rwbignum ( rwflag , & serialized [ len ] , sizeof ( bits256 ) , sig - > pubkey . bytes ) , len + = sizeof ( bits256 ) ;
iguana_rwnum ( rwflag , & serialized [ len ] , sizeof ( sig - > signer64bits ) , & sig - > signer64bits ) , len + = sizeof ( sig - > signer64bits ) ;
iguana_rwnum ( rwflag , & serialized [ len ] , sizeof ( sig - > timestamp ) , & sig - > timestamp ) , len + = sizeof ( sig - > timestamp ) ;
iguana_rwnum ( rwflag , & serialized [ len ] , sizeof ( sig - > allocsize ) , & sig - > allocsize ) , len + = sizeof ( sig - > allocsize ) ;
}
int32_t acct777_sigcheck ( struct acct777_sig * sig )
{
# define IGUANA_GENESIS 1453075200
# define IGUANA_MAXPACKETSIZE (1024 * 1024 * 2)
# define TEN_YEARS (10 * 365 * 24 * 3600)
if ( sig - > allocsize < sizeof ( * sig ) | | sig - > allocsize > IGUANA_MAXPACKETSIZE )
{
//printf("acct777_sign: invalid datalen.%d hex.%08x\n",sig->allocsize,sig->allocsize);
return ( - 1 ) ;
}
if ( sig - > timestamp < IGUANA_GENESIS | | sig - > timestamp > ( long ) IGUANA_GENESIS + TEN_YEARS )
{
printf ( " acct777_sign: invalid timestamp.%u (%u %u) \n " , sig - > timestamp , IGUANA_GENESIS , IGUANA_GENESIS + TEN_YEARS ) ;
return ( - 1 ) ;
}
return ( sig - > allocsize ) ;
}
uint64_t acct777_sign ( struct acct777_sig * sig , bits256 privkey , bits256 otherpubkey , uint32_t timestamp , uint8_t * serialized , int32_t datalen )
{
bits256 pubkey ; bits256 shared ; uint8_t buf [ sizeof ( * sig ) ] ;
pubkey = acct777_pubkey ( privkey ) ;
if ( memcmp ( sig - > pubkey . bytes , otherpubkey . bytes , sizeof ( bits256 ) ) ! = 0 )
{
//char str[65],str2[65];
//printf("set sig fields.(%s) != (%s)\n",bits256_str(str,sig->pubkey),bits256_str(str2,otherpubkey));
sig - > pubkey = pubkey ;
sig - > timestamp = timestamp ;
sig - > allocsize = ( int32_t ) ( datalen + sizeof ( * sig ) ) ;
sig - > signer64bits = acct777_nxt64bits ( sig - > pubkey ) ;
}
sig - > sigbits = shared = curve25519 ( privkey , otherpubkey ) ;
if ( acct777_sigcheck ( sig ) < 0 )
return ( 0 ) ;
memset ( buf , 0 , sizeof ( buf ) ) ;
acct777_rwsig ( 1 , buf , sig ) ;
//int32_t i; for (i=0; i<sizeof(buf); i++)
// printf("%02x ",buf[i]);
//printf(" <<<<<<<<< SIGN.%d allocsize.%d signer.%llu t%u\n",datalen,sig->allocsize,(long long)sig->signer64bits,sig->timestamp);
//char str[65]; printf("shared.(%s) crc.%u datalen.%d\n",bits256_str(str,shared),calc_crc32(0,buf,sizeof(buf)),datalen);
vcalc_sha256cat ( sig - > sigbits . bytes , buf , sizeof ( buf ) , serialized , datalen ) ;
//printf(" calcsig.%llx pubkey.%llx signer.%llu | t%u crc.%08x len.%d shared.%llx <- %llx * %llx\n",(long long)sig->sigbits.txid,(long long)sig->pubkey.txid,(long long)sig->signer64bits,timestamp,calc_crc32(0,serialized,datalen),datalen,(long long)shared.txid,(long long)privkey.txid,(long long)otherpubkey.txid);
return ( sig - > signer64bits ) ;
}
uint64_t acct777_validate ( struct acct777_sig * sig , bits256 privkey , bits256 pubkey )
{
struct acct777_sig checksig ; uint64_t signerbits ; int32_t datalen ; uint8_t * serialized ;
datalen = ( int32_t ) ( sig - > allocsize - sizeof ( * sig ) ) ;
checksig = * sig ;
# if defined(_M_X64)
serialized = ( uint8_t * ) ( ( unsigned char * ) sig + sizeof ( * sig ) ) ;
# else
serialized = ( uint8_t * ) ( ( long ) sig + sizeof ( * sig ) ) ;
# endif
//{ int32_t i; for (i=0; i<datalen; i++) printf("%02x",serialized[i]); printf(" VALIDATE.%d?\n",datalen); }
acct777_sign ( & checksig , privkey , pubkey , sig - > timestamp , serialized , datalen ) ;
if ( memcmp ( checksig . sigbits . bytes , sig - > sigbits . bytes , sizeof ( checksig . sigbits ) ) ! = 0 )
{
//char *bits256_str();
//char str[65],str2[65]; printf("sig compare error using sig->pub from %llu\n>>>>>>>> sig.(%s) vs (%s)",(long long)acct777_nxt64bits(sig->pubkey),bits256_str(str,checksig.sigbits),bits256_str(str2,sig->sigbits));
return ( 0 ) ;
}
signerbits = acct777_nxt64bits ( sig - > pubkey ) ;
if ( signerbits = = checksig . signer64bits )
return ( signerbits ) ;
else return ( 0 ) ;
}
uint64_t acct777_signtx ( struct acct777_sig * sig , bits256 privkey , uint32_t timestamp , uint8_t * data , int32_t datalen )
{
return ( acct777_sign ( sig , privkey , acct777_msgpubkey ( data , datalen ) , timestamp , data , datalen ) ) ;
}
uint64_t acct777_swaptx ( bits256 privkey , struct acct777_sig * sig , uint32_t timestamp , uint8_t * data , int32_t datalen )
{
uint64_t othernxt ;
if ( ( othernxt = acct777_validate ( sig ) ) ! = sig - > signer64bits )
return ( 0 ) ;
return ( acct777_sign ( sig , privkey , acct777_msgpubkey ( data , datalen ) , timestamp , data , datalen ) ) ;
} */
int32_t _SuperNET_cipher ( uint8_t nonce [ crypto_box_NONCEBYTES ] , uint8_t * cipher , uint8_t * message , int32_t len , bits256 destpub , bits256 srcpriv , uint8_t * buf )
{
memset ( cipher , 0 , len + crypto_box_ZEROBYTES ) ;
memset ( buf , 0 , crypto_box_ZEROBYTES ) ;
memcpy ( buf + crypto_box_ZEROBYTES , message , len ) ;
crypto_box ( cipher , buf , len + crypto_box_ZEROBYTES , nonce , destpub . bytes , srcpriv . bytes ) ;
return ( len + crypto_box_ZEROBYTES ) ;
}
uint8_t * _SuperNET_decipher ( uint8_t nonce [ crypto_box_NONCEBYTES ] , uint8_t * cipher , uint8_t * message , int32_t len , bits256 srcpub , bits256 mypriv )
{
int32_t err ;
if ( ( err = crypto_box_open ( message , cipher , len , nonce , srcpub . bytes , mypriv . bytes ) ) = = 0 )
{
message + = crypto_box_ZEROBYTES ;
len - = crypto_box_ZEROBYTES ;
return ( message ) ;
}
return ( 0 ) ;
}
//#undef force_inline
# endif