mirror of
https://codeberg.org/PGPainless/sop-java.git
synced 2024-11-25 16:42:07 +01:00
Kotlin conversion: SessionKey
This commit is contained in:
parent
0f5270c28d
commit
567571cf6c
2 changed files with 48 additions and 80 deletions
|
@ -1,80 +0,0 @@
|
|||
// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package sop;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import sop.util.HexUtil;
|
||||
|
||||
public class SessionKey {
|
||||
|
||||
private static final Pattern PATTERN = Pattern.compile("^(\\d):([0-9A-F]+)$");
|
||||
|
||||
private final byte algorithm;
|
||||
private final byte[] sessionKey;
|
||||
|
||||
public SessionKey(byte algorithm, byte[] sessionKey) {
|
||||
this.algorithm = algorithm;
|
||||
this.sessionKey = sessionKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the symmetric algorithm octet.
|
||||
*
|
||||
* @return algorithm id
|
||||
*/
|
||||
public byte getAlgorithm() {
|
||||
return algorithm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the session key.
|
||||
*
|
||||
* @return session key
|
||||
*/
|
||||
public byte[] getKey() {
|
||||
return sessionKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return getAlgorithm() * 17 + Arrays.hashCode(getKey());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other == null) {
|
||||
return false;
|
||||
}
|
||||
if (this == other) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof SessionKey)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
SessionKey otherKey = (SessionKey) other;
|
||||
return getAlgorithm() == otherKey.getAlgorithm() && Arrays.equals(getKey(), otherKey.getKey());
|
||||
}
|
||||
|
||||
public static SessionKey fromString(String string) {
|
||||
string = string.trim().toUpperCase().replace("\n", "");
|
||||
Matcher matcher = PATTERN.matcher(string);
|
||||
if (!matcher.matches()) {
|
||||
throw new IllegalArgumentException("Provided session key does not match expected format.");
|
||||
}
|
||||
byte algorithm = Byte.parseByte(matcher.group(1));
|
||||
String key = matcher.group(2);
|
||||
|
||||
return new SessionKey(algorithm, HexUtil.hexToBytes(key));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Integer.toString(getAlgorithm()) + ':' + HexUtil.bytesToHex(sessionKey);
|
||||
}
|
||||
}
|
48
sop-java/src/main/kotlin/sop/SessionKey.kt
Normal file
48
sop-java/src/main/kotlin/sop/SessionKey.kt
Normal file
|
@ -0,0 +1,48 @@
|
|||
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package sop
|
||||
|
||||
import sop.util.HexUtil
|
||||
|
||||
/**
|
||||
* Class representing a symmetric session key.
|
||||
*
|
||||
* @param algorithm symmetric key algorithm ID
|
||||
* @param key [ByteArray] containing the session key
|
||||
*/
|
||||
data class SessionKey(val algorithm: Byte, val key: ByteArray) {
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as SessionKey
|
||||
|
||||
if (algorithm != other.algorithm) return false
|
||||
if (!key.contentEquals(other.key)) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var hashCode = algorithm.toInt()
|
||||
hashCode = 31 * hashCode + key.contentHashCode()
|
||||
return hashCode
|
||||
}
|
||||
|
||||
override fun toString(): String = "$algorithm:${HexUtil.bytesToHex(key)}"
|
||||
|
||||
companion object {
|
||||
|
||||
@JvmStatic private val PATTERN = "^(\\d):([0-9A-F]+)$".toPattern()
|
||||
|
||||
@JvmStatic
|
||||
fun fromString(string: String): SessionKey {
|
||||
val matcher = PATTERN.matcher(string.trim().uppercase().replace("\n", ""))
|
||||
require(matcher.matches()) { "Provided session key does not match expected format." }
|
||||
return SessionKey(matcher.group(1).toByte(), HexUtil.hexToBytes(matcher.group(2)))
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue