Bond697 icon

entropy

Bond697 | PRO | 11/26/11 07:06:46 PM UTC | 0 ⭐ | 10813 👁️ | Never ⏰ | []
ARM |

7.77 KB

|

None

|

0 👍

/

0 👎

RAM_ARM9:0207C6FC             ; =============== S U B R O U T I N E =======================================
RAM_ARM9:0207C6FC
RAM_ARM9:0207C6FC
RAM_ARM9:0207C6FC             ; void __fastcall OS_GetLowEntropyData(u32 *buf)
RAM_ARM9:0207C6FC             OS_GetLowEntropyData                    ; CODE XREF: buildSeed+Ap
RAM_ARM9:0207C6FC                                                     ; sub_2057B2C+14p
RAM_ARM9:0207C6FC
RAM_ARM9:0207C6FC             pSys_data       = -0x18
RAM_ARM9:0207C6FC
RAM_ARM9:0207C6FC F8 B5                       PUSH    {R3-R7,LR}      ; should be "(u32 buf[OS_LOW_ENTROPY_DATA_SIZE / sizeof(u32)])"
RAM_ARM9:0207C6FE 05 1C                       MOVS    R5, R0
RAM_ARM9:0207C700 21 48                       LDR     R0, =0x4000006  ; =REG_VCOUNT
RAM_ARM9:0207C702 22 4E                       LDR     R6, =0x2FFFC00  ; =system_data
RAM_ARM9:0207C704 07 88                       LDRH    R7, [R0]        ; *REG_VCOUNT
RAM_ARM9:0207C706 34 1C                       MOVS    R4, R6
RAM_ARM9:0207C708 00 94                       STR     R4, [SP,#0x18+pSys_data]
RAM_ARM9:0207C70A 80 34                       ADDS    R4, #0x80 ; 'Ç'
RAM_ARM9:0207C70C 00 94                       STR     R4, [SP,#0x18+pSys_data]
RAM_ARM9:0207C70E 74 34                       ADDS    R4, #0x74 ; 't'
RAM_ARM9:0207C710 FF F7 4E FA                 BL      OS_GetTickLo    ; get data @ REG_T0DAT
RAM_ARM9:0207C714 39 04                       LSLS    R1, R7, #0x10
RAM_ARM9:0207C716 08 43                       ORRS    R0, R1          ; (*REG_VCOUNT << 16) | *REG_T0DAT
RAM_ARM9:0207C718 28 60                       STR     R0, [R5]
RAM_ARM9:0207C71A A0 88                       LDRH    R0, [R4,#4]     ; last 2 bytes of the MAC
RAM_ARM9:0207C71C 1C 49                       LDR     R1, =0x214C5B8  ; vu64    OSi_TickCounter
RAM_ARM9:0207C71E 03 04                       LSLS    R3, R0, #0x10
RAM_ARM9:0207C720 08 68                       LDR     R0, [R1]        ; lower half OSi_TickCounter
RAM_ARM9:0207C722 4A 68                       LDR     R2, [R1,#4]     ; upper half OSi_TickCounter
RAM_ARM9:0207C724 58 40                       EORS    R0, R3
RAM_ARM9:0207C726 68 60                       STR     R0, [R5,#4]
RAM_ARM9:0207C728 0A 68                       LDR     R2, [R1]
RAM_ARM9:0207C72A F0 6B                       LDR     R0, [R6,#0x3C]
RAM_ARM9:0207C72C 4A 68                       LDR     R2, [R1,#4]
RAM_ARM9:0207C72E 00 99                       LDR     R1, [SP,#0x18+pSys_data]
RAM_ARM9:0207C730 49 6F                       LDR     R1, [R1,#0x74]
RAM_ARM9:0207C732 51 40                       EORS    R1, R2
RAM_ARM9:0207C734 41 40                       EORS    R1, R0
RAM_ARM9:0207C736 17 48                       LDR     R0, =0x4000600  ; =REG_GXSTAT
RAM_ARM9:0207C738 A9 60                       STR     R1, [R5,#8]
RAM_ARM9:0207C73A 00 68                       LDR     R0, [R0]
RAM_ARM9:0207C73C 48 40                       EORS    R0, R1
RAM_ARM9:0207C73E A8 60                       STR     R0, [R5,#8]
RAM_ARM9:0207C740 7A 20 80 00                 MOVS    R0, 0x1E8       ; 2FFFDE8
RAM_ARM9:0207C744 31 58                       LDR     R1, [R6,R0]     ; date
RAM_ARM9:0207C746 00 1D                       ADDS    R0, R0, #4      ; 2FFFDEC
RAM_ARM9:0207C748 E9 60                       STR     R1, [R5,#0xC]
RAM_ARM9:0207C74A 30 58                       LDR     R0, [R6,R0]     ; time
RAM_ARM9:0207C74C 28 61                       STR     R0, [R5,#0x10]
RAM_ARM9:0207C74E E5 20 80 00                 MOVS    R0, 0x394       ; MIC sampling result
RAM_ARM9:0207C752 31 5A                       LDRH    R1, [R6,R0]
RAM_ARM9:0207C754 0A 04                       LSLS    R2, R1, #0x10
RAM_ARM9:0207C756 01 1F                       SUBS    R1, R0, #4
RAM_ARM9:0207C758 71 58                       LDR     R1, [R6,R1]     ; MIC data storage address
RAM_ARM9:0207C75A 51 40                       EORS    R1, R2
RAM_ARM9:0207C75C 69 61                       STR     R1, [R5,#0x14]
RAM_ARM9:0207C75E 01 1C                       MOVS    R1, R0
RAM_ARM9:0207C760 16 31                       ADDS    R1, #0x16
RAM_ARM9:0207C762 71 5A                       LDRH    R1, [R6,R1]     ; touch_panel_buf[0]
RAM_ARM9:0207C764 0A 04                       LSLS    R2, R1, #0x10
RAM_ARM9:0207C766 01 1C                       MOVS    R1, R0
RAM_ARM9:0207C768 18 31                       ADDS    R1, #0x18
RAM_ARM9:0207C76A 71 5A                       LDRH    R1, [R6,R1]     ; touch_panel_buf[2]
RAM_ARM9:0207C76C 00 1D                       ADDS    R0, R0, #4
RAM_ARM9:0207C76E 11 43                       ORRS    R1, R2
RAM_ARM9:0207C770 A9 61                       STR     R1, [R5,#0x18]
RAM_ARM9:0207C772 30 5A                       LDRH    R0, [R6,R0]     ; #define HW_WM_RSSI_POOL  (HW_MAIN_MEM + 0x007fff98)   // Random number source depends on WM received signal intensity
RAM_ARM9:0207C774 02 04                       LSLS    R2, R0, #0x10
RAM_ARM9:0207C776 08 48                       LDR     R0, =0x4000130
RAM_ARM9:0207C778 01 88                       LDRH    R1, [R0]        ; gba-compatible input
RAM_ARM9:0207C77A 08 48                       LDR     R0, =0x2FFFFA8
RAM_ARM9:0207C77C 00 88                       LDRH    R0, [R0]        ; nds-only input
RAM_ARM9:0207C77E 08 43                       ORRS    R0, R1
RAM_ARM9:0207C780 10 43                       ORRS    R0, R2          ; OR the inputs together
RAM_ARM9:0207C782 E8 61                       STR     R0, [R5,#0x1C]
RAM_ARM9:0207C784 F8 BD                       POP     {R3-R7,PC}
RAM_ARM9:0207C784             ; End of function OS_GetLowEntropyData
RAM_ARM9:0207C784
RAM_ARM9:0207C784             ; ---------------------------------------------------------------------------
RAM_ARM9:0207C786 C0 46                       ALIGN 4
RAM_ARM9:0207C788 06 00 00 04 dword_207C788   DCD 0x4000006           ; DATA XREF: OS_GetLowEntropyData+4r
RAM_ARM9:0207C78C 00 FC FF 02 dword_207C78C   DCD 0x2FFFC00           ; DATA XREF: OS_GetLowEntropyData+6r
RAM_ARM9:0207C790 B8 C5 14 02 dword_207C790   DCD 0x214C5B8           ; DATA XREF: OS_GetLowEntropyData+20r
RAM_ARM9:0207C794 00 06 00 04 dword_207C794   DCD 0x4000600           ; DATA XREF: OS_GetLowEntropyData+3Ar
RAM_ARM9:0207C798 30 01 00 04 dword_207C798   DCD 0x4000130           ; DATA XREF: OS_GetLowEntropyData+7Ar
RAM_ARM9:0207C79C A8 FF FF 02 dword_207C79C   DCD 0x2FFFFA8           ; DATA XREF: OS_GetLowEntropyData+7Er
 
 
 
extern vu64 OSi_TickCounter;
 
/*---------------------------------------------------------------------------*
  Name:         OS_GetLowEntropyData
 
  Description:  Gets low entropy data that changes according to the system status.
 
  Arguments:    buffer - Pointer to the array that holds the data string.
 
  Returns:      None.
 *---------------------------------------------------------------------------*/
void OS_GetLowEntropyData(u32 buffer[OS_LOW_ENTROPY_DATA_SIZE / sizeof(u32)])
{
    // RTC work area in the System Work Memory
    const OSSystemWork *work = OS_GetSystemWork();
    const u8 *macAddress =
        (u8 *)((u32)(work->nvramUserInfo) + ((sizeof(NVRAMConfig) + 3) & ~0x00000003));
 
    buffer[0] = (u32)((GX_GetVCount() << 16) | OS_GetTickLo());
    buffer[1] = (u32)(*(u16 *)(macAddress + 4) << 16) ^ (u32)(OSi_TickCounter);
    buffer[2] = (u32)(OSi_TickCounter >> 32) ^ *(u32 *)macAddress ^ work->vblankCount;
#ifdef reg_G3X_GXSTAT
    buffer[2] ^= reg_G3X_GXSTAT;
#endif
    buffer[3] = *(u32 *)(&work->real_time_clock[0]);
    buffer[4] = *(u32 *)(&work->real_time_clock[4]);
    buffer[5] = (((u32)work->mic_sampling_data) << 16) ^ work->mic_last_address;
    buffer[6] = (u32)((*(u16 *)(&work->touch_panel[0]) << 16) | *(u16 *)(&work->touch_panel[2]));
    buffer[7] = (u32)((work->wm_rssi_pool << 16) | (reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF));
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