GordianStreamKeySubType.java

/*
 * GordianKnot: Security Suite
 * Copyright 2026. Tony Washer
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.  You may obtain a copy
 * of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package io.github.tonywasher.joceanus.gordianknot.api.cipher.spec;

/**
 * StreamKey SubSpec.
 */
public interface GordianStreamKeySubType {
    /**
     * VMPC Key styles.
     */
    enum GordianVMPCKey
            implements GordianStreamKeySubType {
        /**
         * VMPC.
         */
        STD,

        /**
         * VMPC-KSA.
         */
        KSA;
    }

    /**
     * Salsa20 Key styles.
     */
    enum GordianSalsa20Key
            implements GordianStreamKeySubType {
        /**
         * Salsa20.
         */
        STD,

        /**
         * XSalsa20.
         */
        XSALSA;
    }

    /**
     * ChaCha20 Key styles.
     */
    enum GordianChaCha20Key
            implements GordianStreamKeySubType {
        /**
         * ChaCha20.
         */
        STD,

        /**
         * ChaCha7539.
         */
        ISO7539,

        /**
         * XChaCha20.
         */
        XCHACHA;
    }

    /**
     * SkeinXof Key styles.
     */
    enum GordianSkeinXofKey
            implements GordianStreamKeySubType {
        /**
         * 256State.
         */
        STATE256,

        /**
         * 512State.
         */
        STATE512,

        /**
         * 1024State.
         */
        STATE1024;
    }

    /**
     * BlakeXof Key styles.
     */
    enum GordianBlakeXofKey
            implements GordianStreamKeySubType {
        /**
         * Blake2S.
         */
        BLAKE2XS,

        /**
         * Blake2B.
         */
        BLAKE2XB;
    }

    /**
     * Elephant Key styles.
     */
    enum GordianElephantKey
            implements GordianStreamKeySubType {
        /**
         * Elephant160.
         */
        ELEPHANT160,

        /**
         * Elephant176.
         */
        ELEPHANT176,

        /**
         * Elephant200.
         */
        ELEPHANT200;
    }

    /**
     * ISAP Key styles.
     */
    enum GordianISAPKey
            implements GordianStreamKeySubType {
        /**
         * ISAPA128.
         */
        ISAPA128,

        /**
         * ISAPA128A.
         */
        ISAPA128A,

        /**
         * ISAPK128.
         */
        ISAPK128,

        /**
         * ISAPK128A.
         */
        ISAPK128A;
    }

    /**
     * Romulus Key styles.
     */
    enum GordianRomulusKey
            implements GordianStreamKeySubType {
        /**
         * Romulus-M.
         */
        ROMULUS_M,

        /**
         * Romulus-N.
         */
        ROMULUS_N,

        /**
         * Romulus-T.
         */
        ROMULUS_T;
    }

    /**
     * Sparkle Key styles.
     */
    enum GordianSparkleKey
            implements GordianStreamKeySubType {
        /**
         * Sparkle128_128.
         */
        SPARKLE128_128,

        /**
         * Sparkle256_128.
         */
        SPARKLE256_128,

        /**
         * Sparkle192_192.
         */
        SPARKLE192_192,

        /**
         * Sparkle256_256.
         */
        SPARKLE256_256;
    }
}