ProtocolLib/src/test/java/com/comphenix/protocol/wrappers/WrappedSaltedSignatureTest.java

88 lines
3.4 KiB
Java

package com.comphenix.protocol.wrappers;
import com.comphenix.protocol.BukkitInitialization;
import java.util.concurrent.ThreadLocalRandom;
import net.minecraft.util.MinecraftEncryption;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class WrappedSaltedSignatureTest {
@BeforeAll
static void initializeBukkit() {
BukkitInitialization.initializeAll();
}
@Test
void testLoginSignature() {
long salt = ThreadLocalRandom.current().nextLong();
byte[] signature = new byte[512];
ThreadLocalRandom.current().nextBytes(signature);
// test key data conversion
WrappedSaltedSignature loginSignature = new WrappedSaltedSignature(salt, signature);
Object handle = loginSignature.getHandle();
MinecraftEncryption.b data = assertInstanceOf(MinecraftEncryption.b.class, handle);
assertTrue(data.a());
assertArrayEquals(signature, data.d());
assertEquals(salt, data.c());
// test key data unwrapping
WrappedSaltedSignature unwrapped = BukkitConverters.getWrappedSignatureConverter().getSpecific(data);
assertNotNull(unwrapped);
assertTrue(unwrapped.isSigned());
assertEquals(loginSignature.getSalt(), unwrapped.getSalt());
assertArrayEquals(loginSignature.getSignature(), unwrapped.getSignature());
assertArrayEquals(loginSignature.getSaltBytes(), unwrapped.getSaltBytes());
// test key data wrapping
Object wrappedData = BukkitConverters.getWrappedSignatureConverter().getGeneric(loginSignature);
MinecraftEncryption.b wrapped = assertInstanceOf(MinecraftEncryption.b.class, wrappedData);
assertTrue(wrapped.a());
assertEquals(loginSignature.getSalt(), wrapped.c());
assertArrayEquals(loginSignature.getSignature(), wrapped.d());
assertArrayEquals(loginSignature.getSaltBytes(), wrapped.b());
}
@Test
void testSignedMessageWithoutSignature() {
long salt = ThreadLocalRandom.current().nextLong();
byte[] signature = {};
// test key data conversion
WrappedSaltedSignature loginSignature = new WrappedSaltedSignature(salt, signature);
Object handle = loginSignature.getHandle();
MinecraftEncryption.b data = assertInstanceOf(MinecraftEncryption.b.class, handle);
assertFalse(data.a());
assertArrayEquals(signature, data.d());
assertEquals(salt, data.c());
// test key data unwrapping
WrappedSaltedSignature unwrapped = BukkitConverters.getWrappedSignatureConverter().getSpecific(data);
assertNotNull(unwrapped);
assertFalse(unwrapped.isSigned());
assertEquals(loginSignature.getSalt(), unwrapped.getSalt());
assertArrayEquals(loginSignature.getSignature(), unwrapped.getSignature());
assertArrayEquals(loginSignature.getSaltBytes(), unwrapped.getSaltBytes());
// test key data wrapping
Object wrappedData = BukkitConverters.getWrappedSignatureConverter().getGeneric(loginSignature);
MinecraftEncryption.b wrapped = assertInstanceOf(MinecraftEncryption.b.class, wrappedData);
assertFalse(wrapped.a());
assertEquals(loginSignature.getSalt(), wrapped.c());
assertArrayEquals(loginSignature.getSignature(), wrapped.d());
assertArrayEquals(loginSignature.getSaltBytes(), wrapped.b());
}
}