# Patent

## Title
Method and apparatus for multiplying polynomials with a prime number of terms

## Abstract

An efficient method and apparatus to compute a product of polynomials of degree n−1 where n is an arbitrary prime is provided. The total number of multiply operations and Arithmetic Logical Unit (ALU) operations to compute the product is minimized through the judicious use of polynomial evaluations at few points to decrease the number of multiplications while using only simple ALU operations.

## Background
FIELD
This disclosure relates to polynomial operations and in particular to polynomial multiplication.
BACKGROUND
A polynomial is a mathematical expression of one or more algebraic terms, for example, “a+bx+cx2”, each of which consists of a constant (a, b or c) multiplied by one or more variables (x) raised to a nonnegative integral power. The schoolbook method to multiply two polynomials is to multiply each term of a first polynomial by each term of a second polynomial. For example, a first polynomial of degree 1 with two terms a1x+a0 may be multiplied by a second polynomial of degree 1 with two terms b1x+b0 by performing four multiply operations and three addition operations to produce a polynomial of degree 2 with three terms as shown below:

(a1x+a0)(b1x+b0)=a1b1x2+(a0b1x+a1b0x)+a0b0 

The number of multiply operations and Arithmetic Logical Unit (ALU) operations increases with the number of terms in the polynomials. For example, using the schoolbook method, the number of multiply operations to multiply two polynomials each having n2 terms is n and the number of additions is (n−1)2.



BRIEF DESCRIPTION OF THE DRAWINGS
Features of embodiments of the claimed subject matter will become apparent as the following detailed description proceeds, and upon reference to the drawings, in which like numerals depict like parts, and in which:
FIG. 1 is a flowchart illustrating an embodiment of a method to compute the product C(x) of two polynomials A(x) and B(x) each having n terms, where n is a prime number according to the principles of the present invention;
FIG. 2 illustrates the computation of the coefficients of a polynomial C(x) of degree eight using the coefficients of polynomials A(x) and B(x) of degree four; and
FIG. 3 is a block diagram of a system that includes an embodiment of Public Key Encryption (PKE) unit to perform public key encryption using an embodiment of a method to compute the product C(x) of two polynomials A(x) and B(x) each having n terms, where n is a prime number.



Although the following Detailed Description will proceed with reference being made to illustrative embodiments of the claimed subject matter, many alternatives, modifications, and variations thereof will be apparent to those skilled in the art. Accordingly, it is intended that the claimed subject matter be viewed broadly, and be defined only as set forth in the accompanying claims.
DETAILED DESCRIPTION
Polynomial operations such as polynomial multiplication are important in cryptography, for example, in the context of Elliptic curves and for use with other public key encryption algorithms such as Rivest, Shamir, Adleman (RSA).
The Karatsuba algorithm reduces the number of multiply operations compared to the schoolbook method by multiplying two two-term polynomials (A(x)=(a1x+a0) and B(x)=(b1x+b0)), each having two coefficients ((a1,a0) and (b1b0)), using three scalar multiplications instead of four multiplications as shown below:

C(x)=(a1x+a0)(b1x+b0)=a1b1x2+((a0+a1)(b0+b1)−a0b0−a1b1)+a0b0 

Thus, four additions and three multiplications are required to compute the result C(x) of multiplying two two-term polynomials using the Karatsuba algorithm. The Karatsuba algorithm may also be used to multiply two three-term polynomials using six scalar multiplications instead of nine multiplications.
Polynomial multiplication may be performed efficiently using the Karatsuba-Ofman algorithm as discussed in “Five, Six and Seven-term Karatsuba-like formulae”, Peter L Montgomery, IEEE Transactions on Computers, Vol. 54, No. 3, March 2005. The Karatsuba-Ofman algorithm performs polynomial multiplications using a sub-quadratic number of base multiply operations at the expense of simpler Arithmetic Logical Unit (ALU) operations. The task of finding efficient formulae for arbitrary term polynomials is extremely hard. Montgomery performed a search to solve 5 and 7 term polynomial multiplications and the result is a Karatsuba-like formula, which when executed, is a Karatsuba algorithm for 5 and 7-term polynomials. However, the exhaustive search method has an exponential run-time and thus cannot be extended beyond seven terms, due to computational infeasibility.
Polynomial multiplication for two polynomials A(x), B(x) of arbitrary degree-d with n=d+1 coefficients may be performed using a one-iteration (non-recursive) Karatsuba algorithm as discussed in “Generalizations of the Karatsuba algorithm for efficient implementation”, A Weimerskirch, C Paar, by:

    
    
        (1) Computing D=aibj, for each i=0 to n−1, D=aibj then calculating

