You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oltu.apache.org by si...@apache.org on 2010/07/11 15:57:47 UTC

svn commit: r963074 - in /incubator/amber/trunk/signature-api/src/main: java/org/apache/amber/signature/rsa/ javacc/

Author: simonetripodi
Date: Sun Jul 11 13:57:47 2010
New Revision: 963074

URL: http://svn.apache.org/viewvc?rev=963074&view=rev
Log:
the parser returns directly the private/public RSA key

Modified:
    incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/AbstractRsaSha1Key.java
    incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1SigningKey.java
    incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1VeifyingKey.java
    incubator/amber/trunk/signature-api/src/main/javacc/PemCertificateParser.jj

Modified: incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/AbstractRsaSha1Key.java
URL: http://svn.apache.org/viewvc/incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/AbstractRsaSha1Key.java?rev=963074&r1=963073&r2=963074&view=diff
==============================================================================
--- incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/AbstractRsaSha1Key.java (original)
+++ incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/AbstractRsaSha1Key.java Sun Jul 11 13:57:47 2010
@@ -24,7 +24,6 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 
-import org.apache.amber.signature.Key;
 import org.apache.amber.signature.SignatureException;
 
 /**
@@ -32,11 +31,11 @@ import org.apache.amber.signature.Signat
  *
  * @version $Id$
  */
