Skip to content

Commit f4991c2

Browse files
committed
mirage-crypto-ec: move NIST to string instead of bytes
1 parent 0c04144 commit f4991c2

12 files changed

+405
-372
lines changed

ec/mirage_crypto_ec.ml

+293-261
Large diffs are not rendered by default.

ec/native/curve25519_stubs.c

+6-7
Original file line numberDiff line numberDiff line change
@@ -1803,12 +1803,11 @@ static void sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b,
18031803
}
18041804

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

18081807
CAMLprim value mc_x25519_scalar_mult_generic(value out, value scalar, value point)
18091808
{
18101809
CAMLparam3(out, scalar, point);
1811-
x25519_scalar_mult_generic(Bytes_val(out), st_uint8(scalar), st_uint8(point));
1810+
x25519_scalar_mult_generic(Bytes_val(out), _st_uint8(scalar), _st_uint8(point));
18121811
CAMLreturn(Val_unit);
18131812
}
18141813

@@ -1817,7 +1816,7 @@ CAMLprim value mc_25519_scalar_mult_base(value out, value hash)
18171816
CAMLparam2(out, hash);
18181817
ge_p3 A;
18191818
ge_p3_0(&A);
1820-
x25519_ge_scalarmult_base(&A, st_uint8(hash));
1819+
x25519_ge_scalarmult_base(&A, _st_uint8(hash));
18211820
ge_p3_tobytes(Bytes_val(out), &A);
18221821
CAMLreturn(Val_unit);
18231822
}
@@ -1832,7 +1831,7 @@ CAMLprim value mc_25519_reduce_l(value buf)
18321831
CAMLprim value mc_25519_muladd(value out, value a, value b, value c)
18331832
{
18341833
CAMLparam4(out, a, b, c);
1835-
sc_muladd(Bytes_val(out), st_uint8(a), st_uint8(b), st_uint8(c));
1834+
sc_muladd(Bytes_val(out), _st_uint8(a), _st_uint8(b), _st_uint8(c));
18361835
CAMLreturn(Val_unit);
18371836
}
18381837

@@ -1843,12 +1842,12 @@ CAMLprim value mc_25519_double_scalar_mult(value out, value k, value key, value
18431842
ge_p3 B;
18441843
fe_loose t;
18451844
int success = 0;
1846-
success = x25519_ge_frombytes_vartime(&B, st_uint8(key));
1845+
success = x25519_ge_frombytes_vartime(&B, _st_uint8(key));
18471846
fe_neg(&t, &B.X);
18481847
fe_carry(&B.X, &t);
18491848
fe_neg(&t, &B.T);
18501849
fe_carry(&B.T, &t);
1851-
ge_double_scalarmult_vartime(&R, st_uint8(k), &B, st_uint8(c));
1850+
ge_double_scalarmult_vartime(&R, _st_uint8(k), &B, _st_uint8(c));
18521851
x25519_ge_tobytes(Bytes_val(out), &R);
18531852
CAMLreturn(Val_bool(success));
18541853
}
@@ -1858,6 +1857,6 @@ CAMLprim value mc_25519_pub_ok(value key)
18581857
CAMLparam1(key);
18591858
int success = 0;
18601859
ge_p3 B;
1861-
success = x25519_ge_frombytes_vartime(&B, st_uint8(key));
1860+
success = x25519_ge_frombytes_vartime(&B, _st_uint8(key));
18621861
CAMLreturn(Val_bool(success));
18631862
}

ec/native/inversion_template.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ static void inverse(WORD out[LIMBS], WORD g[SAT_LIMBS]) {
5252
return;
5353
}
5454

55-
static void inversion (WORD out[LIMBS], WORD in[LIMBS]) {
55+
static void inversion (WORD out[LIMBS], const WORD in[LIMBS]) {
5656
WORD in_[SAT_LIMBS];
5757
for (int i = 0; i < LIMBS; i++) in_[i] = in[i];
5858
in_[LIMBS] = 0;

ec/native/np224_stubs.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@
2222
CAMLprim value mc_np224_inv(value out, value in)
2323
{
2424
CAMLparam2(out, in);
25-
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
25+
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
2626
CAMLreturn(Val_unit);
2727
}
2828

2929
CAMLprim value mc_np224_mul(value out, value a, value b)
3030
{
3131
CAMLparam3(out, a, b);
32-
fiat_np224_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
32+
fiat_np224_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
3333
CAMLreturn(Val_unit);
3434
}
3535

3636
CAMLprim value mc_np224_add(value out, value a, value b)
3737
{
3838
CAMLparam3(out, a, b);
39-
fiat_np224_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
39+
fiat_np224_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
4040
CAMLreturn(Val_unit);
4141
}
4242

@@ -50,27 +50,27 @@ CAMLprim value mc_np224_one(value out)
5050
CAMLprim value mc_np224_from_bytes(value out, value in)
5151
{
5252
CAMLparam2(out, in);
53-
fiat_np224_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
53+
fiat_np224_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
5454
CAMLreturn(Val_unit);
5555
}
5656

5757
CAMLprim value mc_np224_to_bytes(value out, value in)
5858
{
5959
CAMLparam2(out, in);
60-
fiat_np224_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
60+
fiat_np224_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
6161
CAMLreturn(Val_unit);
6262
}
6363

6464
CAMLprim value mc_np224_from_montgomery(value out, value in)
6565
{
6666
CAMLparam2(out, in);
67-
fiat_np224_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
67+
fiat_np224_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
6868
CAMLreturn(Val_unit);
6969
}
7070

7171
CAMLprim value mc_np224_to_montgomery(value out, value in)
7272
{
7373
CAMLparam2(out, in);
74-
fiat_np224_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
74+
fiat_np224_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
7575
CAMLreturn(Val_unit);
7676
}

ec/native/np256_stubs.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@
2222
CAMLprim value mc_np256_inv(value out, value in)
2323
{
2424
CAMLparam2(out, in);
25-
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
25+
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
2626
CAMLreturn(Val_unit);
2727
}
2828

2929
CAMLprim value mc_np256_mul(value out, value a, value b)
3030
{
3131
CAMLparam3(out, a, b);
32-
fiat_np256_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
32+
fiat_np256_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
3333
CAMLreturn(Val_unit);
3434
}
3535

3636
CAMLprim value mc_np256_add(value out, value a, value b)
3737
{
3838
CAMLparam3(out, a, b);
39-
fiat_np256_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
39+
fiat_np256_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
4040
CAMLreturn(Val_unit);
4141
}
4242

@@ -50,27 +50,27 @@ CAMLprim value mc_np256_one(value out)
5050
CAMLprim value mc_np256_from_bytes(value out, value in)
5151
{
5252
CAMLparam2(out, in);
53-
fiat_np256_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
53+
fiat_np256_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
5454
CAMLreturn(Val_unit);
5555
}
5656

5757
CAMLprim value mc_np256_to_bytes(value out, value in)
5858
{
5959
CAMLparam2(out, in);
60-
fiat_np256_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
60+
fiat_np256_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
6161
CAMLreturn(Val_unit);
6262
}
6363

6464
CAMLprim value mc_np256_from_montgomery(value out, value in)
6565
{
6666
CAMLparam2(out, in);
67-
fiat_np256_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
67+
fiat_np256_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
6868
CAMLreturn(Val_unit);
6969
}
7070

7171
CAMLprim value mc_np256_to_montgomery(value out, value in)
7272
{
7373
CAMLparam2(out, in);
74-
fiat_np256_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
74+
fiat_np256_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
7575
CAMLreturn(Val_unit);
7676
}

ec/native/np384_stubs.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@
2222
CAMLprim value mc_np384_inv(value out, value in)
2323
{
2424
CAMLparam2(out, in);
25-
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
25+
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
2626
CAMLreturn(Val_unit);
2727
}
2828

2929
CAMLprim value mc_np384_mul(value out, value a, value b)
3030
{
3131
CAMLparam3(out, a, b);
32-
fiat_np384_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
32+
fiat_np384_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
3333
CAMLreturn(Val_unit);
3434
}
3535

3636
CAMLprim value mc_np384_add(value out, value a, value b)
3737
{
3838
CAMLparam3(out, a, b);
39-
fiat_np384_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
39+
fiat_np384_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
4040
CAMLreturn(Val_unit);
4141
}
4242

@@ -50,7 +50,7 @@ CAMLprim value mc_np384_one(value out)
5050
CAMLprim value mc_np384_from_bytes(value out, value in)
5151
{
5252
CAMLparam2(out, in);
53-
fiat_np384_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
53+
fiat_np384_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
5454
CAMLreturn(Val_unit);
5555
}
5656

@@ -64,13 +64,13 @@ CAMLprim value mc_np384_to_bytes(value out, value in)
6464
CAMLprim value mc_np384_from_montgomery(value out, value in)
6565
{
6666
CAMLparam2(out, in);
67-
fiat_np384_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
67+
fiat_np384_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
6868
CAMLreturn(Val_unit);
6969
}
7070

7171
CAMLprim value mc_np384_to_montgomery(value out, value in)
7272
{
7373
CAMLparam2(out, in);
74-
fiat_np384_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
74+
fiat_np384_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
7575
CAMLreturn(Val_unit);
7676
}

ec/native/np521_stubs.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@
2222
CAMLprim value mc_np521_inv(value out, value in)
2323
{
2424
CAMLparam2(out, in);
25-
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
25+
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
2626
CAMLreturn(Val_unit);
2727
}
2828

2929
CAMLprim value mc_np521_mul(value out, value a, value b)
3030
{
3131
CAMLparam3(out, a, b);
32-
fiat_np521_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
32+
fiat_np521_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
3333
CAMLreturn(Val_unit);
3434
}
3535

3636
CAMLprim value mc_np521_add(value out, value a, value b)
3737
{
3838
CAMLparam3(out, a, b);
39-
fiat_np521_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
39+
fiat_np521_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
4040
CAMLreturn(Val_unit);
4141
}
4242

@@ -50,28 +50,28 @@ CAMLprim value mc_np521_one(value out)
5050
CAMLprim value mc_np521_from_bytes(value out, value in)
5151
{
5252
CAMLparam2(out, in);
53-
fiat_np521_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
53+
fiat_np521_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
5454
CAMLreturn(Val_unit);
5555
}
5656

5757
CAMLprim value mc_np521_to_bytes(value out, value in)
5858
{
5959
CAMLparam2(out, in);
60-
fiat_np521_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
60+
fiat_np521_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
6161
CAMLreturn(Val_unit);
6262
}
6363

6464
CAMLprim value mc_np521_from_montgomery(value out, value in)
6565
{
6666
CAMLparam2(out, in);
67-
fiat_np521_from_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
67+
fiat_np521_from_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
6868
CAMLreturn(Val_unit);
6969
}
7070

7171
CAMLprim value mc_np521_to_montgomery(value out, value in)
7272
{
7373
CAMLparam2(out, in);
74-
fiat_np521_to_montgomery((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
74+
fiat_np521_to_montgomery((WORD*)Bytes_val(out), (const WORD*)String_val(in));
7575
CAMLreturn(Val_unit);
7676
}
7777

ec/native/p224_stubs.c

+19-19
Original file line numberDiff line numberDiff line change
@@ -23,42 +23,42 @@
2323
CAMLprim value mc_p224_sub(value out, value a, value b)
2424
{
2525
CAMLparam3(out, a, b);
26-
fiat_p224_sub((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
26+
fiat_p224_sub((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
2727
CAMLreturn(Val_unit);
2828
}
2929

3030
CAMLprim value mc_p224_add(value out, value a, value b)
3131
{
3232
CAMLparam3(out, a, b);
33-
fiat_p224_add((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
33+
fiat_p224_add((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
3434
CAMLreturn(Val_unit);
3535
}
3636

3737
CAMLprim value mc_p224_mul(value out, value a, value b)
3838
{
3939
CAMLparam3(out, a, b);
40-
fiat_p224_mul((WORD*)Bytes_val(out), (WORD*)Bytes_val(a), (WORD*)Bytes_val(b));
40+
fiat_p224_mul((WORD*)Bytes_val(out), (const WORD*)String_val(a), (const WORD*)String_val(b));
4141
CAMLreturn(Val_unit);
4242
}
4343

4444
CAMLprim value mc_p224_from_bytes(value out, value in)
4545
{
4646
CAMLparam2(out, in);
47-
fiat_p224_from_bytes((WORD*)Bytes_val(out), Bytes_val(in));
47+
fiat_p224_from_bytes((WORD*)Bytes_val(out), _st_uint8(in));
4848
CAMLreturn(Val_unit);
4949
}
5050

5151
CAMLprim value mc_p224_to_bytes(value out, value in)
5252
{
5353
CAMLparam2(out, in);
54-
fiat_p224_to_bytes(Bytes_val(out), (WORD*)Bytes_val(in));
54+
fiat_p224_to_bytes(Bytes_val(out), (const WORD*)String_val(in));
5555
CAMLreturn(Val_unit);
5656
}
5757

5858
CAMLprim value mc_p224_sqr(value out, value in)
5959
{
6060
CAMLparam2(out, in);
61-
fiat_p224_square((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
61+
fiat_p224_square((WORD*)Bytes_val(out), (const WORD*)String_val(in));
6262
CAMLreturn(Val_unit);
6363
}
6464

@@ -81,7 +81,7 @@ CAMLprim value mc_p224_to_montgomery(value x)
8181
CAMLprim value mc_p224_nz(value x)
8282
{
8383
CAMLparam1(x);
84-
CAMLreturn(Val_bool(fe_nz((WORD*)Bytes_val(x))));
84+
CAMLreturn(Val_bool(fe_nz((const WORD*)String_val(x))));
8585
}
8686

8787
CAMLprim value mc_p224_set_one(value x)
@@ -94,7 +94,7 @@ CAMLprim value mc_p224_set_one(value x)
9494
CAMLprim value mc_p224_inv(value out, value in)
9595
{
9696
CAMLparam2(out, in);
97-
inversion((WORD*)Bytes_val(out), (WORD*)Bytes_val(in));
97+
inversion((WORD*)Bytes_val(out), (const WORD*)String_val(in));
9898
CAMLreturn(Val_unit);
9999
}
100100

@@ -105,9 +105,9 @@ CAMLprim value mc_p224_point_double(value out, value in)
105105
(WORD*)Bytes_val(Field(out, 0)),
106106
(WORD*)Bytes_val(Field(out, 1)),
107107
(WORD*)Bytes_val(Field(out, 2)),
108-
(WORD*)Bytes_val(Field(in, 0)),
109-
(WORD*)Bytes_val(Field(in, 1)),
110-
(WORD*)Bytes_val(Field(in, 2))
108+
(const WORD*)String_val(Field(in, 0)),
109+
(const WORD*)String_val(Field(in, 1)),
110+
(const WORD*)String_val(Field(in, 2))
111111
);
112112
CAMLreturn(Val_unit);
113113
}
@@ -119,13 +119,13 @@ CAMLprim value mc_p224_point_add(value out, value p, value q)
119119
(WORD*)Bytes_val(Field(out, 0)),
120120
(WORD*)Bytes_val(Field(out, 1)),
121121
(WORD*)Bytes_val(Field(out, 2)),
122-
(WORD*)Bytes_val(Field(p, 0)),
123-
(WORD*)Bytes_val(Field(p, 1)),
124-
(WORD*)Bytes_val(Field(p, 2)),
122+
(const WORD*)String_val(Field(p, 0)),
123+
(const WORD*)String_val(Field(p, 1)),
124+
(const WORD*)String_val(Field(p, 2)),
125125
0,
126-
(WORD*)Bytes_val(Field(q, 0)),
127-
(WORD*)Bytes_val(Field(q, 1)),
128-
(WORD*)Bytes_val(Field(q, 2))
126+
(const WORD*)String_val(Field(q, 0)),
127+
(const WORD*)String_val(Field(q, 1)),
128+
(const WORD*)String_val(Field(q, 2))
129129
);
130130
CAMLreturn(Val_unit);
131131
}
@@ -136,8 +136,8 @@ CAMLprim value mc_p224_select(value out, value bit, value t, value f)
136136
fe_cmovznz(
137137
(WORD*)Bytes_val(out),
138138
Bool_val(bit),
139-
(WORD*)Bytes_val(f),
140-
(WORD*)Bytes_val(t)
139+
(const WORD*)String_val(f),
140+
(const WORD*)String_val(t)
141141
);
142142
CAMLreturn(Val_unit);
143143
}

0 commit comments

Comments
 (0)