Ds,t:=(as+at)(bs+bt) for each i=1 to 2n−3, and for all s and t with s+t=i and t>s>=0.

        (2) Using these computed values to compute each co-efficient of C(x).
    
    


However, this technique is not optimal in terms of the number of scalar computations.
A prime number is any integer other than 0 or ±1 that is not divisible without remainder by any other integers except ±1 and ± the integer itself. For example, 2, 3, 5, 7, 11, and 13 are prime numbers. An embodiment of the present invention provides a method and apparatus that uses a non-recursive Karatsuba (KA) algorithm to multiply polynomials having an arbitrary prime number of terms with fewer multiplications than prior art methods and that has a better performance than the Montgomery exhaustive search for polynomials having five and seven terms.
In contrast to the Montgomery exhaustive search method which is limited to seven terms due to computational infeasibility, an embodiment of the present invention may be applied to any arbitrary prime number of terms. An embodiment uses Arithmetic Logical Unit (ALU) operations such as addition/subtraction and a single-bit shift in addition to multiplication and has less ALU operations than the Montgomery exhaustive search method for five and seven-term polynomials.
FIG. 1 is a flowchart illustrating an embodiment of a method to compute the product C(x) of two polynomials A(x) and B(x) each having n terms, where n is a prime number according to the principles of the present invention.
The product C(x) may be computed as follows:




  
    C
    ⁡
    
      (
      x
      )
    
  
  =
  
    
      (
      
        
          
            a
            
              (
              
                n
                -
                1
              
              )
            
          
          ·
          
            X
            
              n
              -
              1
            
          
        
        +
        
          
            a
            
              (
              
                n
                -
                2
              
              )
            
          
          ·
          
            X
            
              n
              -
              2
            
          
        
        +
        
          ...
          ⁢
          
            
          
          ⁢
          
            
              a
              1
            
            ·
            X
          
        
        +
        
          a
          0
        
      
      )
    
    *
    
      (
      
        
          
            b
            
              (
              
                n
                -
                1
              
              )
            
          
          ·
          
            X
            
              n
              -
              1
            
          
        
        +
        
          
            b
            
              (
              
                n
                -
                2
              
              )
            
          
          ·
          
            X
            
              n
              -
              2
            
          
        
        +
        
          ...
          ⁢
          
            
          
          ⁢
          
            
              b
              1
            
            ·
            X
          
        
        +
        
          b
          0
        
      
      )
    
  




C(x) may be represented as follows:

C(x)=c2(n-1)X2(n-1)+ . . . c1·X+c0.

An embodiment of the invention in which both polynomials A(x) and B(x) have five terms, that is, n is equal to 5 (a prime number) and are of degree 4 will be described. In this embodiment, C(x) is computed as follows:




  
    
      
        
          
            C
            ⁡
            
              (
              x
              )
            
          
          =
          
          ⁢
          
            
              (
              
                
                  
                    a
                    4
                  
                  ·
                  
                    X
                    4
                  
                
                +
                
                  
                    a
                    3
                  
                  ·
                  
                    X
                    3
                  
                
                +
                
                  ...
                  ⁢
                  
                    
                  
                  ⁢
                  
                    
                      a
                      1
                    
                    ·
                    X
                  
                
                +
                
                  a
                  0
                
              
              )
            
            *
          
        
        ⁢
        
          
        
      
    
  
  
    
      
        
        ⁢
        
          (
          
            
              
                b
                4
              
              ·
              
                X
                4
              
            
            +
            
              
                b
                3
              
              ·
              
                X
                3
              
            
            +
            
              ...
              ⁢
              
                
              
              ⁢
              
                
                  b
                  1
                
                ·
                X
              
            
            +
            
              b
              0
            
          
          )
        
      
    
  
  
    
      
        =
        
        ⁢
        
          
            
              c
              8
            
            ·
            
              X
              8
            
          
          +
          
            ...
            ⁢
            
              
            
            ⁢
            
              
                c
                1
              
              ·
              X
            
          
          +
          
            c
            0
          
        
      
    
  




FIG. 2 illustrates the computation of the individual coefficients of a polynomial C(x) of degree 8 using the individual coefficients of polynomials A(x) and B(x) of degree 4. As shown in FIG. 2, the computation of the coefficients c0-c8 of C(x) 200 requires the computation of five products using the five coefficients of A(x), that is, (a0-a4) and the five coefficients of B(x), that is, (b0-b4) for which the indices (0-4) are equal, that is, (a0.b0) 202, (a1.b1) 206, (a2.b2) 212, (a3.b3) 214 and (a4.b4) 220.
Returning to FIG. 1, at block 100, the products of coefficients for which indices are equal (ai, bi) as shown in FIG. 2, are computed first. Some of these products will be used later to compute some of the coefficients of C(x) using the 2 term Karatsuba algorithm. Processing continues with block 102.
At block 102, the products of the coefficients of A and B that can be computed as a series of 2-term Karatsuba multiplications are computed. The computation of the coefficients of C(x), that is, c0-c8 requires the computation of s=(ai.bj+aj.bi), where i!=j, as shown in FIG. 2. The number of multiply operations for computing (ai.bj+aj.bi), where i!=j may be reduced from two to one through the use of a 2-term Karatsuba algorithm, by computing:

s=(ai+aj)*(bi+bj)−ai.bi−aj.bj 

As the products ai.bi and aj.bj have already been computed at block 100, only one product need be computed, that is, (ai+aj)*(bi+bj). For example, the computation of coefficient c7 of C(x) which requires the computation of (a3.b4+a4.b3), that requires the result of two multiply operations (a3.b4), (a4.b3) and an addition. Coefficient c3 of C(x) may be computed as a 2-term Karatsuba Algorithm by computing (a0.b3+a3.b0) with a single multiply operation and computing (a1.b2+a2.b1) with a second multiply operation. A plurality of two-term Karatsuba multiplications are performed using coefficients of A and B for which indices i!=j and i+j is not equal to n or n−1. That is, the following computation is performed:

Ds,t:=(as+at)(bs+bt)

    
    
        for each i=1 to 2n−3, and for all s and t with s+t=i, s+t!=n and s+t !=(n−1) and t>s>=0.
    
    


The coefficients c0-c3 and c6-c8 of C(x) shown in FIG. 2 are computed using the computed 2-term Karatsuba multiplications 204, 208, 215, 210, 218 and the products of same indices 202, 206, 212, 214, 220. Processing continues with block 104.
At block 104, coefficient c4 could be computed using two 2 term Karatsuba multiplications (a0.b4, a4.b0) and (a1.b3, a3.b1) and a pre-computed product (a2.b2). However, this would require two multiply operations to compute coefficient c4 and two multiply operations to compute coefficient c5. The total number of multiply operations to compute C(x) may be reduced by evaluating the polynomial C(x) at 2 points {−1, 1} as shown below in Table 1:







TABLE 1










  
    
      With
      ⁢
      
        
      
      ⁢
      x
    
    =
    1
  




  
    
      
        
          
            C
            ⁡
            
              (
              1
              )
            
          
          =
          
            
              A
              ⁡
              
                (
                1
                )
              
            
            *
            
              B
              ⁡
              
                (
                1
                )
              
            
          
        
      
    
    
      
        
          =
          
            
              (
              
                
                  a
                  4
                
                +
                
                  a
                  3
                
                +
                
                  ...
                  ⁢
                  
                    
                  
                  ⁢
                  
                    a
                    1
                  
                
                +
                
                  a
                  0
                
              
              )
            
            *
            
              (
              
                
                  b
                  4
                
                +
                
                  b
                  3
                
                +
                
                  ...
                  ⁢
                  
                    
                  
                  ⁢
                  
                    b
                    1
                  
                
                +
                
                  b
                  0
                
              
              )
            
          
        
      
    
    
      
        
          =
          
            
              c
              0
            
            +
            
              c
              1
            
            +
            
              c
              2
            
            +
            
              c
              3
            
            +
            
              c
              4
            
            +
            
              c
              5
            
            +
            
              c
              6
            
            +
            
              c
              7
            
            +
            
              c
              8
            
          
        
      
    
  




  
    
      With
      ⁢
      
        
      
      ⁢
      x
    
    =
    
      -
      1
    
  




  
    
      
        
          
            C
            ⁡
            
              (
              
                -
                1
              
              )
            
          
          =
          
            
              A
              ⁡
              
                (
                
                  -
                  1
                
                )
              
            
            *
            
              B
              ⁡
              
                (
                
                  -
                  1
                
                )
              
            
          
        
      
    
    
      
        
          =
          
            
              (
              
                
                  a
                  4
                
                -
                
                  a
                  3
                
                +
                
                  a
                  2
                
                -
                
                  a
                  1
                
                +
                
                  a
                  0
                
              
              )
            
            *
            
              
                (
                
                  
                    b
                    4
                  
                  -
                  
                    b
                    3
                  
                  +
                  
                    b
                    2
                  
                  -
                  
                    b
                    1
                  
                  +
                  
                    b
                    0
                  
                
                )
              
              .
            
          
        
      
    
    
      
        
          =
          
            
              c
              0
            
            -
            
              c
              1
            
            +
            
              c
              2
            
            -
            
              c
              3
            
            +
            
              c
              4
            
            -
            
              c
              5
            
            +
            
              c
              6
            
            -
            
              c
              7
            
            +
            
              c
              8
            
          
        
      
    
  












Each of the evaluations of C(x) shown in Table 1 requires one multiply operation (product) for a total of 2 multiply operations.
The result of adding C(1) and C(−1) is as shown below:




  
    
      
        
          
            C
            ⁡
            
              (
              1
              )
            
          
          +
          
            C
            ⁡
            
              (
              
                -
                1
              
              )
            
          
        
        =
        
        ⁢
        
          
            (
            
              
                c
                0
              
              +
              
                c
                1
              
              +
              
                c
                2
              
              +
              
                c
                3
              
              +
              
                c
                4
              
              +
              
                c
                5
              
              +
              
                c
                6
              
              +
              
                c
                7
              
              +
              
                c
                8
              
            
            )
          
          +
        
      
    
  
  
    
      
        
        ⁢
        
          
            c
            0
          
          -
          
            c
            1
          
          +
          
            c
            2
          
          -
          
            c
            3
          
          +
          
            c
            4
          
          -
          
            c
            5
          
          +
          
            c
            6
          
          -
          
            c
            7
          
          +
          
            c
            8
          
        
      
    
  
  
    
      
        =
        
        ⁢
        
          2
          ⁡
          
            [
            
              
                c
                ⁢
                
                  
                
                ⁢
                0
              
              +
              
                c
                ⁢
                
                  
                
                ⁢
                2
              
              +
              
                c
                ⁢
                
                  
                
                ⁢
                4
              
              +
              
                c
                ⁢
                
                  
                
                ⁢
                6
              
              +
              
                c
                ⁢
                
                  
                
                ⁢
                8
              
            
            ]
          
        
      
    
  




As the coefficients c0, c2, c6 and c8 have already been computed as discussed in conjunction with block 100 and block 102, coefficient c4 of C(x) may be computed using these coefficients (c0, c2, c6 and c8) as shown below:

c4={[C(x=1)+C(x=−1)]>>1}−[c0+c2+c6+c8]

Processing continues with block 106.
At block 106, coefficient c5 of C(x) may be computed in a similar manner by subtracting C(1) and C(−1) as shown below:




  
    
      
        
          
            C
            ⁡
            
              (
              1
              )
            
          
          -
          
            C
            ⁡
            
              (
              
                -
                1
              
              )
            
          
        
        =
        
        ⁢
        
          
            (
            
              
                c
                0
              
              +
              
                c
                1
              
              +
              
                c
                2
              
              +
              
                c
                3
              
              +
              
                c
                4
              
              +
              
                c
                5
              
              +
              
                c
                6
              
              +
              
                c
                7
              
              +
              
                c
                8
              
            
            )
          
          -
        
      
    
  
  
    
      
        
        ⁢
        
          
            c
            0
          
          -
          
            c
            1
          
          +
          
            c
            2
          
          -
          
            c
            3
          
          +
          
            c
            4
          
          -
          
            c
            5
          
          +
          
            c
            6
          
          -
          
            c
            7
          
          +
          
            c
            8
          
        
      
    
  
  
    
      
        =
        
        ⁢
        
          2
          ⁡
          
            [
            
              
                c
                ⁢
                
                  
                
                ⁢
                1
              
              +
              
                c
                ⁢
                
                  
                
                ⁢
                3
              
              +
              
                c
                ⁢
                
                  
                
                ⁢
                5
              
              +
              
                c
                ⁢
                
                  
                
                ⁢
                7
              
            
            ]
          
        
      
    
  




