Skip to content

Commit

Permalink
mirage-crypto-ec: move NIST to string instead of bytes
Browse files Browse the repository at this point in the history
  • Loading branch information
hannesm committed Feb 10, 2024
1 parent 0c04144 commit f4991c2
Show file tree
Hide file tree
Showing 12 changed files with 405 additions and 372 deletions.
554 changes: 293 additions & 261 deletions ec/mirage_crypto_ec.ml

Large diffs are not rendered by default.

13 changes: 6 additions & 7 deletions ec/native/curve25519_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1803,12 +1803,11 @@ static void sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b,
}

#include <caml/memory.h>
#define st_uint8(v) ((const uint8_t*) (String_val(v)))

CAMLprim value mc_x25519_scalar_mult_generic(value out, value scalar, value point)
{
CAMLparam3(out, scalar, point);
x25519_scalar_mult_generic(Bytes_val(out), st_uint8(scalar), st_uint8(point));
x25519_scalar_mult_generic(Bytes_val(out), _st_uint8(scalar), _st_uint8(point));
CAMLreturn(Val_unit);
}

Expand All @@ -1817,7 +1816,7 @@ CAMLprim value mc_25519_scalar_mult_base(value out, value hash)
CAMLparam2(out, hash);
ge_p3 A;
ge_p3_0(&A);
x25519_ge_scalarmult_base(&A, st_uint8(hash));
x25519_ge_scalarmult_base(&A, _st_uint8(hash));
ge_p3_tobytes(Bytes_val(out), &A);
CAMLreturn(Val_unit);
}
Expand All @@ -1832,7 +1831,7 @@ CAMLprim value mc_25519_reduce_l(value buf)
CAMLprim value mc_25519_muladd(value out, value a, value b, value c)
{
CAMLparam4(out, a, b, c);
sc_muladd(Bytes_val(out), st_uint8(a), st_uint8(b), st_uint8(c));
sc_muladd(Bytes_val(out), _st_uint8(a), _st_uint8(b), _st_uint8(c));
CAMLreturn(Val_unit);
}

Expand All @@ -1843,12 +1842,12 @@ CAMLprim value mc_25519_double_scalar_mult(value out, value k, value key, value
ge_p3 B;
fe_loose t;
int success = 0;
success = x25519_ge_frombytes_vartime(&B, st_uint8(key));
success = x25519_ge_frombytes_vartime(&B, _st_uint8(key));
fe_neg(&t, &B.X);
fe_carry(&B.X, &t);
fe_neg(&t, &B.T);
fe_carry(&B.T, &t);
ge_double_scalarmult_vartime(&R, st_uint8(k), &B, st_uint8(c));
ge_double_scalarmult_vartime(&R, _st_uint8(k), &B, _st_uint8(c));
x25519_ge_tobytes(Bytes_val(out), &R);
CAMLreturn(Val_bool(success));
}
Expand All @@ -1858,6 +1857,6 @@ CAMLprim value mc_25519_pub_ok(value key)
CAMLparam1(key);
int success = 0;
ge_p3 B;
success = x25519_ge_frombytes_vartime(&B, st_uint8(key));
success = x25519_ge_frombytes_vartime(&B, _st_uint8(key));
CAMLreturn(Val_bool(success));
}
2 changes: 1 addition & 1 deletion ec/native/inversion_template.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ static void inverse(WORD out[LIMBS], WORD g[SAT_LIMBS]) {
return;
}

