fixed

Pure Haskell large fixed-width integers.
git clone git://git.ppad.tech/fixed.git
Log | Files | Refs | README | LICENSE

commit 50dbff1a8e2684202f8efd253c85d8a6d7db9804
parent 2692cf562ef07f39a604b238c7252442e500f9cc
Author: Jared Tobin <jared@jtobin.io>
Date:   Sun, 30 Nov 2025 10:59:27 +0400

meta: remove old copy of generate_inv

Diffstat:
Dgenerate_inv.sh | 51---------------------------------------------------
1 file changed, 0 insertions(+), 51 deletions(-)

diff --git a/generate_inv.sh b/generate_inv.sh @@ -1,51 +0,0 @@ -#!/usr/bin/env bash - -# generates a constant-time haskell function for performing modular -# inversion with montgomery arithmetic on a secp256k1-derived field. -# -# fermat inversion is used. one proceeds through the (fixed, known) -# bit-string of the exponent in MSB order, montgomery-squaring an -# accumulator each time, and montgomery-multiplying on every '1' bit. -# this script generates a function consisting of this loop, unrolled. -# -# since the square-and-multiply schedule is fixed, then given -# constant-time 'sqr#' and 'mul#", 'inv#' is also constant-time by -# construction. - -# for fermat inversion, we raise an argument to e.g. the secp256k1 field -# prime - 2. i.e.: -# -# a^-1 = a ^ p - 2 mod p -# -# or to the secp256k1 scalar group order - 2: -# -# a^-1 = a ^ q - 2 mod q - -# secp256k1 field prime - 2 -# exponent="1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111111110000101101" - -# secp256k1 scalar group order - 2 -exponent="1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111010111010101011101101110011100110101011110100100010100000001110111011111111010010010111101000110011010000001101100100000101000001" - -echo "-- generated by etc/generate_inv.sh" -echo "inv#" -echo " :: (# Word#, Word#, Word#, Word# #)" -echo " -> (# Word#, Word#, Word#, Word# #)" -echo "inv# a =" -echo " let !t0 = (# 0x1000003D1##, 0##, 0##, 0## #) -- montgomery 'one'" - -label=1 - -for ((i = 0; i < ${#exponent}; i++)); do - echo " !t""$label"" = sqr# t""$((label-1))" - if [[ "${exponent:i:1}" == "1" ]]; then - label=$((label+1)) - echo " !t""$label"" = mul# a t""$((label-1))" - fi - label=$((label+1)) -done - -echo " !r = t""$((label-1))" -echo " in r" -echo '{-# INLINE inv# #-}' -