=============================================================================== 0000000040025c50 : { 40025c50: a9b97bfd stp x29, x30, [sp, #-112]! if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0]) 40025c54: 531d7044 lsl w4, w2, #3 mdContext->i[1] += ((UINT4)inLen >> 29); 40025c58: 531d7c45 lsr w5, w2, #29 { 40025c5c: 910003fd mov x29, sp 40025c60: a90153f3 stp x19, x20, [sp, #16] 40025c64: aa0103f3 mov x19, x1 40025c68: a9025bf5 stp x21, x22, [sp, #32] 40025c6c: 8b224036 add x22, x1, w2, uxtw 40025c70: aa0003f5 mov x21, x0 mdContext->i[1]++; 40025c74: 29400403 ldp w3, w1, [x0] 40025c78: 2b040064 adds w4, w3, w4 mdContext->i[1] += ((UINT4)inLen >> 29); 40025c7c: 1a050021 adc w1, w1, w5 40025c80: 29000404 stp w4, w1, [x0] mdi = (int)((mdContext->i[0] >> 3) & 0x3F); 40025c84: d3432063 ubfx x3, x3, #3, #6 while (inLen--) { 40025c88: 340003c2 cbz w2, 40025d00 <== NEVER TAKEN 40025c8c: 91002000 add x0, x0, #0x8 40025c90: 9101c3f4 add x20, sp, #0x70 40025c94: 14000003 b 40025ca0 40025c98: eb16027f cmp x19, x22 40025c9c: 54000320 b.eq 40025d00 // b.none mdContext->in[mdi++] = *inBuf++; 40025ca0: 8b23c2a1 add x1, x21, w3, sxtw 40025ca4: 38401662 ldrb w2, [x19], #1 40025ca8: 11000463 add w3, w3, #0x1 if (mdi == 0x40) { 40025cac: 7101007f cmp w3, #0x40 mdContext->in[mdi++] = *inBuf++; 40025cb0: 39006022 strb w2, [x1, #24] if (mdi == 0x40) { 40025cb4: 54ffff21 b.ne 40025c98 // b.any 40025cb8: 910062a3 add x3, x21, #0x18 40025cbc: 9100c3e6 add x6, sp, #0x30 (((UINT4)mdContext->in[ii+2]) << 16) | 40025cc0: 39400865 ldrb w5, [x3, #2] in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 40025cc4: 39400c62 ldrb w2, [x3, #3] (((UINT4)mdContext->in[ii+1]) << 8) | 40025cc8: 39400464 ldrb w4, [x3, #1] ((UINT4)mdContext->in[ii]); 40025ccc: 38404467 ldrb w7, [x3], #4 (((UINT4)mdContext->in[ii+2]) << 16) | 40025cd0: 53103ca5 lsl w5, w5, #16 (((UINT4)mdContext->in[ii+1]) << 8) | 40025cd4: 2a0260a2 orr w2, w5, w2, lsl #24 40025cd8: 2a0420e4 orr w4, w7, w4, lsl #8 40025cdc: 2a040042 orr w2, w2, w4 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) | 40025ce0: b80044c2 str w2, [x6], #4 for (i = 0, ii = 0; i < 16; i++, ii += 4) 40025ce4: eb06029f cmp x20, x6 40025ce8: 54fffec1 b.ne 40025cc0 // b.any Transform (mdContext->buf, in); 40025cec: 9100c3e1 add x1, sp, #0x30 40025cf0: 97fffd50 bl 40025230 while (inLen--) { 40025cf4: eb16027f cmp x19, x22 mdi = 0; 40025cf8: 52800003 mov w3, #0x0 // #0 while (inLen--) { 40025cfc: 54fffd21 b.ne 40025ca0 // b.any } 40025d00: a94153f3 ldp x19, x20, [sp, #16] 40025d04: a9425bf5 ldp x21, x22, [sp, #32] 40025d08: a8c77bfd ldp x29, x30, [sp], #112 40025d0c: d65f03c0 ret =============================================================================== 0000000040027650 : /* Add bytes into the hash */ void SHA256_Update(SHA256_CTX * ctx, const void *in, size_t len) { 40027650: a9bc7bfd stp x29, x30, [sp, #-64]! 40027654: 910003fd mov x29, sp 40027658: a90153f3 stp x19, x20, [sp, #16] 4002765c: aa0003f4 mov x20, x0 uint64_t bitlen; uint32_t r; const unsigned char *src = in; /* Number of bytes left in the buffer from previous updates */ r = (ctx->count >> 3) & 0x3f; 40027660: f9401000 ldr x0, [x0, #32] { 40027664: a9025bf5 stp x21, x22, [sp, #32] /* Update number of bits */ ctx->count += bitlen; /* Handle the case where we don't need to perform any transforms */ if (len < 64 - r) { 40027668: 52800815 mov w21, #0x40 // #64 r = (ctx->count >> 3) & 0x3f; 4002766c: 53032004 ubfx w4, w0, #3, #6 ctx->count += bitlen; 40027670: 8b020c03 add x3, x0, x2, lsl #3 40027674: f9001283 str x3, [x20, #32] memcpy(&ctx->buf[r], src, len); 40027678: 1100a080 add w0, w4, #0x28 if (len < 64 - r) { 4002767c: 4b0402b5 sub w21, w21, w4 memcpy(&ctx->buf[r], src, len); 40027680: 8b000280 add x0, x20, x0 if (len < 64 - r) { 40027684: eb0202bf cmp x21, x2 40027688: 540003a8 b.hi 400276fc // b.pmore 4002768c: aa0203f6 mov x22, x2 return; } /* Finish the current block */ memcpy(&ctx->buf[r], src, 64 - r); 40027690: aa1503e2 mov x2, x21 SHA256_Transform(ctx->state, ctx->buf); src += 64 - r; 40027694: 8b150033 add x19, x1, x21 40027698: f9001bf7 str x23, [sp, #48] memcpy(&ctx->buf[r], src, 64 - r); 4002769c: 94002ee0 bl 4003321c SHA256_Transform(ctx->state, ctx->buf); 400276a0: 9100a297 add x23, x20, #0x28 len -= 64 - r; 400276a4: cb1502d6 sub x22, x22, x21 SHA256_Transform(ctx->state, ctx->buf); 400276a8: aa1703e1 mov x1, x23 400276ac: aa1403e0 mov x0, x20 400276b0: 97fff9d0 bl 40025df0 /* Perform complete blocks */ while (len >= 64) { 400276b4: f100fedf cmp x22, #0x3f 400276b8: 540002a9 b.ls 4002770c // b.plast 400276bc: d10102d5 sub x21, x22, #0x40 400276c0: 927ae6b5 and x21, x21, #0xffffffffffffffc0 400276c4: 910102b5 add x21, x21, #0x40 400276c8: 8b150275 add x21, x19, x21 400276cc: d503201f nop SHA256_Transform(ctx->state, src); 400276d0: aa1303e1 mov x1, x19 400276d4: aa1403e0 mov x0, x20 src += 64; 400276d8: 91010273 add x19, x19, #0x40 SHA256_Transform(ctx->state, src); 400276dc: 97fff9c5 bl 40025df0 while (len >= 64) { 400276e0: eb15027f cmp x19, x21 400276e4: 54ffff61 b.ne 400276d0 // b.any <== NEVER TAKEN len -= 64; 400276e8: 924016d6 and x22, x22, #0x3f } /* Copy left over data into buffer */ memcpy(ctx->buf, src, len); 400276ec: aa1703e0 mov x0, x23 400276f0: aa1603e2 mov x2, x22 400276f4: f9401bf7 ldr x23, [sp, #48] 400276f8: aa1503e1 mov x1, x21 } 400276fc: a94153f3 ldp x19, x20, [sp, #16] 40027700: a9425bf5 ldp x21, x22, [sp, #32] 40027704: a8c47bfd ldp x29, x30, [sp], #64 memcpy(ctx->buf, src, len); 40027708: 14002ec5 b 4003321c src += 64 - r; 4002770c: aa1303f5 mov x21, x19 40027710: 17fffff7 b 400276ec ... =============================================================================== 0000000040029910 : /* Add bytes into the hash */ void SHA512_Update(SHA512_CTX * ctx, const void *in, size_t len) { 40029910: a9bc7bfd stp x29, x30, [sp, #-64]! /* Number of bytes left in the buffer from previous updates */ r = (ctx->count[1] >> 3) & 0x7f; /* Convert the length into a number of bits */ bitlen[1] = ((uint64_t)len) << 3; 40029914: d37df044 lsl x4, x2, #3 { 40029918: 910003fd mov x29, sp 4002991c: a90153f3 stp x19, x20, [sp, #16] 40029920: aa0003f4 mov x20, x0 r = (ctx->count[1] >> 3) & 0x7f; 40029924: f9402400 ldr x0, [x0, #72] { 40029928: a9025bf5 stp x21, x22, [sp, #32] bitlen[0] = ((uint64_t)len) >> 61; /* Update number of bits */ if ((ctx->count[1] += bitlen[1]) < bitlen[1]) ctx->count[0]++; 4002992c: f9402283 ldr x3, [x20, #64] 40029930: ab040004 adds x4, x0, x4 { 40029934: a90363f7 stp x23, x24, [sp, #48] r = (ctx->count[1] >> 3) & 0x7f; 40029938: d3432416 ubfx x22, x0, #3, #7 ctx->count[0]++; 4002993c: 9a833463 cinc x3, x3, cs // cs = hs, nlast ctx->count[0] += bitlen[0]; 40029940: 8b42f463 add x3, x3, x2, lsr #61 if ((ctx->count[1] += bitlen[1]) < bitlen[1]) 40029944: a9041283 stp x3, x4, [x20, #64] /* Handle the case where we don't need to perform any transforms */ if (len < 128 - r) { memcpy(&ctx->buf[r], src, len); 40029948: 910142c0 add x0, x22, #0x50 if (len < 128 - r) { 4002994c: d2801018 mov x24, #0x80 // #128 40029950: cb160318 sub x24, x24, x22 memcpy(&ctx->buf[r], src, len); 40029954: 8b000280 add x0, x20, x0 if (len < 128 - r) { 40029958: eb02031f cmp x24, x2 4002995c: 540003a8 b.hi 400299d0 // b.pmore 40029960: aa0203f5 mov x21, x2 return; } /* Finish the current block */ memcpy(&ctx->buf[r], src, 128 - r); 40029964: aa1803e2 mov x2, x24 40029968: aa0103f3 mov x19, x1 SHA512_Transform(ctx->state, ctx->buf); 4002996c: 91014297 add x23, x20, #0x50 memcpy(&ctx->buf[r], src, 128 - r); 40029970: 9400262b bl 4003321c SHA512_Transform(ctx->state, ctx->buf); 40029974: d10202b5 sub x21, x21, #0x80 40029978: aa1703e1 mov x1, x23 4002997c: aa1403e0 mov x0, x20 src += 128 - r; len -= 128 - r; 40029980: 8b1602b5 add x21, x21, x22 SHA512_Transform(ctx->state, ctx->buf); 40029984: 97fff79f bl 40027800 src += 128 - r; 40029988: 8b180273 add x19, x19, x24 /* Perform complete blocks */ while (len >= 128) { 4002998c: f101febf cmp x21, #0x7f 40029990: 540002a9 b.ls 400299e4 // b.plast <== ALWAYS TAKEN 40029994: d10202b6 sub x22, x21, #0x80 <== NOT EXECUTED 40029998: 9279e2d6 and x22, x22, #0xffffffffffffff80 <== NOT EXECUTED 4002999c: 910202d6 add x22, x22, #0x80 <== NOT EXECUTED 400299a0: 8b160276 add x22, x19, x22 <== NOT EXECUTED 400299a4: d503201f nop <== NOT EXECUTED SHA512_Transform(ctx->state, src); 400299a8: aa1303e1 mov x1, x19 <== NOT EXECUTED 400299ac: aa1403e0 mov x0, x20 <== NOT EXECUTED src += 128; 400299b0: 91020273 add x19, x19, #0x80 <== NOT EXECUTED SHA512_Transform(ctx->state, src); 400299b4: 97fff793 bl 40027800 <== NOT EXECUTED while (len >= 128) { 400299b8: eb16027f cmp x19, x22 <== NOT EXECUTED 400299bc: 54ffff61 b.ne 400299a8 // b.any <== NOT EXECUTED len -= 128; 400299c0: 92401ab5 and x21, x21, #0x7f <== NOT EXECUTED } /* Copy left over data into buffer */ memcpy(ctx->buf, src, len); 400299c4: aa1503e2 mov x2, x21 400299c8: aa1603e1 mov x1, x22 400299cc: aa1703e0 mov x0, x23 } 400299d0: a94153f3 ldp x19, x20, [sp, #16] 400299d4: a9425bf5 ldp x21, x22, [sp, #32] 400299d8: a94363f7 ldp x23, x24, [sp, #48] 400299dc: a8c47bfd ldp x29, x30, [sp], #64 memcpy(ctx->buf, src, len); 400299e0: 1400260f b 4003321c src += 128 - r; 400299e4: aa1303f6 mov x22, x19 400299e8: 17fffff7 b 400299c4 400299ec: 00000000 udf #0