Author: ogusakov
Date: Mon Aug 11 17:05:29 2008
New Revision: 684994

URL: http://svn.apache.org/viewvc?rev=684994&view=rev
Log:
implemented PGP signatures, changed StreamVerifier modus operandi to get 
initialized with signature upfront as crypto signature needs that. Changed http 
client to follow this new paradigm

Modified:
    
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/AbstractStreamVerifierFactory.java
    
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java
    
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifier.java
    
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierException.java
    
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierFactory.java
    
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java
    
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1VerifierFactory.java
    
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableInputStream.java
    
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableOutputStream.java
    
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java
    
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java
    
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java

Modified: 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/AbstractStreamVerifierFactory.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/AbstractStreamVerifierFactory.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/AbstractStreamVerifierFactory.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/AbstractStreamVerifierFactory.java
 Mon Aug 11 17:05:29 2008
@@ -1,7 +1,7 @@
 package org.apache.maven.mercury.crypto.api;
 
 /**
- *
+ * Helper for implementing stream verifier factories, takes care of attributes
  *
  * @author Oleg Gusakov
  * @version $Id$

Modified: 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamObserver.java
 Mon Aug 11 17:05:29 2008
@@ -20,6 +20,10 @@
 
 public interface StreamObserver
 {
-    void byteReady(int b);
-    void bytesReady(byte[]b, int off, int len);
+    void byteReady(int b)
+    throws StreamObserverException;
+    
+    void bytesReady(byte[]b, int off, int len)
+    throws StreamObserverException;
+
 }

Modified: 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifier.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifier.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifier.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifier.java
 Mon Aug 11 17:05:29 2008
@@ -18,11 +18,24 @@
  */
 package org.apache.maven.mercury.crypto.api;
 
+import java.io.InputStream;
+
 public interface StreamVerifier
 extends StreamObserver
 {
   public StreamVerifierAttributes getAttributes();
 
-  public String getSignature();
-  public boolean verifySignature( String signature );
+  public String getSignature()
+  throws StreamVerifierException;
+  
+  // to verify stream: initSignature( InputStream signatureStream ), process 
stream, then verifySignature()
+  public void initSignature( String signatureStream )
+  throws StreamVerifierException;
+  
+  public boolean verifySignature()
+  throws StreamVerifierException;
+  
+//  public boolean verifySignature( String signature )
+//  throws StreamVerifierException;
+
 }

Modified: 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierException.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierException.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierException.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierException.java
 Mon Aug 11 17:05:29 2008
@@ -8,7 +8,7 @@
  *
  */
 public class StreamVerifierException
