mirror of
https://codeberg.org/PGPainless/sop-java.git
synced 2024-11-29 10:32:08 +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