Thus, c5 may be computed using these computed coefficients as shown below:

c5={[C(1)−C(−1)]>>1}−[c1+c3+c7]

Thus, only two multiply operations are used to compute coefficients c4 and c5, one to compute C(−1) and the other to compute C(1). The further calculations to compute coefficients c4 and c5 using C(−1) and C(1) only require simple addition/subtraction or right-shift-logical-by-one operations.
The total number of multiply operations is thus 13 to compute all coefficients of C(x), that is, c0-c8 in contrast to the 15 required using the one-iteration (non-recursive) Karatsuba algorithm. Referring to FIG. 2, five multiply operations to compute (a0.b0) 202, (a1.b1) 206, (a2.b2) 212, (a3.b3) 214 and (a4.b4) 220, six multiply operations to compute (a0b1, b1a0) 204, (a0b2, b2a0) 208, (a1b2, a2b1) 215, (a0b3, b3a0) 210, (a2b4, b4,a2) 216, (a3b4, b4, a3) 248 and two multiply operations to compute C(1) and C(−1). The number of multiply operations for multiplying two 5-term polynomials of degree 4 is equivalent to the number of multiply operations required for Montgomery exhaustive search for the total number of multiply operations and is better in terms of number of the total number of ALU operations.
An embodiment has been described for multiplying two 5 term polynomials (A(x) with coefficients a4-a0, B(x) with coefficients b4-b0) to produce a nine term polynomial result (c8-c0) of degree 8. However, the invention is not limited to multiplication of 5 term polynomials of degree 4. An embodiment may use polynomials having any prime number of terms n.
All coefficients of the C(x) result of multiplying two n-term polynomials where n is prime, except for the (n−1)th coefficient and the nth coefficient may be computed as discussed in conjunction with blocks 100 and 102 in FIG. 1. Then, C(x) is evaluated at points {−1, 1} and the linear system of equations solved to derive the (n−1)th and nth coefficients which only requires two multiply operations. Thus, the number of multiply operations is n(n+1)/2−[n−3] for multiplying two n-term polynomials of degree n−1.
Thus, the number of multiply operations is 13 for a polynomial of degree 4, that is, with five terms (n=5), which is the same number of multiply operations as required for the exhaustive search Montgomery technique and less (by two) than the number used by the one-iteration (non-recursive) Karatsuba algorithm technique. As there is no limit to the number of terms in the polynomials to be multiplied, an embodiment of the invention may be used for a prime number of terms of 11 and greater, that is, cases for which the exhaustive search Montgomery technique cannot be used. Also, for prime terms of 11 and greater, the number of multiply operations is 24 in contrast to the 28 multiply operations required by the one-iteration (non-recursive) Karatsuba algorithm (1−KA) technique.
An embodiment of the invention pertains to an efficient method and apparatus to compute the product of two polynomials having an arbitrary prime number of terms. The total number of multiply operations is less than used by the one iteration non-recursive Karatsuba algorithm and is similar to the number of multiply operations used by the exhaustive search technique discussed by Montgomery for some prime number of terms.
In contrast to the exhaustive search technique of Montgomery which is limited to 7 terms due to computational infeasibility, an embodiment of the invention may be applied to polynomials having any arbitrary prime number of terms. An embodiment of the invention uses only Arithmetic Logical Unit (ALU) operations such as addition/subtraction and single-bit shift operations in addition to multiply operations and very few total ALU operations compared to exhaustive search technique of Montgomery through the judicious use of polynomial evaluations at few points to decrease the number of multiplications while using only simple ALU operations.
The performance of an embodiment of the invention is better than the exhaustive Montgomery search for multiplication of 5-term and 7-term polynomials even though the number of multiply operations are the same because there are less ALU operations (addition/subtraction and shift).
An embodiment has been described for integer-fields. However, the invention is not limited to integer-fields, for example, an embodiment may use Galois Fields (GF(2n)) instead of integer-fields.
FIG. 3 is a block diagram of a system 100 that includes an embodiment of Public Key Encryption (PKE) unit 108 to perform public key encryption using an embodiment of a method to compute the product C(x) of two polynomials A(x) and B(x) each having n terms, where n is a prime number.
The system 100 includes a processor 301, a Memory Controller Hub (MCH) 302 and an Input/Output (I/O) Controller Hub (ICH) 304. The MCH 302 includes a memory controller 306 that controls communication between the processor 301 and memory 310. The processor 301 and MCH 302 communicate over a system bus 316.
The processor 301 may be any one of a plurality of processors such as a single core Intel® Pentium IV® processor, a single core Intel Celeron processor, an Intel® XScale processor or a multi-core processor such as Intel® Pentium D, Intel® Xeon® processor, or Intel® Core® Duo processor or any other type of processor.
The memory 310 may be Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), Synchronized Dynamic Random Access Memory (SDRAM), Double Data Rate 2 (DDR2) RAM or Rambus Dynamic Random Access Memory (RDRAM) or any other type of memory.
The ICH 304 may be coupled to the MCH 302 using a high speed chip-to-chip interconnect 314 such as Direct Media Interface (DMI). DMI supports 2 Gigabit/second concurrent transfer rates via two unidirectional lanes.
The ICH 304 may include a storage I/O controller 320 for controlling communication with at least one storage device 312 coupled to the ICH 304. The storage device 312 may be, for example, a disk drive, Digital Video Disk (DVD) drive, Compact Disk (CD) drive, Redundant Array of Independent Disks (RAID), tape drive or other storage device. The ICH 304 may communicate with the storage device 312 over a storage protocol interconnect 318 using a serial storage protocol such as, Serial Attached Small Computer System Interface (SAS) or Serial Advanced Technology Attachment (SATA).
In an embodiment, the Public Key Encryption (PKE) unit 108 includes a state machine 356, an Arithmetic Logical Unit (ALU) 352 and a multiplier 354 to perform multiplication of polynomials as discussed in conjunction with FIGS. 1 and 2. The ALU 352 performs integer operations such as addition and subtraction and also performs bit-shifting operations, for example, shifting or rotating by a specified number of bits to the left or right. The state machine 356 controls the sequence of operations performed by the ALU 352 and the multiplier 354 to perform the polynomial multiplication.
In another embodiment, the polynomial multiplication as discussed in conjunction with FIGS. 1 and 2 may be performed by CPU 316 executing a polynomial multiplication library function 350 that may be stored in memory 310.
It will be apparent to those of ordinary skill in the art that methods involved in embodiments of the present invention may be embodied in a computer program product that includes a computer usable medium. For example, such a computer usable medium may consist of a read only memory device, such as a Compact Disk Read Only Memory (CD ROM) disk or conventional ROM devices, or a computer diskette, having a computer readable program code stored thereon.
While embodiments of the invention have been particularly shown and described with references to embodiments thereof, it will be understood by those skilled in the art that various changes in form and details may be made therein without departing from the scope of embodiments of the invention encompassed by the appended claims.

## Claims

1. A method comprising:
using a certain algorithm to perform polynomial multiplication, the certain algorithm including a first set of operations that comprises a subset of a second set of operations that implements a non-recursive Karatsuba algorithm (KA), the first set of operations also comprising at least one operation in addition to the second set of operations, wherein the certain algorithm comprises multiplying two respective polynomials that have respective prime numbers of respective terms, the certain algorithm employing only arithmetic and local unit (ALU) operations and other operations performed by a multiplier, the ALU operations comprising addition, subtraction, multiplication, and bit shifting operations, the certain algorithm resulting in a first number of multiply operations involved in multiplying certain polynomials that is less than a second number of multiply operations employed in KA multiplication of the certain polynomials, the certain algorithm including computing coefficients of a product C(x) of two n term polynomials A(x) and B(x) by first calculating a plurality of precomputed products for aibi, wherein i=0 to n−1; and secondly calculating C(x)=(ai+aj)*(bi+bj)−aibi−ajbj for each i and j from 0 to n−1, further wherein calculation of C(x) involving aibi and ajbj corresponds to the precomputed products and are not recalculated for the calculation; the second calculating being based upon two-term Karatsuba multiplications using coefficients of the polynomials A(x) and B(x) for which respective indices i and j are not equal and also for which i+j is not equal to n or n−1, the ALU operations being performed by an ALU comprised in a public key encryption unit, the encryption unit also comprising a state machine and the multiplier, the state machine being to control sequence of the ALU operations performed by the ALU and the other operations performed by the multiplier to perform the first number of multiply operations, the encryption unit being comprised in an input/output (I/O) controller hub, the controller hub comprising a storage I/O controller to control communication with at least one storage device to be coupled to the controller hub, the communication being via a serial storage interconnect using a serial storage protocol.