-    extends Exception
+extends StreamObserverException
 {
 
   /**
@@ -22,11 +22,9 @@
   /**
    * @param message
    */
-  public StreamVerifierException(
-      String message )
+  public StreamVerifierException( String message )
   {
     super( message );
-    // TODO Auto-generated constructor stub
   }
 
   /**

Modified: 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierFactory.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierFactory.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierFactory.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-api/src/main/java/org/apache/maven/mercury/crypto/api/StreamVerifierFactory.java
 Mon Aug 11 17:05:29 2008
@@ -20,6 +20,8 @@
 
 public interface StreamVerifierFactory
 {
-  public StreamVerifier newInstance();
+  public StreamVerifier newInstance()
+  throws StreamVerifierException;
+  
   public String getDefaultExtension();
 }

Modified: 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1Verifier.java
 Mon Aug 11 17:05:29 2008
@@ -19,12 +19,17 @@
 
 package org.apache.maven.mercury.crypto.sha;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
 import org.apache.maven.mercury.crypto.api.AbstractStreamVerifier;
 import org.apache.maven.mercury.crypto.api.StreamVerifier;
 import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes;
+import org.apache.maven.mercury.crypto.api.StreamVerifierException;
 import org.apache.maven.mercury.crypto.basic.ChecksumCalculator;
 
 
@@ -42,6 +47,8 @@
     private MessageDigest digest;
     private byte[] digestBytes;
     
+    private String sig;
+    
     public SHA1Verifier( StreamVerifierAttributes attributes )
     {
       super( attributes );
@@ -56,12 +63,7 @@
       }
     }
 
-    public String getExtension()
-    {
-        return '.'+SHA1VerifierFactory.DEFAULT_EXTENSION;
-    }
-
-    public byte[] getSignatureBytes ()
+    private byte[] getSignatureBytes ()
     {
         if (digestBytes == null)
             digestBytes = digest.digest();
@@ -72,14 +74,27 @@
     {
         return ChecksumCalculator.encodeToAsciiHex( getSignatureBytes() );
     }
+    
+    public void initSignature( String signatureString )
+    throws StreamVerifierException
+    {
+      if( signatureString == null || signatureString.length() < 1 )
+        throw new IllegalArgumentException("null signature stream");
+      
+      sig =  signatureString;
+    
+    }
 
-    public boolean verifySignature(String sig)
+    public boolean verifySignature()
     {
         String calculatedSignature = getSignature();
+
         if (calculatedSignature == null && sig == null)
             return true;
+
         if ((calculatedSignature != null) && calculatedSignature.equals(sig))
             return true;
+        
         return false;
     }
 

Modified: 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1VerifierFactory.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1VerifierFactory.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1VerifierFactory.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-crypto/mercury-crypto-basic/src/main/java/org/apache/maven/mercury/crypto/sha/SHA1VerifierFactory.java
 Mon Aug 11 17:05:29 2008
@@ -45,9 +45,6 @@
      return new SHA1Verifier( attributes );
   }
 
-  /* (non-Javadoc)
-   * @see 
org.apache.maven.mercury.crypto.api.StreamVerifierFactory#getDefaultExtension()
-   */
   public String getDefaultExtension()
   {
     return DEFAULT_EXTENSION;

Modified: 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableInputStream.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableInputStream.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableInputStream.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableInputStream.java
 Mon Aug 11 17:05:29 2008
@@ -27,10 +27,12 @@
 import java.util.Set;
 
 import org.apache.maven.mercury.crypto.api.StreamObserver;
+import org.apache.maven.mercury.crypto.api.StreamObserverException;
 
 
 
-public class ObservableInputStream extends FilterInputStream
+public class ObservableInputStream
+extends FilterInputStream
 {
     Set<StreamObserver> observers = new HashSet<StreamObserver>();
 
@@ -39,7 +41,8 @@
         super(in);
     }
 
-    public int read(byte[] b, int off, int len) throws IOException
+    public int read(byte[] b, int off, int len)
+    throws IOException
     {
         int result = in.read(b, off, len);
         if (result != -1) 
@@ -78,23 +81,39 @@
     }
     
     private void notifyListeners (byte[]b, int off, int len)
+    throws IOException
     {
         synchronized (this.observers)
         {
             for (StreamObserver o: this.observers)
             {
-                o.bytesReady(b, off, len);
+                try
+                {
+                  o.bytesReady(b, off, len);
+                }
+                catch( StreamObserverException e )
+                {
+                  throw new IOException(e.getMessage());
+                }
             }
         }
     }
 
     private void notifyListeners (int b)
+    throws IOException
     {
         synchronized (this.observers)
         {
             for (StreamObserver o: this.observers)
             {
-                o.byteReady(b);
+                try
+                {
+                  o.byteReady(b);
+                }
+                catch( StreamObserverException e )
+                {
+                  throw new IOException(e.getMessage());
+                }
             }
         }
     } 

Modified: 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableOutputStream.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableOutputStream.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableOutputStream.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/ObservableOutputStream.java
 Mon Aug 11 17:05:29 2008
@@ -28,6 +28,7 @@
 import java.util.Set;
 
 import org.apache.maven.mercury.crypto.api.StreamObserver;
+import org.apache.maven.mercury.crypto.api.StreamObserverException;
 
 
 
@@ -68,23 +69,39 @@
         }
     }
     private void notifyListeners (byte[]b, int off, int len)
+    throws IOException
     {
         synchronized (this.observers)
         {
             for (StreamObserver o: this.observers)
             {
-                o.bytesReady(b, off, len);
+                try
+                {
+                  o.bytesReady(b, off, len);
+                }
+                catch( StreamObserverException e )
+                {
+                  throw new IOException(e.getMessage());
+                }
             }
         }
     }
 
     private void notifyListeners (int b)
+    throws IOException
     {
         synchronized (this.observers)
         {
             for (StreamObserver o: this.observers)
             {
-                o.byteReady(b);
+                try
+                {
+                  o.byteReady(b);
+                }
+                catch( StreamObserverException e )
+                {
+                  throw new IOException(e.getMessage());
+                }
             }
         }
     }

Modified: 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java
 Mon Aug 11 17:05:29 2008
