You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/08/24 19:21:41 UTC

svn commit: r688532 - in /maven/sandbox/trunk/mercury: mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/ mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/ mercury-util/sr...

Author: ogusakov
Date: Sun Aug 24 10:21:40 2008
New Revision: 688532

URL: http://svn.apache.org/viewvc?rev=688532&view=rev
Log:
added signature and verification tests, added repo manager

Added:
    maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryManager.java
    maven/sandbox/trunk/mercury/mercury-util/src/test/
    maven/sandbox/trunk/mercury/mercury-util/src/test/java/
    maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/
    maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/
    maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/
    maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/mercury/
    maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/mercury/util/
    maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/mercury/util/FileUtilTest.java
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar   (with props)
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.asc
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.sha1
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/bad.asc
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/pubring.gpg   (with props)
    maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/secring.gpg   (with props)
Modified:
    maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java
    maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java
    maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java
    maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties

Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java?rev=688532&r1=688531&r2=688532&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java Sun Aug 24 10:21:40 2008
@@ -1,5 +1,7 @@
 package org.apache.maven.mercury.repository.api;
 
+import java.util.List;
+
 import org.apache.maven.mercury.transport.api.Server;
 
 
@@ -27,5 +29,8 @@
 public interface RemoteRepository
 extends Repository
 {
+  /**
+   *  this is the Server with many useful fields to describe the home of this remote repo
+   */
     Server getServer();
 }

Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryManager.java?rev=688532&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryManager.java (added)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryManager.java Sun Aug 24 10:21:40 2008
@@ -0,0 +1,39 @@
+package org.apache.maven.mercury.repository.api;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.mercury.artifact.Quality;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class RepositoryManager
+{
+  protected static transient List<Repository> _repoList = Collections.synchronizedList( new ArrayList<Repository>(8) );
+  
+  void setRepositories()
+  {
+    
+  }
+  
+  List<Repository> getRepositories()
+  {
+    return _repoList;
+  }
+  
+  LocalRepository findLocal( Quality aq )
+  {
+    for( Repository r : _repoList )
+    {
+      if( r.isLocal() && !r.isReadOnly() && r.isAcceptedQuality( aq ) )
+        return (LocalRepository)r;
+    }
+    return null;
+  }
+}

Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java?rev=688532&r1=688531&r2=688532&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java Sun Aug 24 10:21:40 2008
@@ -2,6 +2,7 @@
 
 import org.apache.maven.mercury.builder.api.MetadataProcessor;
 import org.apache.maven.mercury.repository.api.AbstractRepository;
+import org.apache.maven.mercury.repository.api.LocalRepository;
 import org.apache.maven.mercury.repository.api.NonExistentProtocolException;
 import org.apache.maven.mercury.repository.api.RemoteRepository;
 import org.apache.maven.mercury.repository.api.RepositoryException;
@@ -68,4 +69,12 @@
     }
     //----------------------------------------------------------------------------------
     //----------------------------------------------------------------------------------
+    /* (non-Javadoc)
+     * @see org.apache.maven.mercury.repository.api.RemoteRepository#addLocalRepository(org.apache.maven.mercury.repository.api.LocalRepository)
+     */
+    public void addLocalRepository( LocalRepository localRepo )
+    {
+      // TODO Auto-generated method stub
+      
+    }
 }

Modified: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java?rev=688532&r1=688531&r2=688532&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java (original)
+++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java Sun Aug 24 10:21:40 2008
@@ -10,6 +10,8 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.security.acl.Group;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -21,6 +23,7 @@
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.cli.OptionGroup;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.maven.mercury.crypto.api.StreamObserverException;
@@ -92,10 +95,14 @@
    
   }
   //---------------------------------------------------------------------------------------------------------------
-  private static void copyFile( File f, File toDir )
+  private static void copyFile( File f, File toFile )
   throws IOException
   {
-    File fOut = new File(toDir, f.getName() );
+    File fOut = null;
+    if( toFile.isDirectory() )
+      fOut = new File(toFile, f.getName() );
+    else
+      fOut = toFile;
     FileInputStream fis = new FileInputStream(f);
     writeRawData( fOut, fis );
   }
@@ -331,7 +338,7 @@
     
   }
   //---------------------------------------------------------------------------------------------------------------
