90 lines
2.3 KiB
Kotlin
90 lines
2.3 KiB
Kotlin
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package org.pgpainless.algorithm
|
|
|
|
/**
|
|
* Enumeration of possible symmetric encryption algorithms.
|
|
*
|
|
* See [RFC4880: Symmetric-Key Algorithms](https://tools.ietf.org/html/rfc4880#section-9.2)
|
|
*/
|
|
enum class SymmetricKeyAlgorithm(val algorithmId: Int) {
|
|
|
|
/** Plaintext or unencrypted data. */
|
|
NULL(0),
|
|
|
|
/**
|
|
* IDEA is deprecated.
|
|
*
|
|
* @deprecated use a different algorithm.
|
|
*/
|
|
@Deprecated("IDEA is deprecated.") IDEA(1),
|
|
|
|
/** TripleDES (DES-EDE - 168 bit key derived from 192). */
|
|
TRIPLE_DES(2),
|
|
|
|
/** CAST5 (128-bit key, as per RFC2144). */
|
|
CAST5(3),
|
|
|
|
/** Blowfish (128-bit key, 16 rounds). */
|
|
BLOWFISH(4),
|
|
|
|
/** Reserved in RFC4880. SAFER-SK128 (13 rounds) */
|
|
SAFER(5),
|
|
|
|
/** Reserved in RFC4880. Reserved for DES/SK */
|
|
DES(6),
|
|
|
|
/** AES with 128-bit key. */
|
|
AES_128(7),
|
|
|
|
/** AES with 192-bit key. */
|
|
AES_192(8),
|
|
|
|
/** AES with 256-bit key. */
|
|
AES_256(9),
|
|
|
|
/** Twofish with 256-bit key. */
|
|
TWOFISH(10),
|
|
|
|
/** Reserved for Camellia with 128-bit key. */
|
|
CAMELLIA_128(11),
|
|
|
|
/** Reserved for Camellia with 192-bit key. */
|
|
CAMELLIA_192(12),
|
|
|
|
/** Reserved for Camellia with 256-bit key. */
|
|
CAMELLIA_256(13),
|
|
;
|
|
|
|
companion object {
|
|
|
|
/**
|
|
* Return the [SymmetricKeyAlgorithm] enum that corresponds to the provided numeric id. If
|
|
* an invalid id is provided, null is returned.
|
|
*
|
|
* @param id numeric algorithm id
|
|
* @return symmetric key algorithm enum
|
|
*/
|
|
@JvmStatic
|
|
fun fromId(id: Int): SymmetricKeyAlgorithm? {
|
|
return values().firstOrNull { it.algorithmId == id }
|
|
}
|
|
|
|
/**
|
|
* Return the [SymmetricKeyAlgorithm] enum that corresponds to the provided numeric id. If
|
|
* an invalid id is provided, throw a [NoSuchElementException].
|
|
*
|
|
* @param id numeric algorithm id
|
|
* @return symmetric key algorithm enum
|
|
* @throws NoSuchElementException if an unmatched id is provided
|
|
*/
|
|
@JvmStatic
|
|
fun requireFromId(id: Int): SymmetricKeyAlgorithm {
|
|
return fromId(id)
|
|
?: throw NoSuchElementException("No SymmetricKeyAlgorithm found for id $id")
|
|
}
|
|
}
|
|
}
|