-abstract class AbstractRsaSha1Key implements Key {
+abstract class AbstractRsaSha1Key implements org.apache.amber.signature.Key {
 
     private static final String[] METHODS = { "RSA-SHA1" };
 
-    private final byte[] byteValue;
+    private final java.security.Key keyValue;
 
     /**
      * Loads a key from a certificate located in the classpath.
@@ -63,7 +62,7 @@ abstract class AbstractRsaSha1Key implem
                     + "' not found, please make sure it exists in the classpath");
         }
 
-        this.byteValue = this.readCertificate(certificateURL);
+        this.keyValue = this.readCertificate(certificateURL);
     }
 
     /**
@@ -83,7 +82,7 @@ abstract class AbstractRsaSha1Key implem
         }
 
         try {
-            this.byteValue = this.readCertificate(certificateFileLocation.toURI().toURL());
+            this.keyValue = this.readCertificate(certificateFileLocation.toURI().toURL());
         } catch (MalformedURLException e) {
             throw new SignatureException("Impossible to read the certificate from '"
                     + certificateFileLocation
@@ -102,10 +101,10 @@ abstract class AbstractRsaSha1Key implem
             throw new SignatureException("parameter 'certificateURL' must not be null");
         }
 
-        this.byteValue = this.readCertificate(certificateURL);
+        this.keyValue = this.readCertificate(certificateURL);
     }
 
-    private byte[] readCertificate(URL certificateURL) throws SignatureException {
+    private java.security.Key readCertificate(URL certificateURL) throws SignatureException {
         URLConnection urlConnection = null;
         InputStream input = null;
 
@@ -133,16 +132,16 @@ abstract class AbstractRsaSha1Key implem
         }
     }
 
-    public final byte[] getByteValue() {
-        return this.byteValue;
+    public java.security.Key getKeyValue() {
+        return this.keyValue;
     }
 
     @Override
     public final String getValue() {
-        return new String(this.byteValue);
+        return String.valueOf(this.keyValue);
     }
 
-    protected abstract byte[] readCertificate(InputStream input) throws Exception;
+    protected abstract java.security.Key readCertificate(InputStream input) throws Exception;
 
     /**
      * {@inheritDoc}

Modified: incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1SigningKey.java
URL: http://svn.apache.org/viewvc/incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1SigningKey.java?rev=963074&r1=963073&r2=963074&view=diff
==============================================================================
--- incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1SigningKey.java (original)
+++ incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1SigningKey.java Sun Jul 11 13:57:47 2010
@@ -19,6 +19,7 @@ package org.apache.amber.signature.rsa;
 import java.io.File;
 import java.io.InputStream;
 import java.net.URL;
+import java.security.Key;
 
 import org.apache.amber.signature.SignatureException;
 import org.apache.amber.signature.SigningKey;
@@ -50,7 +51,7 @@ public final class PemRsaSha1SigningKey
      * {@inheritDoc}
      */
     @Override
-    protected byte[] readCertificate(InputStream input) throws Exception {
+    protected Key readCertificate(InputStream input) throws Exception {
         PemCertificateParser pemCertificateParser = new PemCertificateParser(input);
         return pemCertificateParser.parsePrivateKey();
     }

Modified: incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1VeifyingKey.java
URL: http://svn.apache.org/viewvc/incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1VeifyingKey.java?rev=963074&r1=963073&r2=963074&view=diff
==============================================================================
--- incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1VeifyingKey.java (original)
+++ incubator/amber/trunk/signature-api/src/main/java/org/apache/amber/signature/rsa/PemRsaSha1VeifyingKey.java Sun Jul 11 13:57:47 2010
@@ -19,6 +19,7 @@ package org.apache.amber.signature.rsa;
 import java.io.File;
 import java.io.InputStream;
 import java.net.URL;
+import java.security.Key;
 
 import org.apache.amber.signature.SignatureException;
 import org.apache.amber.signature.SigningKey;
@@ -50,7 +51,7 @@ public final class PemRsaSha1VeifyingKey
      * {@inheritDoc}
      */
     @Override
-    protected byte[] readCertificate(InputStream input) throws Exception {
+    protected Key readCertificate(InputStream input) throws Exception {
         PemCertificateParser pemCertificateParser = new PemCertificateParser(input);
         return pemCertificateParser.parsePublicCertificate();
     }

Modified: incubator/amber/trunk/signature-api/src/main/javacc/PemCertificateParser.jj
URL: http://svn.apache.org/viewvc/incubator/amber/trunk/signature-api/src/main/javacc/PemCertificateParser.jj?rev=963074&r1=963073&r2=963074&view=diff
==============================================================================
--- incubator/amber/trunk/signature-api/src/main/javacc/PemCertificateParser.jj (original)
+++ incubator/amber/trunk/signature-api/src/main/javacc/PemCertificateParser.jj Sun Jul 11 13:57:47 2010
@@ -19,6 +19,11 @@ package org.apache.amber.signature.rsa;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.security.KeyFactory;
+import java.security.interfaces.RSAPrivateKey;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
 
 import org.apache.commons.codec.binary.Base64OutputStream;
 
@@ -29,6 +34,18 @@ import org.apache.commons.codec.binary.B
  */
 final class PemCertificateParser {
 
+    private static final String RSA_NAME = "RSA";
+
+    private static KeyFactory getRsaKeyFactory() {
+        try {
+            return KeyFactory.getInstance(RSA_NAME);
+        } catch (Exception e) {
+            throw new RuntimeException("Impossible to instantiate the RSA KeyFactory", e);
+        }
+    }
+
+    private final KeyFactory keyFactory = getRsaKeyFactory();
+
     private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
     private final Base64OutputStream output = new Base64OutputStream(baos, false);
@@ -49,28 +66,40 @@ TOKEN : {
     | <CERTIFICATE_CONTENT : (["a"-"z","A"-"Z","0"-"9","+","/","="])+>
 }
 
-public byte[] parsePrivateKey() : { }
+public RSAPrivateKey parsePrivateKey() throws Exception : { }
 {
     <BEGIN_PRIVATE_KEY> [ certificateContent() ]  <END_PRIVATE_KEY> <EOF> {
         try {
-            this.output.close();
-            this.baos.close();
-            return this.baos.toByteArray();
-        } catch (IOException e) {
-            throw new ParseException("Fatal protocol error: " + e.getMessage());
+            PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(this.baos.toByteArray());
+            return (RSAPrivateKey) this.keyFactory.generatePrivate(privSpec);
+        } catch (Exception e) {
+            throw e;
+        } finally {
+            try {
+                this.output.close();
+                this.baos.close();
+            } catch (IOException e) {
+                // close quietly
+            }
         }
     }
 }
 
-public byte[] parsePublicCertificate() : { }
+public RSAPublicKey parsePublicCertificate() throws Exception : { }
 {
     <BEGIN_CERTIFICATE> [ certificateContent() ]  <END_CERTIFICATE> <EOF> {
         try {
-            this.output.close();
-            this.baos.close();
-            return this.baos.toByteArray();
-        } catch (IOException e) {
-            throw new ParseException("Fatal protocol error: " + e.getMessage());
+            X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(this.baos.toByteArray());
+            return (RSAPublicKey) this.keyFactory.generatePublic(pubSpec);
+        } catch (Exception e) {
+            throw e;
+        } finally {
+            try {
+                this.output.close();
+                this.baos.close();
+            } catch (IOException e) {
+                // close quietly
+            }
         }
     }
 }