-  public static void sign( File f, Set<StreamVerifierFactory> vFacs, boolean force )
+  public static void sign( File f, Set<StreamVerifierFactory> vFacs, boolean recurse, boolean force )
   throws IOException, StreamObserverException
   {
     if( vFacs == null || vFacs.size() < 1 )
@@ -339,9 +346,12 @@
 
     if( f.isDirectory() )
     {
+      if( ! recurse )
+        return;
+      
       File [] kids = f.listFiles();
       for( File kid : kids )
-        sign( kid, vFacs, force );
+        sign( kid, vFacs, recurse, force );
       return;
     }
     
@@ -398,10 +408,103 @@
     
   }
   //---------------------------------------------------------------------------------------------------------------
+  public static void verify( File f, Set<StreamVerifierFactory> vFacs, boolean recurse, boolean force )
+  throws IOException, StreamObserverException
+  {
+    if( vFacs == null || vFacs.size() < 1 )
+      return;
+
+    if( f.isDirectory() )
+    {
+      if( !recurse )
+        return;
+
+      File [] kids = f.listFiles();
+      for( File kid : kids )
+        verify( kid, vFacs, recurse, force );
+      return;
+    }
+    
+    String fName = f.getAbsolutePath();
+    
+    HashSet<StreamVerifier> vs = new HashSet<StreamVerifier>( vFacs.size() );
+    for( StreamVerifierFactory vf : vFacs )
+    {
+      StreamVerifier sv = vf.newInstance();
+      String ext = sv.getAttributes().getExtension();
+      
+      // don't verify signature files
+      if( fName.endsWith( ext ) )
+        return;
+
+      File sf = new File( fName+ext );
+      if( !sf.exists() )
+      {
+        if( force )
+          throw new StreamVerifierException( _lang.getMessage( "no.mandatory.signature", f.getAbsolutePath(), sf.getAbsolutePath() ));
+        else
+          continue;
+      }
+      else
+      {
+        String sig = readRawDataAsString( sf );
+        sv.initSignature( sig );
+      }
+      vs.add( sv );
+    }
+    
+    byte [] buf = new byte[ DEFAULT_BUFFER_SIZE ];
+    FileInputStream fis = null;
+    try
+    {
+      fis = new FileInputStream( f );
+      int n = -1;
+      
+      while( (n=fis.read( buf )) != -1 )
+      {
+        for( StreamVerifier sv : vs )
+        {
+          sv.bytesReady( buf, 0, n );
+        }
+      }
+      
+      List<String> fl = null;
+      char comma = ' ';
+      
+      for( StreamVerifier sv : vs )
+      {
+        if( sv.verifySignature() )
+          continue;
+        
+        if( fl == null )
+          fl = new ArrayList<String>(4);
+        
+        fl.add( sv.getAttributes().getExtension().replace( '.', comma ) );
+        comma = ',';
+      }
+      
+      if( fl != null )
+      {
+        throw new StreamVerifierException( _lang.getMessage( "file.failed.verification", f.getAbsolutePath(), fl.toString() ) );
+      }
+    }
+    finally
+    {
+      if( fis != null ) try { fis.close(); } catch( Exception any ) {}
+    }
+    
+  }
+  //---------------------------------------------------------------------------------------------------------------
   @SuppressWarnings("static-access")
   public static void main( String[] args )
   throws IOException, StreamObserverException
   {
+    Option sign      = new Option( "sign", _lang.getMessage( "option.sign" ) );
+    Option verify    = new Option( "verify", _lang.getMessage( "option.verify" ) );
+    OptionGroup  cmd = new OptionGroup();
+    cmd.addOption( sign );
+    cmd.addOption( verify );
+    
     Option recurce   = new Option( "r", _lang.getMessage( "option.r" ) );
     Option force     = new Option( "force", _lang.getMessage( "option.force" ) );
     Option sha1      = new Option( "sha1", _lang.getMessage( "option.sha1" ) );
@@ -424,6 +527,9 @@
                                     ;
 
     Options options = new Options();
+    options.addOptionGroup( cmd );
+    options.addOption( sign );
+    options.addOption( verify );
     options.addOption( recurce );
     options.addOption( force );
     options.addOption( sha1 );
@@ -482,11 +588,11 @@
       vFacs.add( new SHA1VerifierFactory(true,false) );
     }
     
-    signAll( commandLine.getArgList(), vFacs, commandLine.hasOption( "r" ), commandLine.hasOption( "force" ) );
+      signAll( commandLine.getArgList(), vFacs, commandLine.hasOption( "r" ), commandLine.hasOption( "force" ), commandLine.hasOption( "sign" ) );
  
   }
   //---------------------------------------------------------------------------------------------------------------
