summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-06-04 14:43:22 +0200
committerDaniel Borkmann <dborkman@redhat.com>2013-06-04 14:43:22 +0200
commit59ebf2978741fb4cf0086440e23a1fcb522fdc21 (patch)
tree167454002491bb6022da177bcfbc2eb4d3244f02
parent4d3be7be483f92030912e976e4dea24edd723f34 (diff)
curve: move taia related functions into own header
Move them into a separate header, structures and inline functions, since they are more or less independant of curve.h. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-rw-r--r--curve.h140
-rw-r--r--taia.h159
2 files changed, 160 insertions, 139 deletions
diff --git a/curve.h b/curve.h
index ee4a322..c5ad8e8 100644
--- a/curve.h
+++ b/curve.h
@@ -14,18 +14,9 @@
#include "built_in.h"
#include "ioops.h"
#include "rnd.h"
+#include "taia.h"
#include "crypto.h"
-struct tai {
- uint64_t x;
-};
-
-struct taia {
- struct tai sec;
- uint32_t nano;
- uint32_t atto;
-};
-
static struct taia tolerance_taia = {
.sec.x = 0,
.nano = 700000000ULL,
@@ -59,135 +50,6 @@ extern ssize_t curve25519_decode(struct curve25519_struct *curve, struct curve25
unsigned char *chipertext, size_t size, unsigned char **plaintext,
struct taia *arrival_taia);
-static inline void tai_pack(unsigned char *s, struct tai *t)
-{
- uint64_t x;
-
- x = t->x;
- s[7] = x & 255; x >>= 8;
- s[6] = x & 255; x >>= 8;
- s[5] = x & 255; x >>= 8;
- s[4] = x & 255; x >>= 8;
- s[3] = x & 255; x >>= 8;
- s[2] = x & 255; x >>= 8;
- s[1] = x & 255; x >>= 8;
- s[0] = x;
-}
-
-static inline void tai_unpack(unsigned char *s, struct tai *t)
-{
- uint64_t x;
-
- x = (unsigned char) s[0];
- x <<= 8; x += (unsigned char) s[1];
- x <<= 8; x += (unsigned char) s[2];
- x <<= 8; x += (unsigned char) s[3];
- x <<= 8; x += (unsigned char) s[4];
- x <<= 8; x += (unsigned char) s[5];
- x <<= 8; x += (unsigned char) s[6];
- x <<= 8; x += (unsigned char) s[7];
- t->x = x;
-}
-
-static inline void taia_pack(unsigned char *s, struct taia *t)
-{
- unsigned long x;
-
- tai_pack(s, &t->sec);
- s += 8;
- x = t->atto;
- s[7] = x & 255; x >>= 8;
- s[6] = x & 255; x >>= 8;
- s[5] = x & 255; x >>= 8;
- s[4] = x;
- x = t->nano;
- s[3] = x & 255; x >>= 8;
- s[2] = x & 255; x >>= 8;
- s[1] = x & 255; x >>= 8;
- s[0] = x;
-}
-
-static inline void taia_unpack(unsigned char *s, struct taia *t)
-{
- unsigned long x;
-
- tai_unpack(s, &t->sec);
- s += 8;
- x = (unsigned char) s[4];
- x <<= 8; x += (unsigned char) s[5];
- x <<= 8; x += (unsigned char) s[6];
- x <<= 8; x += (unsigned char) s[7];
- t->atto = x;
- x = (unsigned char) s[0];
- x <<= 8; x += (unsigned char) s[1];
- x <<= 8; x += (unsigned char) s[2];
- x <<= 8; x += (unsigned char) s[3];
- t->nano = x;
-}
-
-#define tai_unix(t, u) ((void) ((t)->x = 4611686018427387914ULL + (uint64_t) (u)))
-
-static inline void taia_now(struct taia *t)
-{
- struct timeval now;
-
- gettimeofday(&now, NULL);
-
- tai_unix(&t->sec, now.tv_sec);
- t->nano = 1000 * now.tv_usec + 500;
- t->atto = secrand();
-}
-
-static inline void taia_sub(struct taia *res, const struct taia *u, const struct taia *v)
-{
- unsigned long unano = u->nano;
- unsigned long uatto = u->atto;
-
- res->sec.x = u->sec.x - v->sec.x;
- res->nano = unano - v->nano;
- res->atto = uatto - v->atto;
-
- if (res->atto > uatto) {
- res->atto += 1000000000UL;
- --res->nano;
- }
-
- if (res->nano > unano) {
- res->nano += 1000000000UL;
- --res->sec.x;
- }
-}
-
-static inline void taia_add(struct taia *res, const struct taia *u, const struct taia *v)
-{
- res->sec.x = u->sec.x + v->sec.x;
- res->nano = u->nano + v->nano;
- res->atto = u->atto + v->atto;
-
- if (res->atto > 999999999UL) {
- res->atto -= 1000000000UL;
- ++res->nano;
- }
-
- if (res->nano > 999999999UL) {
- res->nano -= 1000000000UL;
- ++res->sec.x;
- }
-}
-
-static inline int taia_less(const struct taia *t, const struct taia *u)
-{
- if (t->sec.x < u->sec.x)
- return 1;
- if (t->sec.x > u->sec.x)
- return 0;
- if (t->nano < u->nano)
- return 1;
- if (t->nano > u->nano)
- return 0;
- return t->atto < u->atto;
-}
-
static inline int is_good_taia(struct taia *arrival_taia, struct taia *packet_taia)
{
int is_ts_good = 0;
diff --git a/taia.h b/taia.h
new file mode 100644
index 0000000..227321d
--- /dev/null
+++ b/taia.h
@@ -0,0 +1,159 @@
+#ifndef TAIA_H
+#define TAIA_H
+
+#include <stdint.h>
+
+struct tai {
+ uint64_t x;
+};
+
+struct taia {
+ struct tai sec;
+ uint32_t nano;
+ uint32_t atto;
+};
+
+static inline void tai_pack(unsigned char *s, struct tai *t)
+{
+ uint64_t x;
+
+ x = t->x;
+
+ s[7] = x & 255; x >>= 8;
+ s[6] = x & 255; x >>= 8;
+ s[5] = x & 255; x >>= 8;
+ s[4] = x & 255; x >>= 8;
+ s[3] = x & 255; x >>= 8;
+ s[2] = x & 255; x >>= 8;
+ s[1] = x & 255; x >>= 8;
+ s[0] = x;
+}
+
+static inline void tai_unpack(unsigned char *s, struct tai *t)
+{
+ uint64_t x;
+
+ x = (unsigned char) s[0];
+ x <<= 8; x += (unsigned char) s[1];
+ x <<= 8; x += (unsigned char) s[2];
+ x <<= 8; x += (unsigned char) s[3];
+ x <<= 8; x += (unsigned char) s[4];
+ x <<= 8; x += (unsigned char) s[5];
+ x <<= 8; x += (unsigned char) s[6];
+ x <<= 8; x += (unsigned char) s[7];
+
+ t->x = x;
+}
+
+static inline void taia_pack(unsigned char *s, struct taia *t)
+{
+ unsigned long x;
+
+ tai_pack(s, &t->sec);
+
+ s += 8;
+
+ x = t->atto;
+
+ s[7] = x & 255; x >>= 8;
+ s[6] = x & 255; x >>= 8;
+ s[5] = x & 255; x >>= 8;
+ s[4] = x;
+
+ x = t->nano;
+
+ s[3] = x & 255; x >>= 8;
+ s[2] = x & 255; x >>= 8;
+ s[1] = x & 255; x >>= 8;
+ s[0] = x;
+}
+
+static inline void taia_unpack(unsigned char *s, struct taia *t)
+{
+ unsigned long x;
+
+ tai_unpack(s, &t->sec);
+
+ s += 8;
+
+ x = (unsigned char) s[4];
+ x <<= 8; x += (unsigned char) s[5];
+ x <<= 8; x += (unsigned char) s[6];
+ x <<= 8; x += (unsigned char) s[7];
+
+ t->atto = x;
+
+ x = (unsigned char) s[0];
+ x <<= 8; x += (unsigned char) s[1];
+ x <<= 8; x += (unsigned char) s[2];
+ x <<= 8; x += (unsigned char) s[3];
+
+ t->nano = x;
+}
+
+#define tai_unix(t, u) ((void) ((t)->x = 4611686018427387914ULL + (uint64_t) (u)))
+
+static inline void taia_now(struct taia *t)
+{
+ struct timeval now;
+
+ gettimeofday(&now, NULL);
+
+ tai_unix(&t->sec, now.tv_sec);
+ t->nano = 1000 * now.tv_usec + 500;
+ t->atto = secrand();
+}
+
+static inline void taia_sub(struct taia *res, const struct taia *u,
+ const struct taia *v)
+{
+ unsigned long unano = u->nano;
+ unsigned long uatto = u->atto;
+
+ res->sec.x = u->sec.x - v->sec.x;
+ res->nano = unano - v->nano;
+ res->atto = uatto - v->atto;
+
+ if (res->atto > uatto) {
+ res->atto += 1000000000UL;
+ --res->nano;
+ }
+
+ if (res->nano > unano) {
+ res->nano += 1000000000UL;
+ --res->sec.x;
+ }
+}
+
+static inline void taia_add(struct taia *res, const struct taia *u,
+ const struct taia *v)
+{
+ res->sec.x = u->sec.x + v->sec.x;
+ res->nano = u->nano + v->nano;
+ res->atto = u->atto + v->atto;
+
+ if (res->atto > 999999999UL) {
+ res->atto -= 1000000000UL;
+ ++res->nano;
+ }
+
+ if (res->nano > 999999999UL) {
+ res->nano -= 1000000000UL;
+ ++res->sec.x;
+ }
+}
+
+static inline int taia_less(const struct taia *t, const struct taia *u)
+{
+ if (t->sec.x < u->sec.x)
+ return 1;
+ if (t->sec.x > u->sec.x)
+ return 0;
+ if (t->nano < u->nano)
+ return 1;
+ if (t->nano > u->nano)
+ return 0;
+ return t->atto < u->atto;
+}
+
+#endif /* TAIA_H */