Subversion Repositories freemyipod

Rev

Rev 143 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 143 Rev 156
Line 40... Line 40...
40
    AESOUTSIZE = size;
40
    AESOUTSIZE = size;
41
    AESAUXSIZE = 0x10;
41
    AESAUXSIZE = 0x10;
42
    AESINSIZE = 0x10;
42
    AESINSIZE = 0x10;
43
    AESSIZE3 = 0x10;
43
    AESSIZE3 = 0x10;
44
    ptr = direction == HWKEYAES_ENCRYPT ? 0 : (size >> 2) - 4;
44
    ptr = direction == HWKEYAES_ENCRYPT ? 0 : (size >> 2) - 4;
45
    clean_dcache();
-
 
46
    while (true)
45
    while (true)
47
    {
46
    {
48
        if (direction == HWKEYAES_ENCRYPT)
47
        if (direction == HWKEYAES_ENCRYPT)
49
        {
48
        {
50
            if (ptr >= (size >> 2)) break;
49
            if (ptr >= (size >> 2)) break;
Line 53... Line 52...
53
                    ((uint32_t*)data)[ptr + i] ^= ((uint32_t*)data)[ptr + i - 4];
52
                    ((uint32_t*)data)[ptr + i] ^= ((uint32_t*)data)[ptr + i - 4];
54
        }
53
        }
55
        AESOUTADDR = (uint32_t)data + (ptr << 2);
54
        AESOUTADDR = (uint32_t)data + (ptr << 2);
56
        AESINADDR = (uint32_t)data + (ptr << 2);
55
        AESINADDR = (uint32_t)data + (ptr << 2);
57
        AESAUXADDR = (uint32_t)data + (ptr << 2);
56
        AESAUXADDR = (uint32_t)data + (ptr << 2);
-
 
57
	    clean_dcache();
58
        AESSTATUS = 6;
58
        AESSTATUS = 6;
59
        AESGO = go;
59
        AESGO = go;
60
        go = 3;
60
        go = 3;
61
        while ((AESSTATUS & 6) == 0) yield();
61
        while ((AESSTATUS & 6) == 0) yield();
-
 
62
	    invalidate_dcache();
62
        if (direction == HWKEYAES_DECRYPT)
63
        if (direction == HWKEYAES_DECRYPT)
-
 
64
		{
-
 
65
			if (!ptr) break;
63
            for (i = 0; i < 4; i++)
66
            for (i = 0; i < 4; i++)
64
                ((uint32_t*)data)[ptr + i] ^= ((uint32_t*)data)[ptr + i - 4];
67
                ((uint32_t*)data)[ptr + i] ^= ((uint32_t*)data)[ptr + i - 4];
-
 
68
		}
65
        ptr += direction == HWKEYAES_ENCRYPT ? 4 : -4;
69
        ptr += direction == HWKEYAES_ENCRYPT ? 4 : -4;
66
    }
70
    }
67
    invalidate_dcache();
-
 
68
    AESCONTROL = 0;
71
    AESCONTROL = 0;
69
    PWRCON(1) |= 0x400;
72
    PWRCON(1) |= 0x400;
70
}
73
}