-  private static void signAll( List<String> fileNames, Set<StreamVerifierFactory> vFacs, boolean recurse, boolean force )
+  private static void signAll( List<String> fileNames, Set<StreamVerifierFactory> vFacs, boolean recurse, boolean force, boolean sign )
   throws IOException, StreamObserverException
   {
     if( vFacs == null || vFacs.size() < 1 )
@@ -510,7 +616,10 @@
         System.out.println( _lang.getMessage( "file.is.directory", fName ));
         continue;
       }
-      sign( f, vFacs, force );
+      if( sign )
+        sign( f, vFacs, recurse, force );
+      else
+        verify( f, vFacs, recurse, force );
     }
   }
   //---------------------------------------------------------------------------------------------------------------

Modified: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties?rev=688532&r1=688531&r2=688532&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties (original)
+++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/Messages.properties Sun Aug 24 10:21:40 2008
@@ -2,6 +2,8 @@
 no.signature.file=Verifier for {0} is mandatory, but file {1} does not exist
 cannot.read.signature.file=Cannot read signature file {0}, error: {1}
 option.sha1=produce SHA1 signatures 
+option.sign=create signatures for specified algorithms. Use -force to overwrite existing ones
+option.verify=verify signatures for specified algorithms. Use -force to fail on non-existing signatures
 option.pgp=produce PGP signatures, requires -keyring and -keyid options 
 option.keyring=full path of the secret keyring file
 option.keyid=id of the key in the secret keyring file to be used in the signature
@@ -11,4 +13,8 @@
 bad.pgp.args=pgp option requires both -keyring and -keyid to be specified
 no.verifiers=No signature generators requested - exiting
 file.not.exists=File "{0}" does not exist. Skipping ..
-file.is.directory=File "{0}" is a folder and no recursive option is specified. Skipping ..
\ No newline at end of file
+file.is.directory=File "{0}" is a folder and no recursive option is specified. Skipping ..
+no.mandatory.signature=Mandatory signature {1} does not exist for file {0}
+file.failed.verification=File {0} failed following verifications: {1}
+
+test.no.exception=Expected exception never thrown: {0}
\ No newline at end of file

