Exemple #1
0
BellServer::BellServer(uint32 keyMaster, uint32 *keyVersions, uint8 keyMax)
{
	keyMaster_ = keyMaster;
	keyVersions_ = keyVersions;
	keyMax_ = keyMax;
	
	printf("BellServer with master key: %08X\n", keyMaster);
	
	// Build all keys for all clients
	for(uint8 i = 0; i < keyMax_; i++)
	{
		uint32 clientKey = indexToKey(i);
		uint32 clientIndex = keyToIndex(clientKey, i);
		
		printf("Client %i (version: %i) with key %08X, decrypted key: %i\n", i, getKeyVersion(i), clientKey, clientIndex);
		
		if(clientIndex != i)
		{
			printf("There is an error in the key algorithm, EXIT!");
			exit(1);
		}
		
		// Add it to the list
		clientBells_[clientKey][0] = NULL;
	}
}
    bool DESFireKey::operator==(const DESFireKey& key) const
    {
        if (!Key::operator==(key))
        {
            return false;
        }
        if (isEmpty() && key.isEmpty())
        {
            return true;
        }

        if (getLength() != key.getLength() || isEmpty() || key.isEmpty())
        {
            return false;
        }

        return (getKeyVersion() == key.getKeyVersion() && getKeyType() == key.getKeyType());
    }
Exemple #3
0
uint32 BellServer::keyToIndex(uint32 key, uint8 index)
{
	return ((key ^ getKeyVersion(index)) ^ keyMaster_) >> (32 - keyMax_);
}
Exemple #4
0
uint32 BellServer::indexToKey(uint8 index)
{
	return (((index << (32 - keyMax_)) ^ keyMaster_) ^ getKeyVersion(index));
}