; generated by ARM C/C++ Compiler, 4.1 [Build 894]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\STM324xG_EVAL\stm32f4xx_cryp_des.o --asm_dir=.\STM324xG_EVAL\ --list_dir=.\STM324xG_EVAL\ --depend=.\STM324xG_EVAL\stm32f4xx_cryp_des.d --cpu=Cortex-M4.fp --apcs=interwork -O0 -Otime -I..\ -I..\..\..\Libraries\CMSIS\Device\ST\STM32F4xx\Include -I..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc -I..\..\..\Utilities\STM32_EVAL\Common -I..\..\..\Utilities\STM32_EVAL\STM3240_41_G_EVAL -IC:\Keil\ARM\RV31\Inc -IC:\Keil\ARM\CMSIS\Include -IC:\Keil\ARM\Inc\ST\STM32F4xx -D__MICROLIB -DUSE_STM324xG_EVAL -DSTM32F4XX -DUSE_STDPERIPH_DRIVER --omf_browse=.\STM324xG_EVAL\stm32f4xx_cryp_des.crf ..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_des.c]
                          THUMB

                          AREA ||i.CRYP_DES_CBC||, CODE, READONLY, ALIGN=1

                  CRYP_DES_CBC PROC
;;;188      */
;;;189    ErrorStatus CRYP_DES_CBC(uint8_t Mode, uint8_t Key[8], uint8_t InitVectors[8],
000000  e92d4ff0          PUSH     {r4-r11,lr}
;;;190                             uint8_t *Input, uint32_t Ilength, uint8_t *Output)
;;;191    {
000004  ed2d8b02          VPUSH    {d8}
000008  b093              SUB      sp,sp,#0x4c
00000a  4680              MOV      r8,r0
00000c  4689              MOV      r9,r1
00000e  4692              MOV      r10,r2
000010  469b              MOV      r11,r3
000012  ed9d8a1f          VLDR     s16,[sp,#0x7c]
;;;192      CRYP_InitTypeDef DES_CRYP_InitStructure;
;;;193      CRYP_KeyInitTypeDef DES_CRYP_KeyInitStructure;
;;;194      CRYP_IVInitTypeDef DES_CRYP_IVInitStructure;
;;;195      __IO uint32_t counter = 0;
000016  2000              MOVS     r0,#0
000018  9004              STR      r0,[sp,#0x10]
;;;196      uint32_t busystatus = 0;
00001a  9003              STR      r0,[sp,#0xc]
;;;197      ErrorStatus status = SUCCESS;
00001c  2001              MOVS     r0,#1
00001e  9002              STR      r0,[sp,#8]
;;;198      uint32_t keyaddr    = (uint32_t)Key;
000020  464e              MOV      r6,r9
;;;199      uint32_t inputaddr  = (uint32_t)Input;
000022  465c              MOV      r4,r11
;;;200      uint32_t outputaddr = (uint32_t)Output;
000024  ee185a10          VMOV     r5,s16
;;;201      uint32_t ivaddr     = (uint32_t)InitVectors;
000028  4657              MOV      r7,r10
;;;202      uint32_t i = 0;
00002a  2000              MOVS     r0,#0
00002c  9001              STR      r0,[sp,#4]
;;;203    
;;;204      /* Crypto structures initialisation*/
;;;205      CRYP_KeyStructInit(&DES_CRYP_KeyInitStructure);
00002e  a809              ADD      r0,sp,#0x24
000030  f7fffffe          BL       CRYP_KeyStructInit
;;;206    
;;;207      /* Crypto Init for Encryption process */
;;;208      if(Mode == MODE_ENCRYPT) /* DES encryption */
000034  f1b80f01          CMP      r8,#1
000038  d103              BNE      |L1.66|
;;;209      {
;;;210         DES_CRYP_InitStructure.CRYP_AlgoDir  = CRYP_AlgoDir_Encrypt;
00003a  2000              MOVS     r0,#0
00003c  f8ad0044          STRH     r0,[sp,#0x44]
000040  e002              B        |L1.72|
                  |L1.66|
;;;211      }
;;;212      else /*if(Mode == MODE_DECRYPT)*/ /* DES decryption */
;;;213      {
;;;214         DES_CRYP_InitStructure.CRYP_AlgoDir  = CRYP_AlgoDir_Decrypt;
000042  2004              MOVS     r0,#4
000044  f8ad0044          STRH     r0,[sp,#0x44]
                  |L1.72|
;;;215      }
;;;216    
;;;217      DES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_DES_CBC;
000048  2018              MOVS     r0,#0x18
00004a  f8ad0046          STRH     r0,[sp,#0x46]
;;;218      DES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b;
00004e  2080              MOVS     r0,#0x80
000050  f8ad0048          STRH     r0,[sp,#0x48]
;;;219      CRYP_Init(&DES_CRYP_InitStructure);
000054  a811              ADD      r0,sp,#0x44
000056  f7fffffe          BL       CRYP_Init
;;;220    
;;;221      /* Key Initialisation */
;;;222      DES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr));
00005a  6830              LDR      r0,[r6,#0]
00005c  ba00              REV      r0,r0
00005e  900b              STR      r0,[sp,#0x2c]
;;;223      keyaddr+=4;
000060  1d36              ADDS     r6,r6,#4
;;;224      DES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr));
000062  6830              LDR      r0,[r6,#0]
000064  ba00              REV      r0,r0
000066  900c              STR      r0,[sp,#0x30]
;;;225      CRYP_KeyInit(& DES_CRYP_KeyInitStructure);
000068  a809              ADD      r0,sp,#0x24
00006a  f7fffffe          BL       CRYP_KeyInit
;;;226    
;;;227      /* Initialization Vectors */
;;;228      DES_CRYP_IVInitStructure.CRYP_IV0Left = __REV(*(uint32_t*)(ivaddr));
00006e  6838              LDR      r0,[r7,#0]
000070  ba00              REV      r0,r0
000072  9005              STR      r0,[sp,#0x14]
;;;229      ivaddr+=4;
000074  1d3f              ADDS     r7,r7,#4
;;;230      DES_CRYP_IVInitStructure.CRYP_IV0Right= __REV(*(uint32_t*)(ivaddr));
000076  6838              LDR      r0,[r7,#0]
000078  ba00              REV      r0,r0
00007a  9006              STR      r0,[sp,#0x18]
;;;231      CRYP_IVInit(&DES_CRYP_IVInitStructure);
00007c  a805              ADD      r0,sp,#0x14
00007e  f7fffffe          BL       CRYP_IVInit
;;;232    
;;;233      /* Flush IN/OUT FIFO */
;;;234      CRYP_FIFOFlush();
000082  f7fffffe          BL       CRYP_FIFOFlush
;;;235      
;;;236      /* Enable Crypto processor */
;;;237      CRYP_Cmd(ENABLE);
000086  2001              MOVS     r0,#1
000088  f7fffffe          BL       CRYP_Cmd
;;;238    
;;;239      for(i=0; ((i<Ilength) && (status != ERROR)); i+=8)
00008c  2000              MOVS     r0,#0
00008e  9001              STR      r0,[sp,#4]
000090  e028              B        |L1.228|
                  |L1.146|
;;;240      {
;;;241        /* Write the Input block in the Input FIFO */
;;;242        CRYP_DataIn(*(uint32_t*)(inputaddr));
000092  6820              LDR      r0,[r4,#0]
000094  f7fffffe          BL       CRYP_DataIn
;;;243        inputaddr+=4;
000098  1d24              ADDS     r4,r4,#4
;;;244        CRYP_DataIn(*(uint32_t*)(inputaddr));
00009a  6820              LDR      r0,[r4,#0]
00009c  f7fffffe          BL       CRYP_DataIn
;;;245        inputaddr+=4;
0000a0  1d24              ADDS     r4,r4,#4
;;;246    
;;;247        /* Wait until the complete message has been processed */
;;;248        counter = 0;
0000a2  2000              MOVS     r0,#0
0000a4  9004              STR      r0,[sp,#0x10]
;;;249        do
0000a6  bf00              NOP      
                  |L1.168|
;;;250        {
;;;251          busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY);
0000a8  2010              MOVS     r0,#0x10
0000aa  f7fffffe          BL       CRYP_GetFlagStatus
0000ae  9003              STR      r0,[sp,#0xc]
;;;252          counter++;
0000b0  9804              LDR      r0,[sp,#0x10]
0000b2  1c40              ADDS     r0,r0,#1
0000b4  9004              STR      r0,[sp,#0x10]
;;;253        }while ((counter != DESBUSY_TIMEOUT) && (busystatus != RESET));
0000b6  9804              LDR      r0,[sp,#0x10]
0000b8  f5b03f80          CMP      r0,#0x10000
0000bc  d002              BEQ      |L1.196|
0000be  9803              LDR      r0,[sp,#0xc]
0000c0  2800              CMP      r0,#0
0000c2  d1f1              BNE      |L1.168|
                  |L1.196|
;;;254    
;;;255        if (busystatus != RESET)
0000c4  9803              LDR      r0,[sp,#0xc]
0000c6  b110              CBZ      r0,|L1.206|
;;;256       {
;;;257           status = ERROR;
0000c8  2000              MOVS     r0,#0
0000ca  9002              STR      r0,[sp,#8]
0000cc  e007              B        |L1.222|
                  |L1.206|
;;;258        }
;;;259        else
;;;260        {
;;;261          /* Read the Output block from the Output FIFO */
;;;262          *(uint32_t*)(outputaddr) = CRYP_DataOut();
0000ce  f7fffffe          BL       CRYP_DataOut
0000d2  6028              STR      r0,[r5,#0]
;;;263          outputaddr+=4;
0000d4  1d2d              ADDS     r5,r5,#4
;;;264          *(uint32_t*)(outputaddr) = CRYP_DataOut();
0000d6  f7fffffe          BL       CRYP_DataOut
0000da  6028              STR      r0,[r5,#0]
;;;265          outputaddr+=4;
0000dc  1d2d              ADDS     r5,r5,#4
                  |L1.222|
0000de  9801              LDR      r0,[sp,#4]            ;239
0000e0  3008              ADDS     r0,r0,#8              ;239
0000e2  9001              STR      r0,[sp,#4]            ;239
                  |L1.228|
0000e4  991e              LDR      r1,[sp,#0x78]         ;239
0000e6  9801              LDR      r0,[sp,#4]            ;239
0000e8  4288              CMP      r0,r1                 ;239
0000ea  d202              BCS      |L1.242|
0000ec  9802              LDR      r0,[sp,#8]            ;239
0000ee  2800              CMP      r0,#0                 ;239
0000f0  d1cf              BNE      |L1.146|
                  |L1.242|
;;;266        }
;;;267      }
;;;268    
;;;269      /* Disable Crypto */
;;;270      CRYP_Cmd(DISABLE);
0000f2  2000              MOVS     r0,#0
0000f4  f7fffffe          BL       CRYP_Cmd
;;;271    
;;;272      return status; 
0000f8  9802              LDR      r0,[sp,#8]
;;;273    }
0000fa  b013              ADD      sp,sp,#0x4c
0000fc  ecbd8b02          VPOP     {d8}
000100  e8bd8ff0          POP      {r4-r11,pc}
;;;274    
                          ENDP


                          AREA ||i.CRYP_DES_ECB||, CODE, READONLY, ALIGN=1

                  CRYP_DES_ECB PROC
;;;93       */
;;;94     ErrorStatus CRYP_DES_ECB(uint8_t Mode, uint8_t Key[8], uint8_t *Input, 
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;95                              uint32_t Ilength, uint8_t *Output)
;;;96     {
000004  ed2d8b02          VPUSH    {d8}
000008  b08b              SUB      sp,sp,#0x2c
00000a  4680              MOV      r8,r0
00000c  468b              MOV      r11,r1
00000e  ed9d8a1a          VLDR     s16,[sp,#0x68]
;;;97       CRYP_InitTypeDef DES_CRYP_InitStructure;
;;;98       CRYP_KeyInitTypeDef DES_CRYP_KeyInitStructure;
;;;99       __IO uint32_t counter = 0;
000012  2700              MOVS     r7,#0
;;;100      uint32_t busystatus = 0;
000014  46b9              MOV      r9,r7
;;;101      ErrorStatus status = SUCCESS;
000016  2001              MOVS     r0,#1
000018  9000              STR      r0,[sp,#0]
;;;102      uint32_t keyaddr    = (uint32_t)Key;
00001a  465e              MOV      r6,r11
;;;103      uint32_t inputaddr  = (uint32_t)Input;
00001c  ed9d0a0f          VLDR     s0,[sp,#0x3c]
000020  ee104a10          VMOV     r4,s0
;;;104      uint32_t outputaddr = (uint32_t)Output;
000024  ee185a10          VMOV     r5,s16
;;;105      uint32_t i = 0;
000028  f04f0a00          MOV      r10,#0
;;;106    
;;;107      /* Crypto structures initialisation*/
;;;108      CRYP_KeyStructInit(&DES_CRYP_KeyInitStructure);
00002c  a801              ADD      r0,sp,#4
00002e  f7fffffe          BL       CRYP_KeyStructInit
;;;109    
;;;110      /* Crypto Init for Encryption process */
;;;111      if( Mode == MODE_ENCRYPT ) /* DES encryption */
000032  f1b80f01          CMP      r8,#1
000036  d103              BNE      |L2.64|
;;;112      {
;;;113         DES_CRYP_InitStructure.CRYP_AlgoDir  = CRYP_AlgoDir_Encrypt;
000038  2000              MOVS     r0,#0
00003a  f8ad0024          STRH     r0,[sp,#0x24]
00003e  e002              B        |L2.70|
                  |L2.64|
;;;114      }
;;;115      else/* if( Mode == MODE_DECRYPT )*/ /* DES decryption */
;;;116      {      
;;;117         DES_CRYP_InitStructure.CRYP_AlgoDir  = CRYP_AlgoDir_Decrypt;
000040  2004              MOVS     r0,#4
000042  f8ad0024          STRH     r0,[sp,#0x24]
                  |L2.70|
;;;118      }
;;;119    
;;;120      DES_CRYP_InitStructure.CRYP_AlgoMode = CRYP_AlgoMode_DES_ECB;
000046  2010              MOVS     r0,#0x10
000048  f8ad0026          STRH     r0,[sp,#0x26]
;;;121      DES_CRYP_InitStructure.CRYP_DataType = CRYP_DataType_8b;
00004c  2080              MOVS     r0,#0x80
00004e  f8ad0028          STRH     r0,[sp,#0x28]
;;;122      CRYP_Init(&DES_CRYP_InitStructure);
000052  a809              ADD      r0,sp,#0x24
000054  f7fffffe          BL       CRYP_Init
;;;123    
;;;124      /* Key Initialisation */
;;;125      DES_CRYP_KeyInitStructure.CRYP_Key1Left = __REV(*(uint32_t*)(keyaddr));
000058  6830              LDR      r0,[r6,#0]
00005a  ba00              REV      r0,r0
00005c  9003              STR      r0,[sp,#0xc]
;;;126      keyaddr+=4;
00005e  1d36              ADDS     r6,r6,#4
;;;127      DES_CRYP_KeyInitStructure.CRYP_Key1Right= __REV(*(uint32_t*)(keyaddr));
000060  6830              LDR      r0,[r6,#0]
000062  ba00              REV      r0,r0
000064  9004              STR      r0,[sp,#0x10]
;;;128      CRYP_KeyInit(& DES_CRYP_KeyInitStructure);
000066  a801              ADD      r0,sp,#4
000068  f7fffffe          BL       CRYP_KeyInit
;;;129    
;;;130      /* Flush IN/OUT FIFO */
;;;131      CRYP_FIFOFlush();
00006c  f7fffffe          BL       CRYP_FIFOFlush
;;;132    
;;;133      /* Enable Crypto processor */
;;;134      CRYP_Cmd(ENABLE);
000070  2001              MOVS     r0,#1
000072  f7fffffe          BL       CRYP_Cmd
;;;135    
;;;136      for(i=0; ((i<Ilength) && (status != ERROR)); i+=8)
000076  f04f0a00          MOV      r10,#0
00007a  e024              B        |L2.198|
                  |L2.124|
;;;137      {
;;;138    
;;;139        /* Write the Input block in the Input FIFO */
;;;140        CRYP_DataIn(*(uint32_t*)(inputaddr));
00007c  6820              LDR      r0,[r4,#0]
00007e  f7fffffe          BL       CRYP_DataIn
;;;141        inputaddr+=4;
000082  1d24              ADDS     r4,r4,#4
;;;142        CRYP_DataIn(*(uint32_t*)(inputaddr));
000084  6820              LDR      r0,[r4,#0]
000086  f7fffffe          BL       CRYP_DataIn
;;;143        inputaddr+=4;
00008a  1d24              ADDS     r4,r4,#4
;;;144    
;;;145    /* Wait until the complete message has been processed */
;;;146        counter = 0;
00008c  2700              MOVS     r7,#0
;;;147        do
00008e  bf00              NOP      
                  |L2.144|
;;;148        {
;;;149          busystatus = CRYP_GetFlagStatus(CRYP_FLAG_BUSY);
000090  2010              MOVS     r0,#0x10
000092  f7fffffe          BL       CRYP_GetFlagStatus
000096  4681              MOV      r9,r0
;;;150          counter++;
000098  1c7f              ADDS     r7,r7,#1
;;;151        }while ((counter != DESBUSY_TIMEOUT) && (busystatus != RESET));
00009a  f5b73f80          CMP      r7,#0x10000
00009e  d002              BEQ      |L2.166|
0000a0  f1b90f00          CMP      r9,#0
0000a4  d1f4              BNE      |L2.144|
                  |L2.166|
;;;152    
;;;153        if (busystatus != RESET)
0000a6  f1b90f00          CMP      r9,#0
0000aa  d002              BEQ      |L2.178|
;;;154       {
;;;155           status = ERROR;
0000ac  2000              MOVS     r0,#0
0000ae  9000              STR      r0,[sp,#0]
0000b0  e007              B        |L2.194|
                  |L2.178|
;;;156        }
;;;157        else
;;;158        {
;;;159    
;;;160          /* Read the Output block from the Output FIFO */
;;;161          *(uint32_t*)(outputaddr) = CRYP_DataOut();
0000b2  f7fffffe          BL       CRYP_DataOut
0000b6  6028              STR      r0,[r5,#0]
;;;162          outputaddr+=4;
0000b8  1d2d              ADDS     r5,r5,#4
;;;163          *(uint32_t*)(outputaddr) = CRYP_DataOut();
0000ba  f7fffffe          BL       CRYP_DataOut
0000be  6028              STR      r0,[r5,#0]
;;;164          outputaddr+=4;
0000c0  1d2d              ADDS     r5,r5,#4
                  |L2.194|
0000c2  f10a0a08          ADD      r10,r10,#8            ;136
                  |L2.198|
0000c6  9810              LDR      r0,[sp,#0x40]         ;136
0000c8  4582              CMP      r10,r0                ;136
0000ca  d202              BCS      |L2.210|
0000cc  9800              LDR      r0,[sp,#0]            ;136
0000ce  2800              CMP      r0,#0                 ;136
0000d0  d1d4              BNE      |L2.124|
                  |L2.210|
;;;165        }
;;;166      }
;;;167    
;;;168      /* Disable Crypto */
;;;169      CRYP_Cmd(DISABLE);
0000d2  2000              MOVS     r0,#0
0000d4  f7fffffe          BL       CRYP_Cmd
;;;170    
;;;171      return status; 
0000d8  9800              LDR      r0,[sp,#0]
;;;172    }
0000da  b00b              ADD      sp,sp,#0x2c
0000dc  ecbd8b02          VPOP     {d8}
0000e0  b004              ADD      sp,sp,#0x10
0000e2  e8bd8ff0          POP      {r4-r11,pc}
;;;173    
                          ENDP


;*** Start embedded assembler ***

#line 1 "..\\..\\..\\Libraries\\STM32F4xx_StdPeriph_Driver\\src\\stm32f4xx_cryp_des.c"
	AREA ||.rev16_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___20_stm32f4xx_cryp_des_c_9174d91f____REV16|
#line 114 "C:\\Keil\\ARM\\CMSIS\\Include\\core_cmInstr.h"
|__asm___20_stm32f4xx_cryp_des_c_9174d91f____REV16| PROC
#line 115

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___20_stm32f4xx_cryp_des_c_9174d91f____REVSH|
#line 128
|__asm___20_stm32f4xx_cryp_des_c_9174d91f____REVSH| PROC
#line 129

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
