aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorJ08nY2017-09-13 00:40:13 +0200
committerJ08nY2017-09-13 00:40:13 +0200
commit607fe7b39f4e2ea579c935509c6e4dc68b43c457 (patch)
treea27bf266515b6495c836de9a1ccb1f6398b1ecde /src/util
parentcceec4063e74bb29c79500f38aa40fc466180a0b (diff)
downloadecgen-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.c43
-rw-r--r--src/util/binascii.h34
-rw-r--r--src/util/bits.c26
-rw-r--r--src/util/bits.h2
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