diff options
Diffstat (limited to 'jerry-core/debugger/debugger-sha1.c')
-rw-r--r-- | jerry-core/debugger/debugger-sha1.c | 370 |
1 files changed, 0 insertions, 370 deletions
diff --git a/jerry-core/debugger/debugger-sha1.c b/jerry-core/debugger/debugger-sha1.c deleted file mode 100644 index 70784241..00000000 --- a/jerry-core/debugger/debugger-sha1.c +++ /dev/null @@ -1,370 +0,0 @@ -/* Copyright JS Foundation and other contributors, http://js.foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * FIPS-180-1 compliant SHA-1 implementation - * - * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * This file is part of mbed TLS (https://tls.mbed.org) - */ - -/* - * The SHA-1 standard was published by NIST in 1993. - * - * http://www.itl.nist.gov/fipspubs/fip180-1.htm - */ - -#include "debugger.h" - -#ifdef JERRY_DEBUGGER - -/** - * SHA-1 context structure. - */ -typedef struct -{ - uint32_t total[2]; /**< number of bytes processed */ - uint32_t state[5]; /**< intermediate digest state */ - uint8_t buffer[64]; /**< data block being processed */ -} jerry_sha1_context; - -/* 32-bit integer manipulation macros (big endian). */ - -#define JERRY_SHA1_GET_UINT32_BE(n, b, i) \ -{ \ - (n) = (((uint32_t) (b)[(i) + 0]) << 24) \ - | (((uint32_t) (b)[(i) + 1]) << 16) \ - | (((uint32_t) (b)[(i) + 2]) << 8) \ - | ((uint32_t) (b)[(i) + 3]); \ -} - -#define JERRY_SHA1_PUT_UINT32_BE(n, b, i) \ -{ \ - (b)[(i) + 0] = (uint8_t) ((n) >> 24); \ - (b)[(i) + 1] = (uint8_t) ((n) >> 16); \ - (b)[(i) + 2] = (uint8_t) ((n) >> 8); \ - (b)[(i) + 3] = (uint8_t) ((n)); \ -} - -/** - * Initialize SHA-1 context. - */ -static void -jerry_sha1_init (jerry_sha1_context *sha1_context_p) /**< SHA-1 context */ -{ - memset (sha1_context_p, 0, sizeof (jerry_sha1_context)); - - sha1_context_p->total[0] = 0; - sha1_context_p->total[1] = 0; - - sha1_context_p->state[0] = 0x67452301; - sha1_context_p->state[1] = 0xEFCDAB89; - sha1_context_p->state[2] = 0x98BADCFE; - sha1_context_p->state[3] = 0x10325476; - sha1_context_p->state[4] = 0xC3D2E1F0; -} /* jerry_sha1_init */ - -#define JERRY_SHA1_P(a, b, c, d, e, x) \ -do { \ - e += JERRY_SHA1_SHIFT (a, 5) + JERRY_SHA1_F (b, c, d) + K + x; \ - b = JERRY_SHA1_SHIFT (b, 30); \ -} while (0) - -/** - * Update SHA-1 internal buffer status. - */ -static void -jerry_sha1_process (jerry_sha1_context *sha1_context_p, /**< SHA-1 context */ - const uint8_t data[64]) /**< data buffer */ -{ - uint32_t temp, W[16], A, B, C, D, E; - - JERRY_SHA1_GET_UINT32_BE (W[0], data, 0); - JERRY_SHA1_GET_UINT32_BE (W[1], data, 4); - JERRY_SHA1_GET_UINT32_BE (W[2], data, 8); - JERRY_SHA1_GET_UINT32_BE (W[3], data, 12); - JERRY_SHA1_GET_UINT32_BE (W[4], data, 16); - JERRY_SHA1_GET_UINT32_BE (W[5], data, 20); - JERRY_SHA1_GET_UINT32_BE (W[6], data, 24); - JERRY_SHA1_GET_UINT32_BE (W[7], data, 28); - JERRY_SHA1_GET_UINT32_BE (W[8], data, 32); - JERRY_SHA1_GET_UINT32_BE (W[9], data, 36); - JERRY_SHA1_GET_UINT32_BE (W[10], data, 40); - JERRY_SHA1_GET_UINT32_BE (W[11], data, 44); - JERRY_SHA1_GET_UINT32_BE (W[12], data, 48); - JERRY_SHA1_GET_UINT32_BE (W[13], data, 52); - JERRY_SHA1_GET_UINT32_BE (W[14], data, 56); - JERRY_SHA1_GET_UINT32_BE (W[15], data, 60); - -#define JERRY_SHA1_SHIFT(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) - -#define JERRY_SHA1_R(t) \ -( \ - temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ W[(t - 14) & 0x0F] ^ W[t & 0x0F], \ - W[t & 0x0F] = JERRY_SHA1_SHIFT (temp, 1) \ -) - - A = sha1_context_p->state[0]; - B = sha1_context_p->state[1]; - C = sha1_context_p->state[2]; - D = sha1_context_p->state[3]; - E = sha1_context_p->state[4]; - - uint32_t K = 0x5A827999; - -#define JERRY_SHA1_F(x, y, z) (z ^ (x & (y ^ z))) - - JERRY_SHA1_P (A, B, C, D, E, W[0]); - JERRY_SHA1_P (E, A, B, C, D, W[1]); - JERRY_SHA1_P (D, E, A, B, C, W[2]); - JERRY_SHA1_P (C, D, E, A, B, W[3]); - JERRY_SHA1_P (B, C, D, E, A, W[4]); - JERRY_SHA1_P (A, B, C, D, E, W[5]); - JERRY_SHA1_P (E, A, B, C, D, W[6]); - JERRY_SHA1_P (D, E, A, B, C, W[7]); - JERRY_SHA1_P (C, D, E, A, B, W[8]); - JERRY_SHA1_P (B, C, D, E, A, W[9]); - JERRY_SHA1_P (A, B, C, D, E, W[10]); - JERRY_SHA1_P (E, A, B, C, D, W[11]); - JERRY_SHA1_P (D, E, A, B, C, W[12]); - JERRY_SHA1_P (C, D, E, A, B, W[13]); - JERRY_SHA1_P (B, C, D, E, A, W[14]); - JERRY_SHA1_P (A, B, C, D, E, W[15]); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (16)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (17)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (18)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (19)); - -#undef JERRY_SHA1_F - - K = 0x6ED9EBA1; - -#define JERRY_SHA1_F(x, y, z) (x ^ y ^ z) - - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (20)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (21)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (22)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (23)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (24)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (25)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (26)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (27)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (28)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (29)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (30)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (31)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (32)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (33)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (34)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (35)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (36)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (37)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (38)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (39)); - -#undef JERRY_SHA1_F - - K = 0x8F1BBCDC; - -#define JERRY_SHA1_F(x, y, z) ((x & y) | (z & (x | y))) - - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (40)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (41)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (42)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (43)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (44)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (45)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (46)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (47)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (48)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (49)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (50)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (51)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (52)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (53)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (54)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (55)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (56)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (57)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (58)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (59)); - -#undef JERRY_SHA1_F - - K = 0xCA62C1D6; - -#define JERRY_SHA1_F(x, y, z) (x ^ y ^ z) - - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (60)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (61)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (62)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (63)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (64)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (65)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (66)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (67)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (68)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (69)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (70)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (71)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (72)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (73)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (74)); - JERRY_SHA1_P (A, B, C, D, E, JERRY_SHA1_R (75)); - JERRY_SHA1_P (E, A, B, C, D, JERRY_SHA1_R (76)); - JERRY_SHA1_P (D, E, A, B, C, JERRY_SHA1_R (77)); - JERRY_SHA1_P (C, D, E, A, B, JERRY_SHA1_R (78)); - JERRY_SHA1_P (B, C, D, E, A, JERRY_SHA1_R (79)); - -#undef JERRY_SHA1_F - - sha1_context_p->state[0] += A; - sha1_context_p->state[1] += B; - sha1_context_p->state[2] += C; - sha1_context_p->state[3] += D; - sha1_context_p->state[4] += E; - -#undef JERRY_SHA1_SHIFT -#undef JERRY_SHA1_R -} /* jerry_sha1_process */ - -#undef JERRY_SHA1_P - -/** - * SHA-1 update buffer. - */ -static void -jerry_sha1_update (jerry_sha1_context *sha1_context_p, /**< SHA-1 context */ - const uint8_t *source_p, /**< source buffer */ - size_t source_length) /**< length of source buffer */ -{ - size_t fill; - uint32_t left; - - if (source_length == 0) - { - return; - } - - left = sha1_context_p->total[0] & 0x3F; - fill = 64 - left; - - sha1_context_p->total[0] += (uint32_t) source_length; - - /* Check overflow. */ - if (sha1_context_p->total[0] < (uint32_t) source_length) - { - sha1_context_p->total[1]++; - } - - if (left && source_length >= fill) - { - memcpy ((void *) (sha1_context_p->buffer + left), source_p, fill); - jerry_sha1_process (sha1_context_p, sha1_context_p->buffer); - source_p += fill; - source_length -= fill; - left = 0; - } - - while (source_length >= 64) - { - jerry_sha1_process (sha1_context_p, source_p); - source_p += 64; - source_length -= 64; - } - - if (source_length > 0) - { - memcpy ((void *) (sha1_context_p->buffer + left), source_p, source_length); - } -} /* jerry_sha1_update */ - -/** - * SHA-1 final digest. - */ -static void -jerry_sha1_finish (jerry_sha1_context *sha1_context_p, /**< SHA-1 context */ - uint8_t destination_p[20]) /**< result */ -{ - uint8_t buffer[16]; - - uint32_t high = (sha1_context_p->total[0] >> 29) | (sha1_context_p->total[1] << 3); - uint32_t low = (sha1_context_p->total[0] << 3); - - uint32_t last = sha1_context_p->total[0] & 0x3F; - uint32_t padn = (last < 56) ? (56 - last) : (120 - last); - - memset (buffer, 0, sizeof (buffer)); - buffer[0] = 0x80; - - while (padn > sizeof (buffer)) - { - jerry_sha1_update (sha1_context_p, buffer, sizeof (buffer)); - buffer[0] = 0; - padn -= (uint32_t) sizeof (buffer); - } - - jerry_sha1_update (sha1_context_p, buffer, padn); - - JERRY_SHA1_PUT_UINT32_BE (high, buffer, 0); - JERRY_SHA1_PUT_UINT32_BE (low, buffer, 4); - - jerry_sha1_update (sha1_context_p, buffer, 8); - - JERRY_SHA1_PUT_UINT32_BE (sha1_context_p->state[0], destination_p, 0); - JERRY_SHA1_PUT_UINT32_BE (sha1_context_p->state[1], destination_p, 4); - JERRY_SHA1_PUT_UINT32_BE (sha1_context_p->state[2], destination_p, 8); - JERRY_SHA1_PUT_UINT32_BE (sha1_context_p->state[3], destination_p, 12); - JERRY_SHA1_PUT_UINT32_BE (sha1_context_p->state[4], destination_p, 16); -} /* jerry_sha1_finish */ - -#undef JERRY_SHA1_GET_UINT32_BE -#undef JERRY_SHA1_PUT_UINT32_BE - -/** - * Computes the SHA-1 value of the combination of the two input buffers. - */ -void -jerry_debugger_compute_sha1 (const uint8_t *source1_p, /**< first part of the input */ - size_t source1_length, /**< length of the first part */ - const uint8_t *source2_p, /**< second part of the input */ - size_t source2_length, /**< length of the second part */ - uint8_t destination_p[20]) /**< result */ -{ - JMEM_DEFINE_LOCAL_ARRAY (sha1_context_p, 1, jerry_sha1_context); - - jerry_sha1_init (sha1_context_p); - jerry_sha1_update (sha1_context_p, source1_p, source1_length); - jerry_sha1_update (sha1_context_p, source2_p, source2_length); - jerry_sha1_finish (sha1_context_p, destination_p); - - JMEM_FINALIZE_LOCAL_ARRAY (sha1_context_p); -} /* jerry_debugger_compute_sha1 */ - -#endif /* JERRY_DEBUGGER */ |