Added: maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/mercury/util/FileUtilTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/mercury/util/FileUtilTest.java?rev=688532&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/mercury/util/FileUtilTest.java (added)
+++ maven/sandbox/trunk/mercury/mercury-util/src/test/java/org/apache/maven/mercury/util/FileUtilTest.java Sun Aug 24 10:21:40 2008
@@ -0,0 +1,154 @@
+package org.apache.maven.mercury.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashSet;
+
+import org.apache.maven.mercury.crypto.api.StreamObserverException;
+import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes;
+import org.apache.maven.mercury.crypto.api.StreamVerifierException;
+import org.apache.maven.mercury.crypto.api.StreamVerifierFactory;
+import org.apache.maven.mercury.crypto.pgp.PgpStreamVerifierFactory;
+import org.apache.maven.mercury.crypto.sha.SHA1VerifierFactory;
+import org.codehaus.plexus.i18n.DefaultLanguage;
+import org.codehaus.plexus.i18n.Language;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class FileUtilTest
+    extends TestCase
+{
+  private static final Language _lang = new DefaultLanguage( FileUtilTest.class );
+  
+  private static final String publicKeyFile = "/pgp/pubring.gpg";
+  private static final String secretKeyFile = "/pgp/secring.gpg";
+  private static final String keyId         = "0EDB5D91141BC4F2";
+  private static final String secretKeyPass = "testKey82";
+
+  private File testDir;
+  private File a;
+  private File b;
+  private File bAsc;
+  private File badAsc;
+
+  HashSet<StreamVerifierFactory> vFacs;
+  //----------------------------------------------------------------------------------------
+  @Override
+  protected void setUp()
+      throws Exception
+  {
+    testDir = new File("./target/test-classes");
+    a = new File( testDir, "a.jar" );
+    b = new File( testDir, "b.jar" );
+    bAsc = new File( testDir, "b.jar.asc" );
+    badAsc = new File( testDir, "bad.asc" );
+    
+    FileUtil.copy( a, b, true );
+    
+    vFacs = new HashSet<StreamVerifierFactory>(2);
+    
+    tearDown();
+  }
+  //----------------------------------------------------------------------------------------
+  @Override
+  protected void tearDown()
+      throws Exception
+  {
+    bAsc.delete();
+  }
+  //----------------------------------------------------------------------------------------
+  private void setPgp( boolean generator )
+  throws StreamVerifierException
+  {
+    if( generator )
+      vFacs.add( 
+          new PgpStreamVerifierFactory(
+              new StreamVerifierAttributes( PgpStreamVerifierFactory.DEFAULT_EXTENSION, false, true )
+              , getClass().getResourceAsStream( secretKeyFile )
+              , keyId
+              , secretKeyPass
+                                      )
+              );
+    else
+      vFacs.add( 
+          new PgpStreamVerifierFactory(
+              new StreamVerifierAttributes( PgpStreamVerifierFactory.DEFAULT_EXTENSION, false, true )
+              , getClass().getResourceAsStream( publicKeyFile )
+                                      )
+              );
+    
+  }
+  //----------------------------------------------------------------------------------------
+  private void setSha1( boolean generator )
+  {
+    vFacs.add( new SHA1VerifierFactory(false,false) );
+  }
+  //----------------------------------------------------------------------------------------
+  public void testVerifyGood()
+  throws IOException, StreamObserverException
+  {
+    setPgp( false );
+    FileUtil.verify( a, vFacs, false, true ); 
+  }
+  //----------------------------------------------------------------------------------------
+  public void testVerifyBad()
+  throws IOException, StreamObserverException
+  {
+    setPgp( false );
+    FileUtil.copy( badAsc, bAsc, true );
+
+    try
+    {
+      FileUtil.verify( b, vFacs, false, false ); 
+    }
+    catch( StreamObserverException e )
+    {
+      System.out.println( "Caught expected exception: "+e.getMessage() );
+      return;
+    }
+    fail( _lang.getMessage( "test.no.exception", StreamObserverException.class.getName() ) );
+  }
+  //----------------------------------------------------------------------------------------
+  public void testVerifyNoSigNoForce()
+  throws IOException, StreamObserverException
+  {
+    setPgp( false );
+    FileUtil.verify( b, vFacs, false, false ); 
+  }
+  //----------------------------------------------------------------------------------------
+  public void testVerifyNoSigForce()
+  throws IOException, StreamVerifierException
+  {
+    setPgp( false );
+    
+    try
+    {
+      FileUtil.verify( b, vFacs, false, true );
+    }
+    catch( StreamObserverException e )
+    {
+      System.out.println( "Caught expected exception: "+e.getMessage() );
+      return;
+    }
+    fail( _lang.getMessage( "test.no.exception", StreamObserverException.class.getName() ) );
+  }
+  //----------------------------------------------------------------------------------------
+  public void testSign()
+  throws IOException, StreamObserverException
+  {
+    setPgp( true );
+    FileUtil.sign( b, vFacs, false, true );
+
+    vFacs.clear();
+    setPgp( false );
+    FileUtil.verify( b, vFacs, false, true );
+  }
+  //----------------------------------------------------------------------------------------
+}

Added: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar?rev=688532&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.asc
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.asc?rev=688532&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.asc (added)
+++ maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.asc Sun Aug 24 10:21:40 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAkivNOcACgkQDttdkRQbxPJuQgCfbLCJldGo59ggjxNyIbRbIqcs
+OrwAnih+uOC4Elw5UJ2Wekdjl37jJbak
+=i1JE
+-----END PGP SIGNATURE-----

Added: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.sha1
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.sha1?rev=688532&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.sha1 (added)
+++ maven/sandbox/trunk/mercury/mercury-util/src/test/resources/a.jar.sha1 Sun Aug 24 10:21:40 2008
@@ -0,0 +1 @@
+e1003a0a66dae77515259c5e591ea1cfd73c2859
\ No newline at end of file

Added: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/bad.asc
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/test/resources/bad.asc?rev=688532&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-util/src/test/resources/bad.asc (added)
+++ maven/sandbox/trunk/mercury/mercury-util/src/test/resources/bad.asc Sun Aug 24 10:21:40 2008
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: BCPG v1.40
+
+iEYEABECAAYFAkivNOcACgkQDttdkRQbxPI6twCeI7VvcHQG6U3WZzIISSvB5sAY
+kcgAn2jHpt7cn7mYtjdjzusCCoz4N4rP
+=kmbj
+-----END PGP SIGNATURE-----

Added: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/pubring.gpg
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/pubring.gpg?rev=688532&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/pubring.gpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/secring.gpg
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/secring.gpg?rev=688532&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/sandbox/trunk/mercury/mercury-util/src/test/resources/pgp/secring.gpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream