1 package civitas.crypto.parameters.tests;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.junit.jupiter.api.Assertions.assertTrue;
5
6 import org.junit.jupiter.api.DisplayName;
7 import org.junit.jupiter.api.Test;
8 import org.mockito.InjectMocks;
9
10 import civitas.common.tests.RandomAwareTestBase;
11 import civitas.crypto.Constants;
12 import civitas.crypto.parameters.GenerateSafePrime;
13 import civitas.crypto.parameters.PrimePair;
14 import civitas.crypto.rsaprivatekey.tests.PrivateKeyTestData;
15
16 class GenerateSafePrimeTest extends RandomAwareTestBase
17 implements Constants, ElGamalParametersTestData, PrivateKeyTestData {
18
19 @InjectMocks
20 GenerateSafePrime generateSafePrime;
21
22 @Test
23 @DisplayName("safePrime returns two primes p,q where p=2*q+1, and length of q is length ")
24 void safePrimeTest() {
25 PrimePair sp = generateSafePrime.apply(SAFE_KEY_LENGTH);
26 assertTrue(sp.p.isProbablePrime(CERTAINTY));
27 assertTrue(sp.q.isProbablePrime(CERTAINTY));
28 assertEquals(sp.p, sp.q.multiply(TWO).add(ONE));
29 assertEquals(SAFE_KEY_LENGTH, sp.q.bitLength());
30 }
31 }