diff options
Diffstat (limited to 'core/src/main/java/org/spongycastle/pqc/math/linearalgebra/Matrix.java')
-rw-r--r-- | core/src/main/java/org/spongycastle/pqc/math/linearalgebra/Matrix.java | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/core/src/main/java/org/spongycastle/pqc/math/linearalgebra/Matrix.java b/core/src/main/java/org/spongycastle/pqc/math/linearalgebra/Matrix.java new file mode 100644 index 00000000..170c5a21 --- /dev/null +++ b/core/src/main/java/org/spongycastle/pqc/math/linearalgebra/Matrix.java @@ -0,0 +1,131 @@ +package org.spongycastle.pqc.math.linearalgebra; + +/** + * This abstract class defines matrices. It holds the number of rows and the + * number of columns of the matrix and defines some basic methods. + */ +public abstract class Matrix +{ + + /** + * number of rows + */ + protected int numRows; + + /** + * number of columns + */ + protected int numColumns; + + // ---------------------------------------------------- + // some constants (matrix types) + // ---------------------------------------------------- + + /** + * zero matrix + */ + public static final char MATRIX_TYPE_ZERO = 'Z'; + + /** + * unit matrix + */ + public static final char MATRIX_TYPE_UNIT = 'I'; + + /** + * random lower triangular matrix + */ + public static final char MATRIX_TYPE_RANDOM_LT = 'L'; + + /** + * random upper triangular matrix + */ + public static final char MATRIX_TYPE_RANDOM_UT = 'U'; + + /** + * random regular matrix + */ + public static final char MATRIX_TYPE_RANDOM_REGULAR = 'R'; + + // ---------------------------------------------------- + // getters + // ---------------------------------------------------- + + /** + * @return the number of rows in the matrix + */ + public int getNumRows() + { + return numRows; + } + + /** + * @return the number of columns in the binary matrix + */ + public int getNumColumns() + { + return numColumns; + } + + /** + * @return the encoded matrix, i.e., this matrix in byte array form. + */ + public abstract byte[] getEncoded(); + + // ---------------------------------------------------- + // arithmetic + // ---------------------------------------------------- + + /** + * Compute the inverse of this matrix. + * + * @return the inverse of this matrix (newly created). + */ + public abstract Matrix computeInverse(); + + /** + * Check if this is the zero matrix (i.e., all entries are zero). + * + * @return <tt>true</tt> if this is the zero matrix + */ + public abstract boolean isZero(); + + /** + * Compute the product of this matrix and another matrix. + * + * @param a the other matrix + * @return <tt>this * a</tt> (newly created) + */ + public abstract Matrix rightMultiply(Matrix a); + + /** + * Compute the product of this matrix and a permutation. + * + * @param p the permutation + * @return <tt>this * p</tt> (newly created) + */ + public abstract Matrix rightMultiply(Permutation p); + + /** + * Compute the product of a vector and this matrix. If the length of the + * vector is greater than the number of rows of this matrix, the matrix is + * multiplied by each m-bit part of the vector. + * + * @param vector a vector + * @return <tt>vector * this</tt> (newly created) + */ + public abstract Vector leftMultiply(Vector vector); + + /** + * Compute the product of this matrix and a vector. + * + * @param vector a vector + * @return <tt>this * vector</tt> (newly created) + */ + public abstract Vector rightMultiply(Vector vector); + + /** + * @return a human readable form of the matrix. + */ + public abstract String toString(); + +} |