Add GMUL ASM

This commit is contained in:
Zhi Guan
2024-03-31 16:54:24 +08:00
parent 6de0e0229b
commit 6b36c51cdf
5 changed files with 167 additions and 147 deletions

View File

@@ -22,6 +22,19 @@
#include <gmssl/endian.h>
#include <gmssl/error.h>
static uint64_t reverse_bits(uint64_t a)
{
uint64_t r = 0;
int i;
for (i = 0; i < 63; i++) {
r |= a & 1;
r <<= 1;
a >>= 1;
}
r |= a & 1;
return r;
}
gf128_t gf128_zero(void)
{
@@ -50,6 +63,10 @@ int gf128_equ_hex(gf128_t a, const char *s)
void gf128_print_bits(gf128_t a)
{
int i;
a.hi = reverse_bits(a.hi);
a.lo = reverse_bits(a.lo);
for (i = 0; i < 64; i++) {
printf("%d", (int)(a.hi % 2));
a.hi >>= 1;
@@ -75,20 +92,6 @@ int gf128_print(FILE *fp, int fmt, int ind, const char *label, gf128_t a)
return 1;
}
static uint64_t reverse_bits(uint64_t a)
{
uint64_t r = 0;
int i;
for (i = 0; i < 63; i++) {
r |= a & 1;
r <<= 1;
a >>= 1;
}
r |= a & 1;
return r;
}
gf128_t gf128_from_bytes(const uint8_t p[16])
{
gf128_t r;
@@ -117,6 +120,7 @@ gf128_t gf128_add(gf128_t a, gf128_t b)
return r;
}
#ifndef ENABLE_GMUL_ARMV8
gf128_t gf128_mul(gf128_t a, gf128_t b)
{
gf128_t r = {0, 0};
@@ -159,6 +163,18 @@ gf128_t gf128_mul(gf128_t a, gf128_t b)
return r;
}
#else
extern void gmul(uint64_t r[2], const uint64_t a[2], const uint64_t b[2]);
gf128_t gf128_mul(gf128_t a, gf128_t b)
{
gf128_t r;
gmul(&r, &a, &b);
return r;
}
#endif
gf128_t gf128_mul2(gf128_t a)
{