|
|
|
@ -567,7 +567,7 @@ typedef struct md5_hmac_ctx
|
|
|
|
|
|
|
|
|
|
} md5_hmac_ctx_t;
|
|
|
|
|
|
|
|
|
|
void md5_hmac_init (md5_hmac_ctx_t *ctx, const u32 w0[4], const u32 w1[4], const u32 w2[4], const u32 w3[4])
|
|
|
|
|
void md5_hmac_init_64 (md5_hmac_ctx_t *ctx, const u32 w0[4], const u32 w1[4], const u32 w2[4], const u32 w3[4])
|
|
|
|
|
{
|
|
|
|
|
u32 t0[4];
|
|
|
|
|
u32 t1[4];
|
|
|
|
@ -621,6 +621,120 @@ void md5_hmac_init (md5_hmac_ctx_t *ctx, const u32 w0[4], const u32 w1[4], const
|
|
|
|
|
md5_update_64 (&ctx->opad, t0, t1, t2, t3, 64);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void md5_hmac_init (md5_hmac_ctx_t *ctx, const u32 *w, const int len)
|
|
|
|
|
{
|
|
|
|
|
u32 w0[4];
|
|
|
|
|
u32 w1[4];
|
|
|
|
|
u32 w2[4];
|
|
|
|
|
u32 w3[4];
|
|
|
|
|
|
|
|
|
|
if (len > 64)
|
|
|
|
|
{
|
|
|
|
|
md5_ctx_t tmp;
|
|
|
|
|
|
|
|
|
|
md5_init (&tmp);
|
|
|
|
|
|
|
|
|
|
md5_update (&tmp, w, len);
|
|
|
|
|
|
|
|
|
|
md5_final (&tmp);
|
|
|
|
|
|
|
|
|
|
w0[0] = tmp.h[0];
|
|
|
|
|
w0[1] = tmp.h[1];
|
|
|
|
|
w0[2] = tmp.h[2];
|
|
|
|
|
w0[3] = tmp.h[3];
|
|
|
|
|
w1[0] = 0;
|
|
|
|
|
w1[1] = 0;
|
|
|
|
|
w1[2] = 0;
|
|
|
|
|
w1[3] = 0;
|
|
|
|
|
w2[0] = 0;
|
|
|
|
|
w2[1] = 0;
|
|
|
|
|
w2[2] = 0;
|
|
|
|
|
w2[3] = 0;
|
|
|
|
|
w3[0] = 0;
|
|
|
|
|
w3[1] = 0;
|
|
|
|
|
w3[2] = 0;
|
|
|
|
|
w3[3] = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
w0[0] = w[ 0];
|
|
|
|
|
w0[1] = w[ 1];
|
|
|
|
|
w0[2] = w[ 2];
|
|
|
|
|
w0[3] = w[ 3];
|
|
|
|
|
w1[0] = w[ 4];
|
|
|
|
|
w1[1] = w[ 5];
|
|
|
|
|
w1[2] = w[ 6];
|
|
|
|
|
w1[3] = w[ 7];
|
|
|
|
|
w2[0] = w[ 8];
|
|
|
|
|
w2[1] = w[ 9];
|
|
|
|
|
w2[2] = w[10];
|
|
|
|
|
w2[3] = w[11];
|
|
|
|
|
w3[0] = w[12];
|
|
|
|
|
w3[1] = w[13];
|
|
|
|
|
w3[2] = w[14];
|
|
|
|
|
w3[3] = w[15];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
md5_hmac_init_64 (ctx, w0, w1, w2, w3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void md5_hmac_init_global (md5_hmac_ctx_t *ctx, __global const u32 *w, const int len)
|
|
|
|
|
{
|
|
|
|
|
u32 w0[4];
|
|
|
|
|
u32 w1[4];
|
|
|
|
|
u32 w2[4];
|
|
|
|
|
u32 w3[4];
|
|
|
|
|
|
|
|
|
|
if (len > 64)
|
|
|
|
|
{
|
|
|
|
|
md5_ctx_t tmp;
|
|
|
|
|
|
|
|
|
|
md5_init (&tmp);
|
|
|
|
|
|
|
|
|
|
md5_update_global (&tmp, w, len);
|
|
|
|
|
|
|
|
|
|
md5_final (&tmp);
|
|
|
|
|
|
|
|
|
|
w0[0] = tmp.h[0];
|
|
|
|
|
w0[1] = tmp.h[1];
|
|
|
|
|
w0[2] = tmp.h[2];
|
|
|
|
|
w0[3] = tmp.h[3];
|
|
|
|
|
w1[0] = 0;
|
|
|
|
|
w1[1] = 0;
|
|
|
|
|
w1[2] = 0;
|
|
|
|
|
w1[3] = 0;
|
|
|
|
|
w2[0] = 0;
|
|
|
|
|
w2[1] = 0;
|
|
|
|
|
w2[2] = 0;
|
|
|
|
|
w2[3] = 0;
|
|
|
|
|
w3[0] = 0;
|
|
|
|
|
w3[1] = 0;
|
|
|
|
|
w3[2] = 0;
|
|
|
|
|
w3[3] = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
w0[0] = w[ 0];
|
|
|
|
|
w0[1] = w[ 1];
|
|
|
|
|
w0[2] = w[ 2];
|
|
|
|
|
w0[3] = w[ 3];
|
|
|
|
|
w1[0] = w[ 4];
|
|
|
|
|
w1[1] = w[ 5];
|
|
|
|
|
w1[2] = w[ 6];
|
|
|
|
|
w1[3] = w[ 7];
|
|
|
|
|
w2[0] = w[ 8];
|
|
|
|
|
w2[1] = w[ 9];
|
|
|
|
|
w2[2] = w[10];
|
|
|
|
|
w2[3] = w[11];
|
|
|
|
|
w3[0] = w[12];
|
|
|
|
|
w3[1] = w[13];
|
|
|
|
|
w3[2] = w[14];
|
|
|
|
|
w3[3] = w[15];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
md5_hmac_init_64 (ctx, w0, w1, w2, w3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void md5_hmac_update_64 (md5_hmac_ctx_t *ctx, u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const int len)
|
|
|
|
|
{
|
|
|
|
|
md5_update_64 (&ctx->ipad, w0, w1, w2, w3, len);
|
|
|
|
|