2. The method of claim 1, wherein:
the controller hub is coupled to host central processing unit and to a memory.

3. An apparatus comprising:
an arithmetic and local unit (ALU) to perform ALU operations and a multiplier to perform other operations that implement a certain algorithm to perform polynomial multiplication, the certain algorithm including a first set of operations that comprises a subset of a second set of operations that implements a non-recursive Karatsuba algorithm (KA), the first set of operations also comprising at least one operation in addition to the second set of operations, wherein the certain algorithm comprises multiplying two respective polynomials that have respective prime numbers of respective terms, the certain algorithm employing only arithmetic and local unit (ALU) operations and other operations performed by a multiplier, the ALU operations comprising addition, subtraction, multiplication, and bit shifting operations, the certain algorithm resulting in a first number of multiply operations involved in multiplying certain polynomials that is less than a second number of multiply operations employed in KA multiplication of the certain polynomials, the certain algorithm including computing coefficients of a product C(x) of two n term polynomials A(x) and B(x) by first calculating a plurality of precomputed products for aibi wherein i=0 to n−1; and secondly calculating C(x)=(ai+aj)*(bi+bj)−aibi−ajbj for each i and j from 0 to n−1, further wherein calculation of C(x) involving aibi and ajbj corresponds to the precomputed products and are not recalculated for the calculation; the second calculating being based upon two-term Karatsuba multiplications using coefficients of the polynomials A(x) and B(x) for which respective indices i and j are not equal and also for which i+j is not equal to n or n−1, the ALU operations being performed by an ALU comprised in a public key encryption unit, the encryption unit also comprising a state machine and the multiplier, the state machine being to control sequence of the ALU operations performed by the ALU and the other operations performed by the multiplier to perform the first number of multiply operations, the encryption unit being comprised in an input/output (I/O) controller hub, the controller hub comprising a storage I/O controller to control communication with at least one storage device to be coupled to the controller hub, the communication being via a serial storage interconnect using a serial storage protocol.

4. The apparatus of claim 3, wherein:
the controller hub is coupled to host central processing unit and to a memory.

5. A non-transitory machine-usable medium storing computer readable program code that when executed results in a machine performing the following operations:
using a certain algorithm to perform polynomial multiplication, the certain algorithm including a first set of operations that comprises a subset of a second set of operations that implements a non-recursive Karatsuba algorithm (KA), the first set of operations also comprising at least one operation in addition to the second set of operations, wherein the certain algorithm comprises multiplying two respective polynomials that have respective prime numbers of respective terms, the certain algorithm employing only arithmetic and local unit (ALU) operations and other operations performed by a multiplier, the ALU operations comprising addition, subtraction, multiplication, and bit shifting operations, the certain algorithm resulting in a first number of multiply operations involved in multiplying certain polynomials that is less than a second number of multiply operations employed in KA multiplication of the certain polynomials, the certain algorithm including computing coefficients of a product C(x) of two n term polynomials A(x) and B(x) by first calculating a plurality of precomputed products for aibi wherein i=0 to n−1; and secondly calculating C(x)=(ai+aj)*(bi+bj)−aibi−ajbj for each i and j from 0 to n−1, further wherein calculation of C(x) involving aibi and ajbj corresponds to the precomputed products and are not recalculated for the calculation; the second calculating being based upon two-term Karatsuba multiplications using coefficients of the polynomials A(x) and B(x) for which respective indices i and j are not equal and also for which i+j is not equal to n or n−1, the ALU operations being performed by an ALU comprised in a public key encryption unit, the encryption unit also comprising a state machine and the multiplier, the state machine being to control sequence of the ALU operations performed by the ALU and the other operations performed by the multiplier to perform the first number of multiply operations, the encryption unit being comprised in an input/output (I/O) controller hub, the controller hub comprising a storage I/O controller to control communication with at least one storage device to be coupled to the controller hub, the communication being via a serial storage interconnect using a serial storage protocol.

6. The medium of claim 5, wherein:
the controller hub is coupled to host central processing unit and to a memory.