예제 #1
0
void foobar(const void *buffer)
   {
#if 1
// # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0)
#define UNALIGNED_P(p) ((unsigned long) (p) % alignof (unsigned int) != 0)
      if (UNALIGNED_P(buffer))
         {
         }
#endif
      if ((unsigned long) (buffer) % alignof (unsigned int) != 0)
         {
         }
   }
예제 #2
0
void
sha512_process_bytes (const void *buffer, size_t len, struct sha512_ctx *ctx)
{
    /* When we already have some bits in our internal buffer concatenate
       both inputs first.  */
    if (ctx->buflen != 0)
    {
        size_t left_over = ctx->buflen;
        size_t add = 256 - left_over > len ? len : 256 - left_over;

        memcpy (&((char *) ctx->buffer)[left_over], buffer, add);
        ctx->buflen += add;

        if (ctx->buflen > 128)
        {
            sha512_process_block (ctx->buffer, ctx->buflen & ~127, ctx);

            ctx->buflen &= 127;
            /* The regions in the following copy operation cannot overlap.  */
            memcpy (ctx->buffer,
                    &((char *) ctx->buffer)[(left_over + add) & ~127],
                    ctx->buflen);
        }

        buffer = (const char *) buffer + add;
        len -= add;
    }

    /* Process available complete blocks.  */
    if (len >= 128)
    {
#if !_STRING_ARCH_unaligned
# define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (u64) != 0)
        if (UNALIGNED_P (buffer))
            while (len > 128)
            {
                sha512_process_block (memcpy (ctx->buffer, buffer, 128), 128, ctx);
                buffer = (const char *) buffer + 128;
                len -= 128;
            }
        else
#endif
        {
            sha512_process_block (buffer, len & ~127, ctx);
            buffer = (const char *) buffer + (len & ~127);
            len &= 127;
        }
    }

    /* Move remaining bytes in internal buffer.  */
    if (len > 0)
    {
        size_t left_over = ctx->buflen;

        memcpy (&((char *) ctx->buffer)[left_over], buffer, len);
        left_over += len;
        if (left_over >= 128)
        {
            sha512_process_block (ctx->buffer, 128, ctx);
            left_over -= 128;
            memcpy (ctx->buffer, &ctx->buffer[16], left_over);
        }
        ctx->buflen = left_over;
    }
}