Skip to content

Commit eaca862

Browse files
authored
std.crypto.pcurves fixes (#19245)
Fixes compilation errors in functions that are syntaxic sugar to operate on serialized scalars. Also make it explicit that square roots in fields whose size is not congruent to 3 modulo 4 are not an error, they are just not implemented yet. Reported by @vitalonodo - Thanks!
1 parent 40e6424 commit eaca862

File tree

5 files changed

+8
-8
lines changed

5 files changed

+8
-8
lines changed

lib/std/crypto/pcurves/common.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ pub fn Field(comptime params: FieldParams) type {
277277

278278
// x=x2^((field_order+1)/4) w/ field order=3 (mod 4).
279279
fn uncheckedSqrt(x2: Fe) Fe {
280-
comptime debug.assert(field_order % 4 == 3);
280+
if (field_order % 4 != 3) @compileError("unimplemented");
281281
if (field_order == 115792089210356248762697446949407573530086143415290314195533631308867097853951) {
282282
const t11 = x2.mul(x2.sq());
283283
const t1111 = t11.mul(t11.sqn(2));

lib/std/crypto/pcurves/p256/scalar.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub fn reduce48(s: [48]u8, endian: std.builtin.Endian) CompressedScalar {
3939

4040
/// Reduce a 64-bytes scalar to the field size.
4141
pub fn reduce64(s: [64]u8, endian: std.builtin.Endian) CompressedScalar {
42-
return ScalarDouble.fromBytes64(s, endian).toBytes(endian);
42+
return Scalar.fromBytes64(s, endian).toBytes(endian);
4343
}
4444

4545
/// Return a*b (mod L)
@@ -160,7 +160,7 @@ pub const Scalar = struct {
160160
}
161161

162162
/// Return true if n is a quadratic residue mod L.
163-
pub fn isSquare(n: Scalar) Scalar {
163+
pub fn isSquare(n: Scalar) bool {
164164
return n.fe.isSquare();
165165
}
166166

lib/std/crypto/pcurves/p384/scalar.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn rejectNonCanonical(s: CompressedScalar, endian: std.builtin.Endian) NonCa
3434

3535
/// Reduce a 64-bytes scalar to the field size.
3636
pub fn reduce64(s: [64]u8, endian: std.builtin.Endian) CompressedScalar {
37-
return ScalarDouble.fromBytes64(s, endian).toBytes(endian);
37+
return Scalar.fromBytes64(s, endian).toBytes(endian);
3838
}
3939

4040
/// Return a*b (mod L)
@@ -149,7 +149,7 @@ pub const Scalar = struct {
149149
}
150150

151151
/// Return true if n is a quadratic residue mod L.
152-
pub fn isSquare(n: Scalar) Scalar {
152+
pub fn isSquare(n: Scalar) bool {
153153
return n.fe.isSquare();
154154
}
155155

lib/std/crypto/pcurves/secp256k1.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ pub const Secp256k1 = struct {
221221
var t0 = p.x.mul(q.x);
222222
var t1 = p.y.mul(q.y);
223223
var t3 = q.x.add(q.y);
224-
var t4 = p.x.add(p.y1);
224+
var t4 = p.x.add(p.y);
225225
t3 = t3.mul(t4);
226226
t4 = t0.add(t1);
227227
t3 = t3.sub(t4);

lib/std/crypto/pcurves/secp256k1/scalar.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub fn reduce48(s: [48]u8, endian: std.builtin.Endian) CompressedScalar {
3939

4040
/// Reduce a 64-bytes scalar to the field size.
4141
pub fn reduce64(s: [64]u8, endian: std.builtin.Endian) CompressedScalar {
42-
return ScalarDouble.fromBytes64(s, endian).toBytes(endian);
42+
return Scalar.fromBytes64(s, endian).toBytes(endian);
4343
}
4444

4545
/// Return a*b (mod L)
@@ -160,7 +160,7 @@ pub const Scalar = struct {
160160
}
161161

162162
/// Return true if n is a quadratic residue mod L.
163-
pub fn isSquare(n: Scalar) Scalar {
163+
pub fn isSquare(n: Scalar) bool {
164164
return n.fe.isSquare();
165165
}
166166

0 commit comments

Comments
 (0)