=============================================================================== 40005850 : in[14] = mdContext->i[0]; 40005850: 0005a783 lw a5,0(a1) in[15] = mdContext->i[1]; 40005854: 0045a703 lw a4,4(a1) { 40005858: fa010113 addi sp,sp,-96 mdi = (int)((mdContext->i[0] >> 3) & 0x3F); 4000585c: 0037d613 srli a2,a5,0x3 { 40005860: 04812c23 sw s0,88(sp) 40005864: 05212823 sw s2,80(sp) in[14] = mdContext->i[0]; 40005868: 02f12c23 sw a5,56(sp) { 4000586c: 04112e23 sw ra,92(sp) 40005870: 04912a23 sw s1,84(sp) 40005874: 05312623 sw s3,76(sp) in[15] = mdContext->i[1]; 40005878: 02e12e23 sw a4,60(sp) mdi = (int)((mdContext->i[0] >> 3) & 0x3F); 4000587c: 03f67613 andi a2,a2,63 padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); 40005880: 03700793 li a5,55 { 40005884: 00058913 mv s2,a1 40005888: 00050413 mv s0,a0 padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); 4000588c: 0cc7c463 blt a5,a2,40005954 40005890: 03800793 li a5,56 40005894: 40c78633 sub a2,a5,a2 MD5Update (mdContext, PADDING, padLen); 40005898: 400245b7 lui a1,0x40024 4000589c: 66c58593 addi a1,a1,1644 # 4002466c 400058a0: 00090513 mv a0,s2 400058a4: ea9ff0ef jal ra,4000574c for (i = 0, ii = 0; i < 14; i++, ii += 4) 400058a8: 01890993 addi s3,s2,24 400058ac: 00098713 mv a4,s3 400058b0: 00010693 mv a3,sp 400058b4: 03810313 addi t1,sp,56 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 400058b8: 00374783 lbu a5,3(a4) (((UINT4)mdContext->in[ii+2]) << 16) | 400058bc: 00274803 lbu a6,2(a4) ((UINT4)mdContext->in[ii]); 400058c0: 00074883 lbu a7,0(a4) (((UINT4)mdContext->in[ii+1]) << 8) | 400058c4: 00174603 lbu a2,1(a4) in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 400058c8: 01879793 slli a5,a5,0x18 (((UINT4)mdContext->in[ii+2]) << 16) | 400058cc: 01081813 slli a6,a6,0x10 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 400058d0: 0107e7b3 or a5,a5,a6 (((UINT4)mdContext->in[ii+1]) << 8) | 400058d4: 0117e7b3 or a5,a5,a7 400058d8: 00861613 slli a2,a2,0x8 400058dc: 00c7e7b3 or a5,a5,a2 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 400058e0: 00f6a023 sw a5,0(a3) for (i = 0, ii = 0; i < 14; i++, ii += 4) 400058e4: 00468693 addi a3,a3,4 400058e8: 00470713 addi a4,a4,4 400058ec: fcd316e3 bne t1,a3,400058b8 Transform (mdContext->buf, in); 400058f0: 00890513 addi a0,s2,8 400058f4: 00010593 mv a1,sp 400058f8: 00050493 mv s1,a0 400058fc: 978ff0ef jal ra,40004a74 for (i = 0, ii = 0; i < 4; i++, ii += 4) { 40005900: 00048513 mv a0,s1 mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF); 40005904: 00052783 lw a5,0(a0) for (i = 0, ii = 0; i < 4; i++, ii += 4) { 40005908: 00450513 addi a0,a0,4 (unsigned char)((mdContext->buf[i] >> 8) & 0xFF); 4000590c: 0087d613 srli a2,a5,0x8 (unsigned char)((mdContext->buf[i] >> 16) & 0xFF); 40005910: 0107d693 srli a3,a5,0x10 (unsigned char)((mdContext->buf[i] >> 24) & 0xFF); 40005914: 0187d713 srli a4,a5,0x18 (unsigned char)((mdContext->buf[i] >> 8) & 0xFF); 40005918: 04c506a3 sb a2,77(a0) (unsigned char)((mdContext->buf[i] >> 16) & 0xFF); 4000591c: 04d50723 sb a3,78(a0) (unsigned char)((mdContext->buf[i] >> 24) & 0xFF); 40005920: 04e507a3 sb a4,79(a0) mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF); 40005924: 04f50623 sb a5,76(a0) for (i = 0, ii = 0; i < 4; i++, ii += 4) { 40005928: fca99ee3 bne s3,a0,40005904 memcpy(hash, mdContext->digest, 16); 4000592c: 00040513 mv a0,s0 } 40005930: 05812403 lw s0,88(sp) 40005934: 05c12083 lw ra,92(sp) 40005938: 05412483 lw s1,84(sp) 4000593c: 04c12983 lw s3,76(sp) memcpy(hash, mdContext->digest, 16); 40005940: 05890593 addi a1,s2,88 } 40005944: 05012903 lw s2,80(sp) memcpy(hash, mdContext->digest, 16); 40005948: 01000613 li a2,16 } 4000594c: 06010113 addi sp,sp,96 memcpy(hash, mdContext->digest, 16); 40005950: 7d41506f j 4001b124 padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); 40005954: 07800793 li a5,120 <== NOT EXECUTED 40005958: 40c78633 sub a2,a5,a2 <== NOT EXECUTED 4000595c: f3dff06f j 40005898 <== NOT EXECUTED =============================================================================== 4000574c : mdi = (int)((mdContext->i[0] >> 3) & 0x3F); 4000574c: 00052783 lw a5,0(a0) { 40005750: fa010113 addi sp,sp,-96 40005754: 05212823 sw s2,80(sp) if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0]) 40005758: 00361713 slli a4,a2,0x3 { 4000575c: 00050913 mv s2,a0 mdContext->i[1]++; 40005760: 00452503 lw a0,4(a0) if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0]) 40005764: 00f70733 add a4,a4,a5 mdContext->i[1]++; 40005768: 00f736b3 sltu a3,a4,a5 4000576c: 00d50533 add a0,a0,a3 mdContext->i[1] += ((UINT4)inLen >> 29); 40005770: 01d65693 srli a3,a2,0x1d { 40005774: 05312623 sw s3,76(sp) 40005778: 04112e23 sw ra,92(sp) 4000577c: 04812c23 sw s0,88(sp) 40005780: 04912a23 sw s1,84(sp) 40005784: 05412423 sw s4,72(sp) 40005788: 05512223 sw s5,68(sp) mdContext->i[1] += ((UINT4)inLen >> 29); 4000578c: 00a686b3 add a3,a3,a0 mdContext->i[0] += ((UINT4)inLen << 3); 40005790: 00e92023 sw a4,0(s2) mdContext->i[1] += ((UINT4)inLen >> 29); 40005794: 00d92223 sw a3,4(s2) while (inLen--) { 40005798: 00c589b3 add s3,a1,a2 4000579c: 02060c63 beqz a2,400057d4 <== NEVER TAKEN 400057a0: 0037d793 srli a5,a5,0x3 400057a4: 00058413 mv s0,a1 400057a8: 03f7f793 andi a5,a5,63 if (mdi == 0x40) { 400057ac: 04000a13 li s4,64 400057b0: 04010493 addi s1,sp,64 Transform (mdContext->buf, in); 400057b4: 00890a93 addi s5,s2,8 mdContext->in[mdi++] = *inBuf++; 400057b8: 00044683 lbu a3,0(s0) 400057bc: 00f90733 add a4,s2,a5 400057c0: 00178793 addi a5,a5,1 400057c4: 00d70c23 sb a3,24(a4) 400057c8: 00140413 addi s0,s0,1 if (mdi == 0x40) { 400057cc: 03478663 beq a5,s4,400057f8 while (inLen--) { 400057d0: ff3414e3 bne s0,s3,400057b8 } 400057d4: 05c12083 lw ra,92(sp) 400057d8: 05812403 lw s0,88(sp) 400057dc: 05412483 lw s1,84(sp) 400057e0: 05012903 lw s2,80(sp) 400057e4: 04c12983 lw s3,76(sp) 400057e8: 04812a03 lw s4,72(sp) 400057ec: 04412a83 lw s5,68(sp) 400057f0: 06010113 addi sp,sp,96 400057f4: 00008067 ret 400057f8: 01890713 addi a4,s2,24 400057fc: 00010693 mv a3,sp in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 40005800: 00374783 lbu a5,3(a4) (((UINT4)mdContext->in[ii+2]) << 16) | 40005804: 00274803 lbu a6,2(a4) ((UINT4)mdContext->in[ii]); 40005808: 00074883 lbu a7,0(a4) (((UINT4)mdContext->in[ii+1]) << 8) | 4000580c: 00174603 lbu a2,1(a4) in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 40005810: 01879793 slli a5,a5,0x18 (((UINT4)mdContext->in[ii+2]) << 16) | 40005814: 01081813 slli a6,a6,0x10 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 40005818: 0107e7b3 or a5,a5,a6 (((UINT4)mdContext->in[ii+1]) << 8) | 4000581c: 0117e7b3 or a5,a5,a7 40005820: 00861613 slli a2,a2,0x8 40005824: 00c7e7b3 or a5,a5,a2 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 40005828: 00f6a023 sw a5,0(a3) for (i = 0, ii = 0; i < 16; i++, ii += 4) 4000582c: 00468693 addi a3,a3,4 40005830: 00470713 addi a4,a4,4 40005834: fcd496e3 bne s1,a3,40005800 Transform (mdContext->buf, in); 40005838: 00010593 mv a1,sp 4000583c: 000a8513 mv a0,s5 40005840: a34ff0ef jal ra,40004a74 mdi = 0; 40005844: 00000793 li a5,0 while (inLen--) { 40005848: f73418e3 bne s0,s3,400057b8 4000584c: f89ff06f j 400057d4 =============================================================================== 400112c8 : uint64_t bitlen[2]; uint64_t r; const unsigned char *src = in; /* Number of bytes left in the buffer from previous updates */ r = (ctx->count[1] >> 3) & 0x7f; 400112c8: 04852783 lw a5,72(a0) 400112cc: 04c52683 lw a3,76(a0) { 400112d0: fe010113 addi sp,sp,-32 /* Convert the length into a number of bits */ bitlen[1] = ((uint64_t)len) << 3; 400112d4: 00361813 slli a6,a2,0x3 { 400112d8: 00912a23 sw s1,20(sp) 400112dc: 01312623 sw s3,12(sp) 400112e0: 00050493 mv s1,a0 400112e4: 00060993 mv s3,a2 bitlen[0] = ((uint64_t)len) >> 61; /* Update number of bits */ if ((ctx->count[1] += bitlen[1]) < bitlen[1]) 400112e8: 01078533 add a0,a5,a6 bitlen[1] = ((uint64_t)len) << 3; 400112ec: 01d65613 srli a2,a2,0x1d if ((ctx->count[1] += bitlen[1]) < bitlen[1]) 400112f0: 00f53733 sltu a4,a0,a5 400112f4: 00c686b3 add a3,a3,a2 { 400112f8: 00812c23 sw s0,24(sp) 400112fc: 01212823 sw s2,16(sp) 40011300: 00112e23 sw ra,28(sp) 40011304: 01412423 sw s4,8(sp) 40011308: 01512223 sw s5,4(sp) if ((ctx->count[1] += bitlen[1]) < bitlen[1]) 4001130c: 00d70733 add a4,a4,a3 r = (ctx->count[1] >> 3) & 0x7f; 40011310: 0037d913 srli s2,a5,0x3 if ((ctx->count[1] += bitlen[1]) < bitlen[1]) 40011314: 04a4a423 sw a0,72(s1) 40011318: 04e4a623 sw a4,76(s1) { 4001131c: 00058413 mv s0,a1 r = (ctx->count[1] >> 3) & 0x7f; 40011320: 07f97913 andi s2,s2,127 if ((ctx->count[1] += bitlen[1]) < bitlen[1]) 40011324: 0ac76663 bltu a4,a2,400113d0 40011328: 0ae60263 beq a2,a4,400113cc ctx->count[0]++; ctx->count[0] += bitlen[0]; /* Handle the case where we don't need to perform any transforms */ if (len < 128 - r) { 4001132c: 08000793 li a5,128 memcpy(&ctx->buf[r], src, len); 40011330: 05090513 addi a0,s2,80 if (len < 128 - r) { 40011334: 41278ab3 sub s5,a5,s2 memcpy(&ctx->buf[r], src, len); 40011338: 00a48533 add a0,s1,a0 if (len < 128 - r) { 4001133c: 0d57e263 bltu a5,s5,40011400 40011340: 0d59e063 bltu s3,s5,40011400 return; } /* Finish the current block */ memcpy(&ctx->buf[r], src, 128 - r); 40011344: 00040593 mv a1,s0 40011348: 000a8613 mv a2,s5 4001134c: 5d9090ef jal ra,4001b124 SHA512_Transform(ctx->state, ctx->buf); 40011350: 05048a13 addi s4,s1,80 40011354: 000a0593 mv a1,s4 40011358: 00048513 mv a0,s1 4001135c: 938f70ef jal ra,40008494 src += 128 - r; 40011360: f8098993 addi s3,s3,-128 len -= 128 - r; 40011364: 01390933 add s2,s2,s3 /* Perform complete blocks */ while (len >= 128) { 40011368: 07f00793 li a5,127 src += 128 - r; 4001136c: 01540433 add s0,s0,s5 while (len >= 128) { 40011370: 0927fe63 bgeu a5,s2,4001140c 40011374: f8090993 addi s3,s2,-128 <== NOT EXECUTED 40011378: f809f993 andi s3,s3,-128 <== NOT EXECUTED 4001137c: 08098993 addi s3,s3,128 <== NOT EXECUTED 40011380: 013409b3 add s3,s0,s3 <== NOT EXECUTED SHA512_Transform(ctx->state, src); 40011384: 00040593 mv a1,s0 <== NOT EXECUTED 40011388: 00048513 mv a0,s1 <== NOT EXECUTED src += 128; 4001138c: 08040413 addi s0,s0,128 <== NOT EXECUTED SHA512_Transform(ctx->state, src); 40011390: 904f70ef jal ra,40008494 <== NOT EXECUTED while (len >= 128) { 40011394: ff3418e3 bne s0,s3,40011384 <== NOT EXECUTED len -= 128; 40011398: 07f97913 andi s2,s2,127 <== NOT EXECUTED } /* Copy left over data into buffer */ memcpy(ctx->buf, src, len); 4001139c: 00090613 mv a2,s2 400113a0: 00098593 mv a1,s3 400113a4: 000a0513 mv a0,s4 } 400113a8: 01812403 lw s0,24(sp) 400113ac: 01c12083 lw ra,28(sp) 400113b0: 01412483 lw s1,20(sp) 400113b4: 01012903 lw s2,16(sp) 400113b8: 00c12983 lw s3,12(sp) 400113bc: 00812a03 lw s4,8(sp) 400113c0: 00412a83 lw s5,4(sp) 400113c4: 02010113 addi sp,sp,32 memcpy(ctx->buf, src, len); 400113c8: 55d0906f j 4001b124 if ((ctx->count[1] += bitlen[1]) < bitlen[1]) 400113cc: f70570e3 bgeu a0,a6,4001132c ctx->count[0]++; 400113d0: 0404a783 lw a5,64(s1) <== NOT EXECUTED 400113d4: 0444a683 lw a3,68(s1) <== NOT EXECUTED memcpy(&ctx->buf[r], src, len); 400113d8: 05090513 addi a0,s2,80 <== NOT EXECUTED ctx->count[0]++; 400113dc: 00178713 addi a4,a5,1 <== NOT EXECUTED 400113e0: 00f737b3 sltu a5,a4,a5 <== NOT EXECUTED 400113e4: 00d787b3 add a5,a5,a3 <== NOT EXECUTED 400113e8: 04f4a223 sw a5,68(s1) <== NOT EXECUTED if (len < 128 - r) { 400113ec: 08000793 li a5,128 <== NOT EXECUTED ctx->count[0]++; 400113f0: 04e4a023 sw a4,64(s1) <== NOT EXECUTED if (len < 128 - r) { 400113f4: 41278ab3 sub s5,a5,s2 <== NOT EXECUTED memcpy(&ctx->buf[r], src, len); 400113f8: 00a48533 add a0,s1,a0 <== NOT EXECUTED if (len < 128 - r) { 400113fc: f557f2e3 bgeu a5,s5,40011340 <== NOT EXECUTED memcpy(&ctx->buf[r], src, len); 40011400: 00098613 mv a2,s3 40011404: 00040593 mv a1,s0 40011408: fa1ff06f j 400113a8 src += 128 - r; 4001140c: 00040993 mv s3,s0 40011410: f8dff06f j 4001139c