[ 
https://issues.apache.org/jira/browse/CXF-7005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15414892#comment-15414892
 ] 

Behrang Saeedzadeh edited comment on CXF-7005 at 8/10/16 8:18 AM:
------------------------------------------------------------------

A Gradle project to reproduce the issue is attached (cxf-7005.zip):

{code}
package org.apache.issues;

import org.apache.cxf.rs.security.jose.jwa.KeyAlgorithm;
import org.apache.cxf.rs.security.jose.jwk.JsonWebKey;
import org.apache.cxf.rs.security.jose.jwk.JwkUtils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;

/**
 * @author Behrang Saeedzadeh
 */
public class Cxf7005 {

    public static void main(String[] args) throws NoSuchAlgorithmException, 
InvalidKeySpecException, IOException {
        final byte[] encodedKeyBytes = 
Files.readAllBytes(Paths.get("src/main/resources/cxf-7005.prv.der").toAbsolutePath());

        final PKCS8EncodedKeySpec keySpec = new 
PKCS8EncodedKeySpec(encodedKeyBytes);
        final KeyFactory keyFactory = KeyFactory.getInstance("RSA");

        final RSAPrivateKey contentEncryptionKey = (RSAPrivateKey) 
keyFactory.generatePrivate(keySpec);

        final JsonWebKey jsonWebKey = 
JwkUtils.fromRSAPrivateKey(contentEncryptionKey, 
KeyAlgorithm.RSA_OAEP_256.getJwaName());
        jsonWebKey.setKeyId("cxf-7005");

        JwkUtils.toRSAPrivateKey(jsonWebKey);
    }

}
{code}


was (Author: thorium):
A Gradle project to reproduce the issue is attached:

{code}
package org.apache.issues;

import org.apache.cxf.rs.security.jose.jwa.KeyAlgorithm;
import org.apache.cxf.rs.security.jose.jwk.JsonWebKey;
import org.apache.cxf.rs.security.jose.jwk.JwkUtils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;

/**
 * @author Behrang Saeedzadeh
 */
public class Cxf7005 {

    public static void main(String[] args) throws NoSuchAlgorithmException, 
InvalidKeySpecException, IOException {
        final byte[] encodedKeyBytes = 
Files.readAllBytes(Paths.get("src/main/resources/cxf-7005.prv.der").toAbsolutePath());

        final PKCS8EncodedKeySpec keySpec = new 
PKCS8EncodedKeySpec(encodedKeyBytes);
        final KeyFactory keyFactory = KeyFactory.getInstance("RSA");

        final RSAPrivateKey contentEncryptionKey = (RSAPrivateKey) 
keyFactory.generatePrivate(keySpec);

        final JsonWebKey jsonWebKey = 
JwkUtils.fromRSAPrivateKey(contentEncryptionKey, 
KeyAlgorithm.RSA_OAEP_256.getJwaName());
        jsonWebKey.setKeyId("cxf-7005");

        JwkUtils.toRSAPrivateKey(jsonWebKey);
    }

}
{code}

> NullPointerException when using JwkUtils.toRSAPrivateKey
> --------------------------------------------------------
>
>                 Key: CXF-7005
>                 URL: https://issues.apache.org/jira/browse/CXF-7005
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS Security
>    Affects Versions: 3.1.7
>            Reporter: Behrang Saeedzadeh
>         Attachments: cxf-7005.zip
>
>
> When an RSA private key is converted to a JWK and stored in a JSON Web Keys 
> file using the following code:
> {code}
> import test.CryptoUtils; // loads an RSA private key from file
> import org.apache.cxf.rs.security.jose.jwk.JsonWebKey;
> import org.apache.cxf.rs.security.jose.jwk.JsonWebKeys;
> import org.apache.cxf.rs.security.jose.jwk.JwkUtils;
> import java.io.FileNotFoundException;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import java.nio.file.Paths;
> import java.security.interfaces.RSAPrivateKey;
> import java.time.LocalDateTime;
> public class JwkCreator {
>     public static void main(String[] args) throws IOException {
>         final RSAPrivateKey privateKey = 
> CryptoUtils.loadRsaPrivateKey(Paths.get("private-key.der"));
>         final JsonWebKey jwk = JwkUtils.fromRSAPrivateKey(privateKey, 
> "RSA-OAEP-256");
>         jwk.setKeyId("test");
>         final JsonWebKeys webKeys = new JsonWebKeys(jwk);
>         JwkUtils.jwkSetToJson(webKeys, new FileOutputStream("jwk.json"));
>     }
> }
> {code}
> The generated file does not have a {{RSA_PUBLIC_EXP}} (i.e. the `e`) property:
> {code}
> {
>   "keys": [
>     {
>       "kty": "RSA",
>       "alg": "RSA-OAEP-256",
>       "n": "...",
>       "d": "...",
>       "p": "...",
>       "q": "...",
>       "dp": "...",
>       "dq": "...",
>       "qi": "...",
>       "kid": "test"
>     }
>   ]
> }
> {code}
> Consequently, when trying to use {{JwkUtils.toRSAPrivateKey}} to convert the 
> JWK to a private key, a NullPointerException is thrown due to the following 
> statement in {{JwkUtils.java}}:
> {code}
> return CryptoUtils.getRSAPrivateKey(encodedModulus, 
>                                                 encodedPublicExponent,
>                                                 encodedPrivateExponent,
>                                                 encodedPrimeP,
>                                                 encodedPrimeQ,
>                                                 encodedPrimeExpP,
>                                                 encodedPrimeExpQ,
>                                                 encodedCrtCoefficient);
> {code}
> which in turn calls {{CryptoUtils.decodeSequence(encodedPublicExponent)}} on 
> a {{null}} value.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to