@@ -32,6 +32,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.maven.mercury.crypto.api.StreamObserver;
+import org.apache.maven.mercury.crypto.api.StreamVerifierException;
 import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
 import org.apache.maven.mercury.spi.http.client.FileExchange;
 import org.apache.maven.mercury.spi.http.client.HandshakeExchange;
@@ -326,12 +327,13 @@
     }
     
     private Set<StreamObserver> createStreamObservers (Server server)
+    throws StreamVerifierException
     {
         HashSet<StreamObserver> observers = new HashSet<StreamObserver>();
         Set<StreamVerifierFactory> factories = 
server.getStreamObserverFactories();
         for (StreamVerifierFactory f:factories)
         {
-            observers.add(f.newInstance());
+            observers.add( f.newInstance() );
         }
         return observers;
     }

Modified: 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java
 Mon Aug 11 17:05:29 2008
@@ -30,6 +30,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.maven.mercury.crypto.api.StreamObserver;
+import org.apache.maven.mercury.crypto.api.StreamVerifierException;
 import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
 import org.apache.maven.mercury.spi.http.client.HttpClientException;
 import org.apache.maven.mercury.transport.api.Binding;
@@ -175,10 +176,18 @@
                     public void onComplete()
                     {
                         //got the file, check the checksum
-                        boolean checksumOK = verifyChecksum();
-                        if ( !checksumOK )
+                        boolean checksumOK = false;
+                        try
                         {
-                            response.add( new HttpClientException( binding, 
"Checksum failed") );
+                          checksumOK = verifyChecksum();
+                          if ( !checksumOK )
+                          {
+                              response.add( new HttpClientException( binding, 
"Checksum failed") );
+                          }
+                        }
+                        catch( StreamVerifierException e )
+                        {
+                          response.add( new HttpClientException( binding, 
e.getMessage()) );
                         }
 
                         //if the file checksum is ok, then apply the validators
@@ -297,16 +306,16 @@
         return server;
     }
     
-    
     private Set<StreamObserver> createStreamObservers (Server server)
+    throws StreamVerifierException
     {
         HashSet<StreamObserver> observers = new HashSet<StreamObserver>();
         if (server != null)
         {
             Set<StreamVerifierFactory> factories = 
server.getStreamObserverFactories();
-            for (StreamVerifierFactory f:factories)
+            for( StreamVerifierFactory f:factories )
             {
-                observers.add(f.newInstance());
+                observers.add( f.newInstance() );
             }
         }
         return observers;

Modified: 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java?rev=684994&r1=684993&r2=684994&view=diff
==============================================================================
--- 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
 (original)
+++ 
maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
 Mon Aug 11 17:05:29 2008
@@ -34,6 +34,7 @@
 
 import org.apache.maven.mercury.crypto.api.StreamObserver;
 import org.apache.maven.mercury.crypto.api.StreamVerifier;
+import org.apache.maven.mercury.crypto.api.StreamVerifierException;
 import org.apache.maven.mercury.spi.http.client.FileExchange;
 import org.apache.maven.mercury.spi.http.client.HttpClientException;
 import org.apache.maven.mercury.spi.http.validate.Validator;
@@ -243,8 +244,10 @@
      * Check the actual checksum against the expected checksum
      *
      * @return
+     * @throws StreamVerifierException 
      */
     public boolean verifyChecksum()
+    throws StreamVerifierException
     {
         boolean ok = true;
         
@@ -254,7 +257,7 @@
             while (itor.hasNext() && ok)
             {               
                 Map.Entry<StreamVerifier, String> e = itor.next();
-                ok = e.getKey().verifySignature(e.getValue());
+                ok = e.getKey().verifySignature();
             }
         }
         
@@ -371,9 +374,19 @@
                     //We got a checksum so match it up with the verifier it is 
for
                     synchronized (_verifierMap)
                     {
-                        if (v.getAttributes().isSufficient())
+                        if( v.getAttributes().isSufficient() )
                             _verifierMap.clear(); //remove all other entries, 
we only need one checksum
-                        _verifierMap.put(v, getResponseContent().trim());
+                        
+                        String actualSignature = getResponseContent().trim(); 
+                        try
+                        { // Oleg: verifier need to be loaded upfront
+                          v.initSignature( actualSignature );
+                        }
+                        catch( StreamVerifierException e )
+                        {
+                          throw new IOException(e.getMessage());
+                        }
+                        _verifierMap.put( v, actualSignature );
                     }
                     updateChecksumState(index, null);
                 }


Reply via email to