Beispiel #1
0
void Nasha256_compile(hashState256 *state)
{
	int i;
	uint_64t x[16],y[16],l1,l2;
	B64 tmp;
	uint_32t A1, B1, C1, A2, B2, C2;
    uint_16t alpha1, beta1, gama1, alpha2, beta2, gama2;
	uint_8t a1,b1,c1,a2,b2,c2,a3,b3,c3;
	
	PutX(y,state);
	LinTr16(y,x);
	
	// computing the leaders l1 and l2
	l1=x[0]+x[1];
	l2=x[2]+x[3];
	
	//computing the 8-bite words a1, b1, c1,a2,b2,c2,a3,b3,c3
	tmp.bit64=x[4]+x[5];
	a1=tmp.b8[7]; b1=tmp.b8[6]; c1=tmp.b8[5];
	a2=tmp.b8[4]; b2=tmp.b8[3]; c2=tmp.b8[2];
	a3=tmp.b8[1]; b3=tmp.b8[0]; c3=a1;
	
	//computing the 16-bite words alpha1, beta1, gama1, alpha2, beta2, gama2
	tmp.bit64=x[6]+x[7];
	alpha1=tmp.bit16[3]; beta1=tmp.bit16[2]; gama1=tmp.bit16[1]; alpha2=tmp.bit16[0];
	
	tmp.bit64=x[8]+x[9]; 
	beta2=tmp.bit16[3]; gama2=tmp.bit16[2];
	
	//computing the 32-bite words A1, B1, C1, A2, B2, C2
	tmp.bit64=x[10]+x[11];
	A1=tmp.bit32[1]; B1=tmp.bit32[0];

	tmp.bit64=x[12]+x[13];
	C1=tmp.bit32[1]; A2=tmp.bit32[0];

	tmp.bit64=x[14]+x[15];
	B2=tmp.bit32[1]; C2=tmp.bit32[0];
	AE(l2,x,y,16,a1,b1,c1,a2,b2,c2,a3,b3,c3,alpha1, beta1, gama1,A1, B1, C1);
	swap_64(y,16);
	RAE(l1,y,x,15,a1,b1,c1,a2,b2,c2,a3,b3,c3,alpha2, beta2, gama2,A2, B2, C2);
	/*  Finally compute the hash digest (or/and the hash chain value) */
	for (i=0;i<4;i++){
		state->H[i]=x[(i<<2)+1];
		state->hash[i]=x[(i<<2)+3];
	}
}
Beispiel #2
0
BOOL TaskRegSave( VOID )
{
	STRPTR data;
	ULONG data_len = 0;
	int items = 0;
	BOOL rc = FALSE;
	TaskReg *entry;
	struct DupsLog *d;
	
	ENTER();
	
	// this is executed uSemaLock()'ed or Forbid()'ed
	
	DBG_ASSERT(G && G->MagicID == GLOBAL_MAGIC);
	if(!G || G->MagicID != GLOBAL_MAGIC)
	{
		SetIoErr(ERROR_OBJECT_WRONG_TYPE);
		return FALSE;
	}
	
	if(IsMinListEmpty(G->TaskRegList))
	{
		DBG("The list is empty!\n");
		return TRUE;
	}
	
	NewList((struct List *) &tr_dups );
	
	ITERATE_LIST( G->TaskRegList, TaskReg *, entry)
	{
		if(IsDup(entry->TaskName,entry->AlertFlags,entry->ServerPort))
			continue;
		
		if((d = Malloc(sizeof(struct DupsLog))))
		{
			d->TaskName   = entry->TaskName;
			d->AlertFlags = entry->AlertFlags;
			d->ServerPort = entry->ServerPort;
			AddTail((struct List *)&tr_dups, (struct Node *)d);
		}
		
		items++;
		
		data_len += entry->TaskNameLength;
		#if DATABASE_RESERVED
		data_len += DATABASE_RESERVED;
		#endif
	}
	
	data_len += (sizeof(TaskReg) * items) + (sizeof(ULONG)*3);
	DBG_VALUE(data_len);
	
	if((data = Malloc(data_len)))
	{
		STRPTR ptr=data;
		BPTR fd;
		
		PutV( ptr, ULONG, DATABASE_ID);
		PutV( ptr, ULONG, DATABASE_VERSION);
		
		ITERATE_LIST( G->TaskRegList, TaskReg *, entry)
		{
			DBG_STRING(entry->TaskName);
			
			if(IsDup(entry->TaskName,entry->AlertFlags,entry->ServerPort))
				continue;
			
			PutV( ptr, UWORD, entry->TaskNameLength );
			PutX( ptr, entry->TaskNameLength, entry->TaskName );
			
			PutV( ptr, BYTE, entry->allow );
			PutV( ptr, BYTE, entry->remember );
			
			PutV( ptr, ULONG, entry->RegTime.ds_Days );
			PutV( ptr, ULONG, entry->RegTime.ds_Minute );
			PutV( ptr, ULONG, entry->RegTime.ds_Tick );
			
			PutV( ptr, ULONG, entry->ModTime.ds_Days );
			PutV( ptr, ULONG, entry->ModTime.ds_Minute );
			PutV( ptr, ULONG, entry->ModTime.ds_Tick );
			
			PutV( ptr, ULONG, entry->accesses   );
			PutV( ptr, ULONG, entry->FileCRC    );
			PutV( ptr, UWORD, entry->CRCMods    );
			PutV( ptr, UWORD, entry->AlertFlags );
			PutV( ptr, UWORD, entry->ServerPort );
			
			#if DATABASE_RESERVED
			ptr += DATABASE_RESERVED;
			#endif
		}
		
		PutV( ptr, ULONG, DATABASE_EOFID );
		
		if((fd = Open( DATABASE_FILE, MODE_NEWFILE )))
		{
			LONG len = (LONG)(ptr-data);
			DBG_VALUE(len);
			
			transcode( data, len );
			
			rc = (Write( fd, data, len ) == len);
			Close(fd);
		}
		
		Free(data);
	}