Copyright © 2001 - 2002 SILC Project SILC Project Website | SILC Toolkit Reference Manual Index

SILC Toolkit Reference Manual SILC Core Library SILC Authentication Interface SILC Message Interface SILC Channel Interface SILC Command Interface SILC Notify Interface SILC Status Types SILC Modes SILC ID Interface SILC ID Cache Interface SILC Argument Interface SILC Attributes Interface Packet Protocol Interface SILC Math Library SILC MP Interface SILC Math Interface SILC SFTP Library SILC SFTP Interface SFTP Filesystems Interface SILC Utility Library Basic SILC Types SILC Buffer Interface SILC Buffer Format Interface SILC Hash Table Interface SILC Logging Interface SILC Memory Interface SILC Mutex Interface SILC Thread Interface SILC Network Interface SILC Schedule Interface SILC Socket Interface SILC Protocol Interface SILC Config Interface SILC File Util Interface SILC String Util Interface SILC Util Interface SILC List Interface SILC Dynamic List Interface SILC VCard Interface SILC Application Utilities SILC Key Exchange Library SILC SKE Interface SKE Status Types SKE Diffie Hellman Groups SKE Payloads SILC Client Library Using SILC Client Library Tutorial Arguments for command_reply Client Operation Arguments for notify Client Operation Client Library Interface Reference SILC Crypto Library Introduction to SILC RNG SILC RNG Interface SILC Cipher API SILC PKCS API SILC Hash Interface SILC HMAC Interface Resource Links SILC Project Website SILC Protocol Documentation SILC White Paper SILC FAQ
Function silc_mp_modinv SYNOPSIS
        void silc_mp_modinv(SilcMPInt *inv, SilcMPInt *a, SilcMPInt *n);
DESCRIPTION
        Find multiplicative inverse using Euclid's extended algorithm.
        Computes inverse such that a * inv mod n = 1, where 0 < a < n.
        Algorithm goes like this:

        g(0) = n    v(0) = 0
        g(1) = a    v(1) = 1

        y = g(i-1) / g(i)
        g(i+1) = g(i-1) - y * g(i) = g(i)-1 mod g(i)
        v(i+1) = v(i-1) - y * v(i)

        do until g(i) = 0, then inverse = v(i-1). If inverse is negative then n,
        is added to inverse making it positive again. (Sometimes the algorithm
        has a variable u defined too and it behaves just like v, except that
        initalize values are swapped (i.e. u(0) = 1, u(1) = 0). However, u is
        not needed by the algorithm so it does not have to be included.)
SILC MP Interface SilcMPInt silc_mp_init silc_mp_uninit silc_mp_size silc_mp_sizeinbase silc_mp_set silc_mp_set_ui silc_mp_set_si silc_mp_set_str silc_mp_get_ui silc_mp_get_str silc_mp_add silc_mp_add_ui silc_mp_sub silc_mp_sub_ui silc_mp_mul silc_mp_mul_ui silc_mp_mul_2exp silc_mp_sqrt silc_mp_div silc_mp_div_ui silc_mp_div_qr silc_mp_div_2exp silc_mp_div_2exp_qr silc_mp_mod silc_mp_mod_ui silc_mp_mod_2exp silc_mp_pow silc_mp_pow_ui silc_mp_pow_mod silc_mp_pow_mod_ui silc_mp_modinv silc_mp_gcd silc_mp_gcdext silc_mp_cmp silc_mp_cmp_si silc_mp_cmp_ui silc_mp_mp2bin silc_mp_mp2bin_noalloc silc_mp_bin2mp silc_mp_abs silc_mp_neg silc_mp_and silc_mp_or silc_mp_xor

Copyright © 2001 - 2002 SILC Project SILC Project Website | SILC Toolkit Reference Manual Index