Verilog签名大值乘法

时间:2017-02-14 05:27:07

标签: cryptography verilog fpga

所以我正在研究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的生成点,因此它应该落在曲线上。

0 个答案:

没有答案