1 package civitas.crypto.rsapublickey;
2
3 import static org.junit.jupiter.api.Assertions.assertFalse;
4 import static org.junit.jupiter.api.Assertions.assertTrue;
5 import static org.mockito.Mockito.verify;
6
7 import org.bouncycastle.crypto.CryptoException;
8 import org.junit.jupiter.api.DisplayName;
9 import org.junit.jupiter.api.Test;
10 import org.mockito.InjectMocks;
11
12 import civitas.crypto.rsaprivatekey.PrivateKeyTestData;
13 import civitas.crypto.signature.SignatureTestData;
14 import civitas.util.BasicValuesTestData;
15 import io.github.magwas.testing.TestBase;
16
17 class IsPublicKeyAuthorizedTest extends TestBase
18 implements PublicKeyTestData, BasicValuesTestData, SignatureTestData, PrivateKeyTestData {
19
20 @InjectMocks
21 IsPublicKeyAuthorized isPublicKeyAuthorized;
22
23 @Test
24 @DisplayName(
25 """
26 isAuthorized checks if the private key is belonging to the public key
27 - creates a new base64 nonce
28 - signs the nonce with the private key
29 - verifies that the signature is verifiable with the public key
30 """)
31 void test2() throws CryptoException {
32 boolean actual = isPublicKeyAuthorized.apply(PUBLIC_KEY, PRIVATE_KEY);
33 verify(isPublicKeyAuthorized.createFreshNonceBase64).apply(AUTHENTICATION_NONCE_LENGTH);
34 verify(isPublicKeyAuthorized.signWithPublicKey).apply(PRIVATE_KEY, PUBLIC_KEY, AUTHENTICATION_NONCE);
35 verify(isPublicKeyAuthorized.verifyPublicKeySignature)
36 .apply(SIGNATURE_OF_AUTH_NONCE_WITH_KEY, PUBLIC_KEY, AUTHENTICATION_NONCE);
37 assertTrue(actual);
38 }
39
40 @Test
41 @DisplayName("isAuthorized is false for other private key")
42 void test2_2() throws CryptoException {
43 assertFalse(isPublicKeyAuthorized.apply(PUBLIC_KEY, PRIVATE_KEY2));
44 }
45 }