Bond697

entropy

Nov 26th, 2011
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 7.77 KB | None | 0 0
  1. RAM_ARM9:0207C6FC             ; =============== S U B R O U T I N E =======================================
  2. RAM_ARM9:0207C6FC
  3. RAM_ARM9:0207C6FC
  4. RAM_ARM9:0207C6FC             ; void __fastcall OS_GetLowEntropyData(u32 *buf)
  5. RAM_ARM9:0207C6FC             OS_GetLowEntropyData                    ; CODE XREF: buildSeed+Ap
  6. RAM_ARM9:0207C6FC                                                     ; sub_2057B2C+14p
  7. RAM_ARM9:0207C6FC
  8. RAM_ARM9:0207C6FC             pSys_data       = -0x18
  9. RAM_ARM9:0207C6FC
  10. RAM_ARM9:0207C6FC F8 B5                       PUSH    {R3-R7,LR}      ; should be "(u32 buf[OS_LOW_ENTROPY_DATA_SIZE / sizeof(u32)])"
  11. RAM_ARM9:0207C6FE 05 1C                       MOVS    R5, R0
  12. RAM_ARM9:0207C700 21 48                       LDR     R0, =0x4000006  ; =REG_VCOUNT
  13. RAM_ARM9:0207C702 22 4E                       LDR     R6, =0x2FFFC00  ; =system_data
  14. RAM_ARM9:0207C704 07 88                       LDRH    R7, [R0]        ; *REG_VCOUNT
  15. RAM_ARM9:0207C706 34 1C                       MOVS    R4, R6
  16. RAM_ARM9:0207C708 00 94                       STR     R4, [SP,#0x18+pSys_data]
  17. RAM_ARM9:0207C70A 80 34                       ADDS    R4, #0x80 ; 'Ç'
  18. RAM_ARM9:0207C70C 00 94                       STR     R4, [SP,#0x18+pSys_data]
  19. RAM_ARM9:0207C70E 74 34                       ADDS    R4, #0x74 ; 't'
  20. RAM_ARM9:0207C710 FF F7 4E FA                 BL      OS_GetTickLo    ; get data @ REG_T0DAT
  21. RAM_ARM9:0207C714 39 04                       LSLS    R1, R7, #0x10
  22. RAM_ARM9:0207C716 08 43                       ORRS    R0, R1          ; (*REG_VCOUNT << 16) | *REG_T0DAT
  23. RAM_ARM9:0207C718 28 60                       STR     R0, [R5]
  24. RAM_ARM9:0207C71A A0 88                       LDRH    R0, [R4,#4]     ; last 2 bytes of the MAC
  25. RAM_ARM9:0207C71C 1C 49                       LDR     R1, =0x214C5B8  ; vu64    OSi_TickCounter
  26. RAM_ARM9:0207C71E 03 04                       LSLS    R3, R0, #0x10
  27. RAM_ARM9:0207C720 08 68                       LDR     R0, [R1]        ; lower half OSi_TickCounter
  28. RAM_ARM9:0207C722 4A 68                       LDR     R2, [R1,#4]     ; upper half OSi_TickCounter
  29. RAM_ARM9:0207C724 58 40                       EORS    R0, R3
  30. RAM_ARM9:0207C726 68 60                       STR     R0, [R5,#4]
  31. RAM_ARM9:0207C728 0A 68                       LDR     R2, [R1]
  32. RAM_ARM9:0207C72A F0 6B                       LDR     R0, [R6,#0x3C]
  33. RAM_ARM9:0207C72C 4A 68                       LDR     R2, [R1,#4]
  34. RAM_ARM9:0207C72E 00 99                       LDR     R1, [SP,#0x18+pSys_data]
  35. RAM_ARM9:0207C730 49 6F                       LDR     R1, [R1,#0x74]
  36. RAM_ARM9:0207C732 51 40                       EORS    R1, R2
  37. RAM_ARM9:0207C734 41 40                       EORS    R1, R0
  38. RAM_ARM9:0207C736 17 48                       LDR     R0, =0x4000600  ; =REG_GXSTAT
  39. RAM_ARM9:0207C738 A9 60                       STR     R1, [R5,#8]
  40. RAM_ARM9:0207C73A 00 68                       LDR     R0, [R0]
  41. RAM_ARM9:0207C73C 48 40                       EORS    R0, R1
  42. RAM_ARM9:0207C73E A8 60                       STR     R0, [R5,#8]
  43. RAM_ARM9:0207C740 7A 20 80 00                 MOVS    R0, 0x1E8       ; 2FFFDE8
  44. RAM_ARM9:0207C744 31 58                       LDR     R1, [R6,R0]     ; date
  45. RAM_ARM9:0207C746 00 1D                       ADDS    R0, R0, #4      ; 2FFFDEC
  46. RAM_ARM9:0207C748 E9 60                       STR     R1, [R5,#0xC]
  47. RAM_ARM9:0207C74A 30 58                       LDR     R0, [R6,R0]     ; time
  48. RAM_ARM9:0207C74C 28 61                       STR     R0, [R5,#0x10]
  49. RAM_ARM9:0207C74E E5 20 80 00                 MOVS    R0, 0x394       ; MIC sampling result
  50. RAM_ARM9:0207C752 31 5A                       LDRH    R1, [R6,R0]
  51. RAM_ARM9:0207C754 0A 04                       LSLS    R2, R1, #0x10
  52. RAM_ARM9:0207C756 01 1F                       SUBS    R1, R0, #4
  53. RAM_ARM9:0207C758 71 58                       LDR     R1, [R6,R1]     ; MIC data storage address
  54. RAM_ARM9:0207C75A 51 40                       EORS    R1, R2
  55. RAM_ARM9:0207C75C 69 61                       STR     R1, [R5,#0x14]
  56. RAM_ARM9:0207C75E 01 1C                       MOVS    R1, R0
  57. RAM_ARM9:0207C760 16 31                       ADDS    R1, #0x16
  58. RAM_ARM9:0207C762 71 5A                       LDRH    R1, [R6,R1]     ; touch_panel_buf[0]
  59. RAM_ARM9:0207C764 0A 04                       LSLS    R2, R1, #0x10
  60. RAM_ARM9:0207C766 01 1C                       MOVS    R1, R0
  61. RAM_ARM9:0207C768 18 31                       ADDS    R1, #0x18
  62. RAM_ARM9:0207C76A 71 5A                       LDRH    R1, [R6,R1]     ; touch_panel_buf[2]
  63. RAM_ARM9:0207C76C 00 1D                       ADDS    R0, R0, #4
  64. RAM_ARM9:0207C76E 11 43                       ORRS    R1, R2
  65. RAM_ARM9:0207C770 A9 61                       STR     R1, [R5,#0x18]
  66. 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
  67. RAM_ARM9:0207C774 02 04                       LSLS    R2, R0, #0x10
  68. RAM_ARM9:0207C776 08 48                       LDR     R0, =0x4000130
  69. RAM_ARM9:0207C778 01 88                       LDRH    R1, [R0]        ; gba-compatible input
  70. RAM_ARM9:0207C77A 08 48                       LDR     R0, =0x2FFFFA8
  71. RAM_ARM9:0207C77C 00 88                       LDRH    R0, [R0]        ; nds-only input
  72. RAM_ARM9:0207C77E 08 43                       ORRS    R0, R1
  73. RAM_ARM9:0207C780 10 43                       ORRS    R0, R2          ; OR the inputs together
  74. RAM_ARM9:0207C782 E8 61                       STR     R0, [R5,#0x1C]
  75. RAM_ARM9:0207C784 F8 BD                       POP     {R3-R7,PC}
  76. RAM_ARM9:0207C784             ; End of function OS_GetLowEntropyData
  77. RAM_ARM9:0207C784
  78. RAM_ARM9:0207C784             ; ---------------------------------------------------------------------------
  79. RAM_ARM9:0207C786 C0 46                       ALIGN 4
  80. RAM_ARM9:0207C788 06 00 00 04 dword_207C788   DCD 0x4000006           ; DATA XREF: OS_GetLowEntropyData+4r
  81. RAM_ARM9:0207C78C 00 FC FF 02 dword_207C78C   DCD 0x2FFFC00           ; DATA XREF: OS_GetLowEntropyData+6r
  82. RAM_ARM9:0207C790 B8 C5 14 02 dword_207C790   DCD 0x214C5B8           ; DATA XREF: OS_GetLowEntropyData+20r
  83. RAM_ARM9:0207C794 00 06 00 04 dword_207C794   DCD 0x4000600           ; DATA XREF: OS_GetLowEntropyData+3Ar
  84. RAM_ARM9:0207C798 30 01 00 04 dword_207C798   DCD 0x4000130           ; DATA XREF: OS_GetLowEntropyData+7Ar
  85. RAM_ARM9:0207C79C A8 FF FF 02 dword_207C79C   DCD 0x2FFFFA8           ; DATA XREF: OS_GetLowEntropyData+7Er
  86.  
  87.  
  88.  
  89. extern vu64 OSi_TickCounter;
  90.  
  91. /*---------------------------------------------------------------------------*
  92.   Name:         OS_GetLowEntropyData
  93.  
  94.   Description:  Gets low entropy data that changes according to the system status.
  95.  
  96.   Arguments:    buffer - Pointer to the array that holds the data string.
  97.  
  98.   Returns:      None.
  99.  *---------------------------------------------------------------------------*/
  100. void OS_GetLowEntropyData(u32 buffer[OS_LOW_ENTROPY_DATA_SIZE / sizeof(u32)])
  101. {
  102.     // RTC work area in the System Work Memory
  103.     const OSSystemWork *work = OS_GetSystemWork();
  104.     const u8 *macAddress =
  105.         (u8 *)((u32)(work->nvramUserInfo) + ((sizeof(NVRAMConfig) + 3) & ~0x00000003));
  106.  
  107.     buffer[0] = (u32)((GX_GetVCount() << 16) | OS_GetTickLo());
  108.     buffer[1] = (u32)(*(u16 *)(macAddress + 4) << 16) ^ (u32)(OSi_TickCounter);
  109.     buffer[2] = (u32)(OSi_TickCounter >> 32) ^ *(u32 *)macAddress ^ work->vblankCount;
  110. #ifdef reg_G3X_GXSTAT
  111.     buffer[2] ^= reg_G3X_GXSTAT;
  112. #endif
  113.     buffer[3] = *(u32 *)(&work->real_time_clock[0]);
  114.     buffer[4] = *(u32 *)(&work->real_time_clock[4]);
  115.     buffer[5] = (((u32)work->mic_sampling_data) << 16) ^ work->mic_last_address;
  116.     buffer[6] = (u32)((*(u16 *)(&work->touch_panel[0]) << 16) | *(u16 *)(&work->touch_panel[2]));
  117.     buffer[7] = (u32)((work->wm_rssi_pool << 16) | (reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF));
  118. }
Advertisement