RTEMS-6
Annotated Report
libmd
Mon Mar 1 00:00:45 2021
001090dc <SHA256_Update>:
/* Add bytes into the hash */
void
SHA256_Update(SHA256_CTX * ctx, const void *in, size_t len)
{
1090dc: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
1090e0: 4605 mov r5, r0
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;
1090e2: e9d0 7008 ldrd r7, r0, [r0, #32]
/* Convert the length into a number of bits */
bitlen = len << 3;
1090e6: 00d3 lsls r3, r2, #3
/* Update number of bits */
ctx->count += bitlen;
1090e8: 19db adds r3, r3, r7
r = (ctx->count >> 3) & 0x3f;
1090ea: f3c7 07c5 ubfx r7, r7, #3, #6
ctx->count += bitlen;
1090ee: 622b str r3, [r5, #32]
/* Handle the case where we don't need to perform any transforms */
if (len < 64 - r) {
1090f0: f1c7 0340 rsb r3, r7, #64 ; 0x40
ctx->count += bitlen;
1090f4: f140 0000 adc.w r0, r0, #0
if (len < 64 - r) {
1090f8: 4293 cmp r3, r2
ctx->count += bitlen;
1090fa: 6268 str r0, [r5, #36] ; 0x24
memcpy(&ctx->buf[r], src, len);
1090fc: f107 0028 add.w r0, r7, #40 ; 0x28
109100: 4428 add r0, r5
if (len < 64 - r) {
109102: d821 bhi.n 109148 <SHA256_Update+0x6c>
109104: 4616 mov r6, r2
109106: 460c mov r4, r1
return;
}
/* Finish the current block */
memcpy(&ctx->buf[r], src, 64 - r);
109108: 461a mov r2, r3
SHA256_Transform(ctx->state, ctx->buf);
10910a: f105 0828 add.w r8, r5, #40 ; 0x28
10910e: 3e40 subs r6, #64 ; 0x40
src += 64 - r;
109110: 441c add r4, r3
len -= 64 - r;
109112: 4437 add r7, r6
memcpy(&ctx->buf[r], src, 64 - r);
109114: f00b ea94 blx 114640 <memcpy>
SHA256_Transform(ctx->state, ctx->buf);
109118: 4641 mov r1, r8
10911a: 4628 mov r0, r5
10911c: f7fe fe1e bl 107d5c <SHA256_Transform>
/* Perform complete blocks */
while (len >= 64) {
109120: 2f3f cmp r7, #63 ; 0x3f
109122: d915 bls.n 109150 <SHA256_Update+0x74>
109124: f1a7 0640 sub.w r6, r7, #64 ; 0x40
109128: f026 063f bic.w r6, r6, #63 ; 0x3f
10912c: 3640 adds r6, #64 ; 0x40
10912e: 4426 add r6, r4
SHA256_Transform(ctx->state, src);
109130: 4621 mov r1, r4
109132: 4628 mov r0, r5
src += 64;
109134: 3440 adds r4, #64 ; 0x40
SHA256_Transform(ctx->state, src);
109136: f7fe fe11 bl 107d5c <SHA256_Transform>
while (len >= 64) {
10913a: 42b4 cmp r4, r6
10913c: d1f8 bne.n 109130 <SHA256_Update+0x54> <== ALWAYS TAKEN
len -= 64;
10913e: f007 073f and.w r7, r7, #63 ; 0x3f
}
/* Copy left over data into buffer */
memcpy(ctx->buf, src, len);
109142: 463a mov r2, r7
109144: 4631 mov r1, r6
109146: 4640 mov r0, r8
}
109148: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
memcpy(ctx->buf, src, len);
10914c: f00f bf34 b.w 118fb8 <__memcpy_from_thumb>
src += 64 - r;
109150: 4626 mov r6, r4
109152: e7f6 b.n 109142 <SHA256_Update+0x66>
0010ec80 <SHA512_Init>:
/* Zero bits processed so far */
ctx->count[0] = ctx->count[1] = 0;
/* Magic initialization constants */
ctx->state[0] = 0x6a09e667f3bcc908ULL;
10ec80: a31b add r3, pc, #108 ; (adr r3, 10ecf0 <SHA512_Init+0x70>)
10ec82: e9d3 2300 ldrd r2, r3, [r3]
ctx->count[0] = ctx->count[1] = 0;
10ec86: efc0 0010 vmov.i32 d16, #0 ; 0x00000000
ctx->state[1] = 0xbb67ae8584caa73bULL;
10ec8a: eddf 1b13 vldr d17, [pc, #76] ; 10ecd8 <SHA512_Init+0x58>
ctx->state[0] = 0x6a09e667f3bcc908ULL;
10ec8e: e9c0 2300 strd r2, r3, [r0]
ctx->state[2] = 0x3c6ef372fe94f82bULL;
10ec92: a319 add r3, pc, #100 ; (adr r3, 10ecf8 <SHA512_Init+0x78>)
10ec94: e9d3 2300 ldrd r2, r3, [r3]
ctx->count[0] = ctx->count[1] = 0;
10ec98: edc0 0b12 vstr d16, [r0, #72] ; 0x48
10ec9c: edc0 0b10 vstr d16, [r0, #64] ; 0x40
ctx->state[2] = 0x3c6ef372fe94f82bULL;
10eca0: e9c0 2304 strd r2, r3, [r0, #16]
ctx->state[3] = 0xa54ff53a5f1d36f1ULL;
ctx->state[4] = 0x510e527fade682d1ULL;
10eca4: a316 add r3, pc, #88 ; (adr r3, 10ed00 <SHA512_Init+0x80>)
10eca6: e9d3 2300 ldrd r2, r3, [r3]
ctx->state[3] = 0xa54ff53a5f1d36f1ULL;
10ecaa: eddf 0b0d vldr d16, [pc, #52] ; 10ece0 <SHA512_Init+0x60>
ctx->state[1] = 0xbb67ae8584caa73bULL;
10ecae: edc0 1b02 vstr d17, [r0, #8]
ctx->state[4] = 0x510e527fade682d1ULL;
10ecb2: e9c0 2308 strd r2, r3, [r0, #32]
ctx->state[5] = 0x9b05688c2b3e6c1fULL;
ctx->state[6] = 0x1f83d9abfb41bd6bULL;
10ecb6: a314 add r3, pc, #80 ; (adr r3, 10ed08 <SHA512_Init+0x88>)
10ecb8: e9d3 2300 ldrd r2, r3, [r3]
ctx->state[3] = 0xa54ff53a5f1d36f1ULL;
10ecbc: edc0 0b06 vstr d16, [r0, #24]
ctx->state[5] = 0x9b05688c2b3e6c1fULL;
10ecc0: eddf 0b09 vldr d16, [pc, #36] ; 10ece8 <SHA512_Init+0x68>
ctx->state[6] = 0x1f83d9abfb41bd6bULL;
10ecc4: e9c0 230c strd r2, r3, [r0, #48] ; 0x30
ctx->state[7] = 0x5be0cd19137e2179ULL;
10ecc8: a311 add r3, pc, #68 ; (adr r3, 10ed10 <SHA512_Init+0x90>)
10ecca: e9d3 2300 ldrd r2, r3, [r3]
ctx->state[5] = 0x9b05688c2b3e6c1fULL;
10ecce: edc0 0b0a vstr d16, [r0, #40] ; 0x28
ctx->state[7] = 0x5be0cd19137e2179ULL;
10ecd2: e9c0 230e strd r2, r3, [r0, #56] ; 0x38
}
10ecd6: 4770 bx lr
10ecd8: 84caa73b .word 0x84caa73b
10ecdc: bb67ae85 .word 0xbb67ae85
10ece0: 5f1d36f1 .word 0x5f1d36f1
10ece4: a54ff53a .word 0xa54ff53a
10ece8: 2b3e6c1f .word 0x2b3e6c1f
10ecec: 9b05688c .word 0x9b05688c
10ecf0: f3bcc908 .word 0xf3bcc908
10ecf4: 6a09e667 .word 0x6a09e667
10ecf8: fe94f82b .word 0xfe94f82b
10ecfc: 3c6ef372 .word 0x3c6ef372
10ed00: ade682d1 .word 0xade682d1
10ed04: 510e527f .word 0x510e527f
10ed08: fb41bd6b .word 0xfb41bd6b
10ed0c: 1f83d9ab .word 0x1f83d9ab
10ed10: 137e2179 .word 0x137e2179
10ed14: 5be0cd19 .word 0x5be0cd19
0010ed18 <SHA512_Update>:
/* Add bytes into the hash */
void
SHA512_Update(SHA512_CTX * ctx, const void *in, size_t len)
{
10ed18: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
10ed1c: 4690 mov r8, r2
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;
10ed1e: e9d0 3212 ldrd r3, r2, [r0, #72] ; 0x48
/* Convert the length into a number of bits */
bitlen[1] = ((uint64_t)len) << 3;
10ed22: ea4f 07c8 mov.w r7, r8, lsl #3
{
10ed26: 4605 mov r5, r0
bitlen[1] = ((uint64_t)len) << 3;
10ed28: ea4f 7058 mov.w r0, r8, lsr #29
r = (ctx->count[1] >> 3) & 0x7f;
10ed2c: 2400 movs r4, #0
10ed2e: f3c3 06c6 ubfx r6, r3, #3, #7
bitlen[0] = ((uint64_t)len) >> 61;
/* Update number of bits */
if ((ctx->count[1] += bitlen[1]) < bitlen[1])
10ed32: 19db adds r3, r3, r7
10ed34: 4142 adcs r2, r0
10ed36: bf2c ite cs
10ed38: f04f 0c01 movcs.w ip, #1
10ed3c: 46a4 movcc ip, r4
10ed3e: e9c5 3212 strd r3, r2, [r5, #72] ; 0x48
10ed42: f1bc 0f00 cmp.w ip, #0
10ed46: d006 beq.n 10ed56 <SHA512_Update+0x3e> <== NEVER TAKEN
ctx->count[0]++;
10ed48: 6c2b ldr r3, [r5, #64] ; 0x40 <== NOT EXECUTED
10ed4a: 3301 adds r3, #1 <== NOT EXECUTED
10ed4c: 642b str r3, [r5, #64] ; 0x40 <== NOT EXECUTED
10ed4e: 6c6b ldr r3, [r5, #68] ; 0x44 <== NOT EXECUTED
10ed50: f143 0300 adc.w r3, r3, #0 <== NOT EXECUTED
10ed54: 646b str r3, [r5, #68] ; 0x44 <== NOT EXECUTED
ctx->count[0] += bitlen[0];
/* Handle the case where we don't need to perform any transforms */
if (len < 128 - r) {
10ed56: f1d6 0280 rsbs r2, r6, #128 ; 0x80
memcpy(&ctx->buf[r], src, len);
10ed5a: f106 0050 add.w r0, r6, #80 ; 0x50
if (len < 128 - r) {
10ed5e: eb63 0303 sbc.w r3, r3, r3
10ed62: 4590 cmp r8, r2
10ed64: eb74 0303 sbcs.w r3, r4, r3
memcpy(&ctx->buf[r], src, len);
10ed68: 4428 add r0, r5
if (len < 128 - r) {
10ed6a: d324 bcc.n 10edb6 <SHA512_Update+0x9e>
return;
}
/* Finish the current block */
memcpy(&ctx->buf[r], src, 128 - r);
SHA512_Transform(ctx->state, ctx->buf);
10ed6c: f105 0750 add.w r7, r5, #80 ; 0x50
10ed70: f1a8 0880 sub.w r8, r8, #128 ; 0x80
src += 128 - r;
10ed74: 188c adds r4, r1, r2
len -= 128 - r;
10ed76: 44b0 add r8, r6
memcpy(&ctx->buf[r], src, 128 - r);
10ed78: f005 ec62 blx 114640 <memcpy>
SHA512_Transform(ctx->state, ctx->buf);
10ed7c: 4639 mov r1, r7
10ed7e: 4628 mov r0, r5
10ed80: f7fa fa60 bl 109244 <SHA512_Transform>
/* Perform complete blocks */
while (len >= 128) {
10ed84: f1b8 0f7f cmp.w r8, #127 ; 0x7f
10ed88: d91a bls.n 10edc0 <SHA512_Update+0xa8> <== NEVER TAKEN
10ed8a: f1a8 0680 sub.w r6, r8, #128 ; 0x80 <== NOT EXECUTED
10ed8e: f026 067f bic.w r6, r6, #127 ; 0x7f <== NOT EXECUTED
10ed92: 3680 adds r6, #128 ; 0x80 <== NOT EXECUTED
10ed94: 4426 add r6, r4 <== NOT EXECUTED
SHA512_Transform(ctx->state, src);
10ed96: 4621 mov r1, r4 <== NOT EXECUTED
10ed98: 4628 mov r0, r5 <== NOT EXECUTED
src += 128;
10ed9a: 3480 adds r4, #128 ; 0x80 <== NOT EXECUTED
SHA512_Transform(ctx->state, src);
10ed9c: f7fa fa52 bl 109244 <SHA512_Transform> <== NOT EXECUTED
while (len >= 128) {
10eda0: 42b4 cmp r4, r6 <== NOT EXECUTED
10eda2: d1f8 bne.n 10ed96 <SHA512_Update+0x7e> <== NOT EXECUTED
len -= 128;
10eda4: f008 087f and.w r8, r8, #127 ; 0x7f <== NOT EXECUTED
}
/* Copy left over data into buffer */
memcpy(ctx->buf, src, len);
10eda8: 4642 mov r2, r8
10edaa: 4631 mov r1, r6
10edac: 4638 mov r0, r7
}
10edae: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
memcpy(ctx->buf, src, len);
10edb2: f00a b901 b.w 118fb8 <__memcpy_from_thumb>
memcpy(&ctx->buf[r], src, len);
10edb6: 4642 mov r2, r8
}
10edb8: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
memcpy(&ctx->buf[r], src, len);
10edbc: f00a b8fc b.w 118fb8 <__memcpy_from_thumb>
src += 128 - r;
10edc0: 4626 mov r6, r4
10edc2: e7f1 b.n 10eda8 <SHA512_Update+0x90>