1 package civitas.crypto.parameters;
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.RandomAwareTestBase;
11 import civitas.crypto.Constants;
12 import civitas.crypto.rsaprivatekey.PrivateKeyTestData;
13
14 class GenerateSafePrimeTest extends RandomAwareTestBase
15 implements Constants, ElGamalParametersTestData, PrivateKeyTestData {
16
17 @InjectMocks
18 GenerateSafePrime generateSafePrime;
19
20 @Test
21 @DisplayName("safePrime returns two primes p,q where p=2*q+1, and length of q is length ")
22 void safePrimeTest() {
23 PrimePair sp = generateSafePrime.apply(SAFE_KEY_LENGTH);
24 assertTrue(sp.p.isProbablePrime(CERTAINTY));
25 assertTrue(sp.q.isProbablePrime(CERTAINTY));
26 assertEquals(sp.p, sp.q.multiply(TWO).add(ONE));
27 assertEquals(SAFE_KEY_LENGTH, sp.q.bitLength());
28 }
29 }