所以我正在研究DSA处理器,它必须乘以大的有符号值来检查它们是否适合曲线。我正在使用的函数在python中使用相同的值,但是当在Verilog中传递时,我得到的结果不正确。我相信它必须处理我签署的y& amp; X。在测试期间,将x或y乘以其自身给出的值不正确。
module on_curve (
input wire signed [511:0] point
);
reg signed [255:0] x, y;
always@*
begin
x = point[511:256];
y = point[255:0];
if ((y * y - x * x * x - 0 * x - 7) % 256'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F == 0) begin
$write("This value is on the curve");
end
if ((y * y - x * x * x - 0 * x - 7) % 256'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F !== 0) begin
$write("This value is not on the curve");
end
end
endmodule
我用于“点”的值是
512'h79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8;
这是DSA的生成点,因此它应该落在曲线上。