Changeset View
Changeset View
Standalone View
Standalone View
sys/opencrypto/gfmult.h
Show First 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | struct gf128 { | ||||
uint64_t v[2]; | uint64_t v[2]; | ||||
}; | }; | ||||
/* Note that we don't bit reverse in MAKE_GF128. */ | /* Note that we don't bit reverse in MAKE_GF128. */ | ||||
#define MAKE_GF128(a, b) ((struct gf128){.v = { (a), (b) } }) | #define MAKE_GF128(a, b) ((struct gf128){.v = { (a), (b) } }) | ||||
#define GF128_EQ(a, b) ((((a).v[0] ^ (b).v[0]) | \ | #define GF128_EQ(a, b) ((((a).v[0] ^ (b).v[0]) | \ | ||||
((a).v[1] ^ (b).v[1])) == 0) | ((a).v[1] ^ (b).v[1])) == 0) | ||||
static inline struct gf128 | static inline struct gf128 __pure | ||||
gf128_read(const uint8_t *buf) | gf128_read(const uint8_t *buf) | ||||
{ | { | ||||
struct gf128 r; | struct gf128 r; | ||||
r.v[0] = be64dec(buf); | r.v[0] = be64dec(buf); | ||||
buf += sizeof(uint64_t); | buf += sizeof(uint64_t); | ||||
r.v[1] = be64dec(buf); | r.v[1] = be64dec(buf); | ||||
return r; | return r; | ||||
} | } | ||||
static inline void | static inline void | ||||
gf128_write(struct gf128 v, uint8_t *buf) | gf128_write(struct gf128 v, uint8_t *buf) | ||||
{ | { | ||||
uint64_t tmp; | uint64_t tmp; | ||||
be64enc(buf, v.v[0]); | be64enc(buf, v.v[0]); | ||||
buf += sizeof tmp; | buf += sizeof tmp; | ||||
be64enc(buf, v.v[1]); | be64enc(buf, v.v[1]); | ||||
} | } | ||||
static inline struct gf128 __pure /* XXX - __pure2 instead */ | static inline struct gf128 __pure2 | ||||
gf128_add(struct gf128 a, struct gf128 b) | gf128_add(struct gf128 a, struct gf128 b) | ||||
{ | { | ||||
a.v[0] ^= b.v[0]; | a.v[0] ^= b.v[0]; | ||||
a.v[1] ^= b.v[1]; | a.v[1] ^= b.v[1]; | ||||
return a; | return a; | ||||
} | } | ||||
Show All 9 Lines |