static void inversion (WORD out[LIMBS], WORD in[LIMBS]) {
static void inversion (WORD out[LIMBS], const WORD in[LIMBS]) {
WORD in_[SAT_LIMBS];
for (int i = 0; i < LIMBS; i++) in_[i] = in[i];
in_[LIMBS] = 0;
Expand Down
14 changes: 7 additions & 7 deletions ec/native/np224_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@
CAMLprim value mc_np224_inv(value out, value in)
{
CAMLparam2(out, in);
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np224_mul(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np224_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np224_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np224_add(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np224_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np224_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

Expand All @@ -50,27 +50,27 @@ CAMLprim value mc_np224_one(value out)
CAMLprim value mc_np224_from_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_np224_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
fiat_np224_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np224_to_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_np224_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np224_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np224_from_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np224_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np224_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np224_to_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np224_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np224_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}
14 changes: 7 additions & 7 deletions ec/native/np256_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@
CAMLprim value mc_np256_inv(value out, value in)
{
CAMLparam2(out, in);
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np256_mul(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np256_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np256_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np256_add(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np256_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np256_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

Expand All @@ -50,27 +50,27 @@ CAMLprim value mc_np256_one(value out)
CAMLprim value mc_np256_from_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_np256_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
fiat_np256_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np256_to_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_np256_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np256_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np256_from_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np256_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np256_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np256_to_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np256_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np256_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}
12 changes: 6 additions & 6 deletions ec/native/np384_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@
CAMLprim value mc_np384_inv(value out, value in)
{
CAMLparam2(out, in);
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np384_mul(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np384_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np384_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np384_add(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np384_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np384_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

Expand All @@ -50,7 +50,7 @@ CAMLprim value mc_np384_one(value out)
CAMLprim value mc_np384_from_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_np384_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
fiat_np384_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
CAMLreturn(Val_unit);
}

Expand All @@ -64,13 +64,13 @@ CAMLprim value mc_np384_to_bytes(value out, value in)
CAMLprim value mc_np384_from_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np384_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np384_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np384_to_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np384_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np384_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}
14 changes: 7 additions & 7 deletions ec/native/np521_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@
CAMLprim value mc_np521_inv(value out, value in)
{
CAMLparam2(out, in);
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np521_mul(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np521_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np521_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np521_add(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_np521_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_np521_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

Expand All @@ -50,28 +50,28 @@ CAMLprim value mc_np521_one(value out)
CAMLprim value mc_np521_from_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_np521_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
fiat_np521_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np521_to_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_np521_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np521_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np521_from_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np521_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np521_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_np521_to_montgomery(value out, value in)
{
CAMLparam2(out, in);
fiat_np521_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_np521_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

38 changes: 19 additions & 19 deletions ec/native/p224_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,42 +23,42 @@
CAMLprim value mc_p224_sub(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_p224_sub((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_p224_sub((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

CAMLprim value mc_p224_add(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_p224_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_p224_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

CAMLprim value mc_p224_mul(value out, value a, value b)
{
CAMLparam3(out, a, b);
fiat_p224_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
fiat_p224_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
CAMLreturn(Val_unit);
}

CAMLprim value mc_p224_from_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_p224_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
fiat_p224_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_p224_to_bytes(value out, value in)
{
CAMLparam2(out, in);
fiat_p224_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
fiat_p224_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

CAMLprim value mc_p224_sqr(value out, value in)
{
CAMLparam2(out, in);
fiat_p224_square((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
fiat_p224_square((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

Expand All @@ -81,7 +81,7 @@ CAMLprim value mc_p224_to_montgomery(value x)
CAMLprim value mc_p224_nz(value x)
{
CAMLparam1(x);
CAMLreturn(Val_bool(fe_nz((WORD*)Bytes_val(x))));
CAMLreturn(Val_bool(fe_nz((const WORD*)String_val(x))));
}

CAMLprim value mc_p224_set_one(value x)
Expand All @@ -94,7 +94,7 @@ CAMLprim value mc_p224_set_one(value x)
CAMLprim value mc_p224_inv(value out, value in)
{
CAMLparam2(out, in);
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
CAMLreturn(Val_unit);
}

Expand All @@ -105,9 +105,9 @@ CAMLprim value mc_p224_point_double(value out, value in)
(WORD*)Bytes_val(Field(out, 0)),
(WORD*)Bytes_val(Field(out, 1)),
(WORD*)Bytes_val(Field(out, 2)),
(WORD*)Bytes_val(Field(in, 0)),
(WORD*)Bytes_val(Field(in, 1)),
(WORD*)Bytes_val(Field(in, 2))
(const WORD*)String_val(Field(in, 0)),
(const WORD*)String_val(Field(in, 1)),
(const WORD*)String_val(Field(in, 2))
);
CAMLreturn(Val_unit);
}
Expand All @@ -119,13 +119,13 @@ CAMLprim value mc_p224_point_add(value out, value p, value q)
(WORD*)Bytes_val(Field(out, 0)),
(WORD*)Bytes_val(Field(out, 1)),
(WORD*)Bytes_val(Field(out, 2)),
(WORD*)Bytes_val(Field(p, 0)),
(WORD*)Bytes_val(Field(p, 1)),
(WORD*)Bytes_val(Field(p, 2)),
(const WORD*)String_val(Field(p, 0)),
(const WORD*)String_val(Field(p, 1)),
(const WORD*)String_val(Field(p, 2)),
0,
(WORD*)Bytes_val(Field(q, 0)),
(WORD*)Bytes_val(Field(q, 1)),
(WORD*)Bytes_val(Field(q, 2))
(const WORD*)String_val(Field(q, 0)),
(const WORD*)String_val(Field(q, 1)),
(const WORD*)String_val(Field(q, 2))
);
CAMLreturn(Val_unit);
}
Expand All @@ -136,8 +136,8 @@ CAMLprim value mc_p224_select(value out, value bit, value t, value f)
fe_cmovznz(
(WORD*)Bytes_val(out),
Bool_val(bit),
(WORD*)Bytes_val(f),
(WORD*)Bytes_val(t)
(const WORD*)String_val(f),
(const WORD*)String_val(t)
);
CAMLreturn(Val_unit);
}
Loading

0 comments on commit f4991c2

Please sign in to comment.