Announcement

Collapse
No announcement yet.

Spritz (RC4) N variabel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Spritz (RC4) N variabel

    Hallo Zusammen,

    ich versuche den Algorithmus Spritz (nachfolger RC4) mit N=8 (bzw. verscgiedenen N) zum laufen zu bringen. Habe hier schon die entsprechenden Funktionen mit mod erweitert.
    Wüsste jemand worauf ich noch achten muss. bzw. wie ich die Funktionen Absorb, AbsorbByte und AbsorbNibble ändern müsste?

    https://people.csail.mit.edu/rivest/pubs/RS14.pdf

    Vielen Dank im Voraus für Eure Hilfe.

    Code:
    void Spritz::spritz_absorb_stop(State *state)
    {
    	unsigned char mod1 = getN();
    
    	if (state->a == getN() / 2) {
    		spritz_shuffle(state);
    	}
    	state->a++;
    	state->a = state->a % mod1;
    }
    
    void Spritz::spritz_absorb_nibble(State *state, const unsigned char x)
    {
    	
    	unsigned char y;
    	unsigned char mod1 = getN();
    
    	if (state->a == getN() / 2) {
    		spritz_shuffle(state);
    	}
    	y = getN() / 2 + x;
    	y = y % mod1;
    
    	std::swap( state->s[state->a], state->s[y] );
    
    	
    
    	state->a++;
    	state->a = state->a % mod1;
    	
    }
    
    void Spritz::spritz_absorb_byte(State *state, const unsigned char b)
    {
    
    	if ( getN() == 4 )
    	{
    		unsigned char low  = ( b & 1 );
    		unsigned char high = ( b >> 1 );
    		spritz_absorb_nibble(state, low  );
    		spritz_absorb_nibble(state, high );
    	}
    	else if ( getN() == 6 )
    	{
    		assert(false);
    		spritz_absorb_nibble(state, ( b % m_D ));
    		spritz_absorb_nibble(state, 
    			( static_cast<unsigned char>( static_cast<float>(b) / static_cast<float>(m_D) ) ) );
    	}
    	else if ( getN() == 8 )
    	{
    		spritz_absorb_nibble(state, ( b & 3 ));
    		spritz_absorb_nibble(state, ( b >> 2 ));
    	}
    	else
    		assert(false);
    }
    
    void Spritz::spritz_absorb(State *state, const unsigned char *msg, size_t length)
    {
    	size_t v;
    
    	for (v = 0; v < length; v++) {
    		spritz_absorb_byte(state, msg[v]);
    	}
    }
Working...
X