diff options
| author | J08nY | 2017-09-13 00:40:13 +0200 |
|---|---|---|
| committer | J08nY | 2017-09-13 00:40:13 +0200 |
| commit | 607fe7b39f4e2ea579c935509c6e4dc68b43c457 (patch) | |
| tree | a27bf266515b6495c836de9a1ccb1f6398b1ecde /src/util | |
| parent | cceec4063e74bb29c79500f38aa40fc466180a0b (diff) | |
| download | ecgen-607fe7b39f4e2ea579c935509c6e4dc68b43c457.tar.gz ecgen-607fe7b39f4e2ea579c935509c6e4dc68b43c457.tar.zst ecgen-607fe7b39f4e2ea579c935509c6e4dc68b43c457.zip | |
Remove binascii utilities, move seed manipulation to bits_t.
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/binascii.c | 43 | ||||
| -rw-r--r-- | src/util/binascii.h | 34 | ||||
| -rw-r--r-- | src/util/bits.c | 26 | ||||
| -rw-r--r-- | src/util/bits.h | 2 |
4 files changed, 19 insertions, 86 deletions
diff --git a/src/util/binascii.c b/src/util/binascii.c deleted file mode 100644 index bbc8e89..0000000 --- a/src/util/binascii.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * ecgen, tool for generating Elliptic curve domain parameters - * Copyright (C) 2017 J08nY - */ -#include "binascii.h" -#include "util/memory.h" - -size_t binascii_blen(GEN i) { - pari_sp ltop = avma; - size_t result = (size_t)glength(binary_2k_nv(i, 8)); - avma = ltop; - return result; -} - -unsigned char *binascii_itob(GEN i, endian_e endianity) { - pari_sp ltop = avma; - GEN digits = binary_2k_nv(i, 8); - if (endianity == ENDIAN_LITTLE) { - digits = vecsmall_reverse(digits); - } - long blen = glength(digits); - unsigned char *result = try_malloc((size_t)blen); - for (long j = 1; j <= blen; ++j) { - result[j - 1] = (unsigned char)gel(digits, j); - } - - avma = ltop; - return result; -} - -GEN binascii_btoi(const unsigned char *bytes, size_t len, endian_e endianity) { - pari_sp ltop = avma; - GEN result = gen_0; - for (size_t i = 0; i < len; ++i) { - size_t index = i; - if (endianity == ENDIAN_LITTLE) { - index = (len - 1) - i; - } - result = addis(result, bytes[index]); - if (i < len - 1) result = shifti(result, 8); - } - return gerepileupto(ltop, result); -} diff --git a/src/util/binascii.h b/src/util/binascii.h deleted file mode 100644 index a6301ef..0000000 --- a/src/util/binascii.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * ecgen, tool for generating Elliptic curve domain parameters - * Copyright (C) 2017 J08nY - */ -#ifndef ECGEN_BINASCII_H -#define ECGEN_BINASCII_H - -#include <pari/pari.h> -#include "gen/types.h" - -/** - * @brief - * @param i - * @return - */ -size_t binascii_blen(GEN i); - -/** - * @brief - * @param i - * @param endianity - * @return - */ -unsigned char *binascii_itob(GEN i, endian_e endianity); - -/** - * @brief - * @param bytes - * @param endianity - * @return - */ -GEN binascii_btoi(const unsigned char *bytes, size_t len, endian_e endianity); - -#endif // ECGEN_BINASCII_H diff --git a/src/util/bits.c b/src/util/bits.c index e573505..e2d5d79 100644 --- a/src/util/bits.c +++ b/src/util/bits.c @@ -3,8 +3,9 @@ * Copyright (C) 2017 J08nY */ -#include <gen/types.h> #include "bits.h" +#include <gen/types.h> +#include <sha1/sha1.h> #include "util/memory.h" bits_t *bits_new(size_t bit_len) { @@ -148,8 +149,8 @@ static unsigned char and_func(unsigned char one, unsigned char other) { } static bits_t *bits_bitwise(const bits_t *one, const bits_t *other, - unsigned char (*bitwise_func)(unsigned char, - unsigned char)) { + unsigned char (*bitwise_func)(unsigned char, + unsigned char)) { const bits_t *shorter; const bits_t *longer; if (one->bitlen > other->bitlen) { @@ -165,7 +166,7 @@ static bits_t *bits_bitwise(const bits_t *one, const bits_t *other, size_t longer_pos = longer->bitlen - i - 1; unsigned char longer_bit = - (unsigned char)GET_BIT(longer->bits, longer_pos); + (unsigned char)GET_BIT(longer->bits, longer_pos); unsigned char shorter_bit = 0; if (shorter->bitlen > i) { size_t shorter_pos = shorter->bitlen - i - 1; @@ -222,9 +223,9 @@ void bits_rotz(bits_t *bits) { size_t left_pos = i; size_t right_pos = bits->bitlen - i - 1; unsigned char left_bit = - (unsigned char)GET_BIT(original_bits, left_pos); + (unsigned char)GET_BIT(original_bits, left_pos); unsigned char right_bit = - (unsigned char)GET_BIT(original_bits, right_pos); + (unsigned char)GET_BIT(original_bits, right_pos); bits->bits[right_pos / 8] |= left_bit << (7 - (right_pos % 8)); bits->bits[left_pos / 8] |= right_bit << (7 - (left_pos % 8)); } @@ -232,7 +233,7 @@ void bits_rotz(bits_t *bits) { size_t middle_pos = bits->bitlen / 2; unsigned char middle_bit = - (unsigned char)GET_BIT(original_bits, middle_pos); + (unsigned char)GET_BIT(original_bits, middle_pos); bits->bits[middle_pos / 8] |= middle_bit << (7 - (middle_pos % 8)); } } @@ -253,7 +254,7 @@ void bits_shiftz(bits_t *bits, long amount) { for (size_t i = 0; i < bits->bitlen; ++i) { unsigned char new_bit = 0; if ((amount > 0 && i + amount < bits->bitlen) || - (amount < 0 && i >= -amount)) { + (amount < 0 && i >= -amount)) { new_bit = (unsigned char)GET_BIT(original_bits, i + amount); } bits->bits[i / 8] |= new_bit << (7 - (i % 8)); @@ -277,7 +278,7 @@ void bits_shiftrz(bits_t *bits, long amount) { unsigned char new_bit = 0; size_t new_pos = 0; if ((amount > 0 && i + amount < bits->bitlen) || - (amount < 0 && i >= -amount)) { + (amount < 0 && i >= -amount)) { new_pos = i + amount; } else if (amount > 0) { new_pos = (i + amount) % bits->bitlen; @@ -362,6 +363,13 @@ bits_t *bits_shorten(const bits_t *bits, long amount) { return result; } +void bits_sha1(const bits_t *bits, unsigned char hashout[20]) { + SHA_CTX ctx = {}; + SHA1_Init(&ctx); + SHA1_Update(&ctx, bits->bits, (int)BYTE_LEN(bits->bitlen)); + SHA1_Final(hashout, &ctx); +} + bool bits_eq(const bits_t *one, const bits_t *other) { if (one->bitlen != other->bitlen) return false; if (one->bitlen == 0) return true; diff --git a/src/util/bits.h b/src/util/bits.h index 3deeab0..376c736 100644 --- a/src/util/bits.h +++ b/src/util/bits.h @@ -74,6 +74,8 @@ void bits_shortenz(bits_t *bits, long amount); bits_t *bits_shorten(const bits_t *bits, long amount); +void bits_sha1(const bits_t *bits, unsigned char hashout[20]); + bool bits_eq(const bits_t *one, const bits_t *other); #endif // ECGEN_BITS_H |
