Class ScalarOps


  • public class ScalarOps
    extends Object
    Class for reducing a huge integer modulo the group order q and doing a combined multiply plus add plus reduce operation.

    $q = 2^{252} + 27742317777372353535851937790883648493$.

    Reviewed/commented by Bloody Rookie ([email protected])

    • Constructor Detail

      • ScalarOps

        public ScalarOps()
    • Method Detail

      • reduce

        public byte[] reduce​(byte[] s)
        Reduction modulo the group order $q$.

        Input: $s[0]+256*s[1]+\dots+256^{63}*s[63] = s$

        Output: $s[0]+256*s[1]+\dots+256^{31}*s[31] = s \bmod q$ where $q = 2^{252} + 27742317777372353535851937790883648493$.

        Parameters:
        s - byte array
        Returns:
        reduced byte array using a huge integer modulo the group order q
      • multiplyAndAdd

        public byte[] multiplyAndAdd​(byte[] a,
                                     byte[] b,
                                     byte[] c)
        $(ab+c) \bmod q$

        Input:

        • $a[0]+256*a[1]+\dots+256^{31}*a[31] = a$
        • $b[0]+256*b[1]+\dots+256^{31}*b[31] = b$
        • $c[0]+256*c[1]+\dots+256^{31}*c[31] = c$

        Output: $result[0]+256*result[1]+\dots+256^{31}*result[31] = (ab+c) \bmod q$ where $q = 2^{252} + 27742317777372353535851937790883648493$.

        See the comments in reduce(byte[]) for an explanation of the algorithm.

        Parameters:
        a - a
        b - b
        c - c
        Returns:
        multiplied result