All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.pqc.crypto.qteslarnd1.QTESLASecurityCategory Maven / Gradle / Ivy

Go to download

The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.4.

There is a newer version: 1.78
Show newest version
package org.bouncycastle.pqc.crypto.qteslarnd1;

/**
 * The qTESLA security categories.
 */
public class QTESLASecurityCategory
{
    public static final int HEURISTIC_I = 0;
    public static final int HEURISTIC_III_SIZE = 1;
    public static final int HEURISTIC_III_SPEED = 2;
    public static final int PROVABLY_SECURE_I = 3;
    public static final int PROVABLY_SECURE_III = 4;

    private QTESLASecurityCategory()
    {
    }

    static void validate(int securityCategory)
    {
        switch (securityCategory)
        {
        case HEURISTIC_I:
        case HEURISTIC_III_SIZE:
        case HEURISTIC_III_SPEED:
        case PROVABLY_SECURE_I:
        case PROVABLY_SECURE_III:
            break;
        default:
            throw new IllegalArgumentException("unknown security category: " + securityCategory);
        }
    }

    static int getPrivateSize(int securityCategory)
    {
        switch (securityCategory)
        {
        case HEURISTIC_I:
            return Polynomial.PRIVATE_KEY_I;
        case HEURISTIC_III_SIZE:
            return Polynomial.PRIVATE_KEY_III_SIZE;
        case HEURISTIC_III_SPEED:
            return Polynomial.PRIVATE_KEY_III_SPEED;
        case PROVABLY_SECURE_I:
            return Polynomial.PRIVATE_KEY_I_P;
        case PROVABLY_SECURE_III:
            return Polynomial.PRIVATE_KEY_III_P;
        default:
            throw new IllegalArgumentException("unknown security category: " + securityCategory);
        }
    }

    static int getPublicSize(int securityCategory)
    {
        switch (securityCategory)
        {
        case HEURISTIC_I:
            return Polynomial.PUBLIC_KEY_I;
        case HEURISTIC_III_SIZE:
            return Polynomial.PUBLIC_KEY_III_SIZE;
        case HEURISTIC_III_SPEED:
            return Polynomial.PUBLIC_KEY_III_SPEED;
        case PROVABLY_SECURE_I:
            return Polynomial.PUBLIC_KEY_I_P;
        case PROVABLY_SECURE_III:
            return Polynomial.PUBLIC_KEY_III_P;
        default:
            throw new IllegalArgumentException("unknown security category: " + securityCategory);
        }
    }

    static int getSignatureSize(int securityCategory)
    {
        switch (securityCategory)
        {
        case HEURISTIC_I:
            return Polynomial.SIGNATURE_I;
        case HEURISTIC_III_SIZE:
            return Polynomial.SIGNATURE_III_SIZE;
        case HEURISTIC_III_SPEED:
            return Polynomial.SIGNATURE_III_SPEED;
        case PROVABLY_SECURE_I:
            return Polynomial.SIGNATURE_I_P;
        case PROVABLY_SECURE_III:
            return Polynomial.SIGNATURE_III_P;
        default:
            throw new IllegalArgumentException("unknown security category: " + securityCategory);
        }
    }

    /**
     * Return a standard name for the security category.
     *
     * @param securityCategory the category of interest.
     * @return the name for the category.
     */
    public static String getName(int securityCategory)
    {
        switch (securityCategory)
        {
        case HEURISTIC_I:
            return "qTESLA-I";
        case HEURISTIC_III_SIZE:
            return "qTESLA-III-size";
        case HEURISTIC_III_SPEED:
            return "qTESLA-III-speed";
        case PROVABLY_SECURE_I:
            return "qTESLA-p-I";
        case PROVABLY_SECURE_III:
            return "qTESLA-p-III";
        default:
            throw new IllegalArgumentException("unknown security category: " + securityCategory);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy