public static KeyPair keyPairFor(SignatureAlgorithm alg) throws IllegalArgumentException {
        Assert.notNull(alg, "SignatureAlgorithm cannot be null.");
        switch (alg) {
            case RS256:
            case PS256:
            case RS384:
            case PS384:
            case RS512:
            case PS512:
                return Classes.invokeStatic(RSA, "generateKeyPair", SIG_ARG_TYPES, alg);
            case ES256:
            case ES384:
            case ES512:
                return Classes.invokeStatic(EC, "generateKeyPair", SIG_ARG_TYPES, alg);
            default:
                String msg = "The " + alg.name() + " algorithm does not support Key Pairs.";
                throw new IllegalArgumentException(msg);
        }
    }
public static KeyPair keyPairFor ( SignatureAlgorithm alg ) throws IllegalArgumentException { Assert . notNull ( alg , "SignatureAlgorithm cannot be null." ) ; switch ( alg ) { case RS256 : case PS256 : case RS384 : case PS384 : case RS512 : case PS512 : return Classes . invokeStatic ( RSA , "generateKeyPair" , SIG_ARG_TYPES , alg ) ; case ES256 : case ES384 : case ES512 : return Classes . invokeStatic ( EC , "generateKeyPair" , SIG_ARG_TYPES , alg ) ; default : String msg = "The " + alg . name ( ) + " algorithm does not support Key Pairs." ; throw new IllegalArgumentException ( msg ) ; } }
Returns a new {@link KeyPair} suitable for use with the specified asymmetric algorithm.

<p>If the {@code alg} argument is an RSA algorithm, a KeyPair is generated based on the following:</p>

<table>
<tr>
<th>JWA Algorithm</th>
<th>Key Size</th>
</tr>
<tr>
<td>RS256</td>
<td>2048 bits</td>
</tr>
<tr>
<td>PS256</td>
<td>2048 bits</td>
</tr>
<tr>
<td>RS384</td>
<td>3072 bits</td>
</tr>
<tr>
<td>PS384</td>
<td>3072 bits</td>
</tr>
<tr>
<td>RS512</td>
<td>4096 bits</td>
</tr>
<tr>
<td>PS512</td>
<td>4096 bits</td>
</tr>
</table>

<p>If the {@code alg} argument is an Elliptic Curve algorithm, a KeyPair is generated based on the following:</p>

<table>
<tr>
<th>JWA Algorithm</th>
<th>Key Size</th>
<th><a href="https://tools.ietf.org/html/rfc7518#section-7.6.2">JWA Curve Name</a></th>
<th><a href="https://tools.ietf.org/html/rfc5480#section-2.1.1.1">ASN1 OID Curve Name</a></th>
</tr>
<tr>
<td>EC256</td>
<td>256 bits</td>
<td>{@code P-256}</td>
<td>{@code secp256r1}</td>
</tr>
<tr>
<td>EC384</td>
<td>384 bits</td>
<td>{@code P-384}</td>
<td>{@code secp384r1}</td>
</tr>
<tr>
<td>EC512</td>
<td>512 bits</td>
<td>{@code P-521}</td>
<td>{@code secp521r1}</td>
</tr>
</table>

@param alg the {@code SignatureAlgorithm} to inspect to determine which asymmetric algorithm to use.
@return a new {@link KeyPair} suitable for use with the specified asymmetric algorithm.
@throws IllegalArgumentException if {@code alg} is not an asymmetric algorithm