Revision: 4623 http://sourceforge.net/p/vexi/code/4623 Author: mkpg2 Date: 2013-12-20 20:26:46 +0000 (Fri, 20 Dec 2013) Log Message: ----------- build.sign. Optionally verify file.
Modified Paths: -------------- trunk/org.vexi-build.shared/meta/module.revisions trunk/org.vexi-build.sign/src/main/java/org/vexi/build/sign/VexiSignAssembler.java trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/SecretFolder.java trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/VerifyFiles.java Modified: trunk/org.vexi-build.shared/meta/module.revisions =================================================================== --- trunk/org.vexi-build.shared/meta/module.revisions 2013-12-20 18:43:04 UTC (rev 4622) +++ trunk/org.vexi-build.shared/meta/module.revisions 2013-12-20 20:26:46 UTC (rev 4623) @@ -1 +1 @@ -{"https:\/\/ebuild-project.org\/svn\/ebuild\/plugins":"143"} \ No newline at end of file +{"https:\/\/ebuild-project.org\/svn\/ebuild\/plugins":"152"} \ No newline at end of file Modified: trunk/org.vexi-build.sign/src/main/java/org/vexi/build/sign/VexiSignAssembler.java =================================================================== --- trunk/org.vexi-build.sign/src/main/java/org/vexi/build/sign/VexiSignAssembler.java 2013-12-20 18:43:04 UTC (rev 4622) +++ trunk/org.vexi-build.sign/src/main/java/org/vexi/build/sign/VexiSignAssembler.java 2013-12-20 20:26:46 UTC (rev 4623) @@ -3,11 +3,14 @@ import static ebuild.util.CollectionUtil.singletonList; import java.io.File; +import java.io.IOException; import java.security.Security; import java.util.Collection; +import org.bouncycastle.util.Arrays; import org.vexi.security.SecretFolder; import org.vexi.security.SignFiles; +import org.vexi.security.VerifyFiles; import ebuild.api.IAssemblerArgument; import ebuild.api.IEBuild; @@ -15,6 +18,7 @@ import ebuild.api.plugin.AbstractAssembler; import ebuild.api.plugin.BuildPluginException; import ebuild.api.plugin.IPropertyMap; +import ebuild.util.IOUtil; public class VexiSignAssembler extends AbstractAssembler{ static{ @@ -27,6 +31,7 @@ IEBuild ebuild = argument.getEBuild(); IInputMap inputs = argument.getInputMap(); + boolean verify = props.getBool("verify", false); String secretName = props.expectString("secret_name"); File secretFolder = ebuild.getCredentialsFile(secretName); if(!secretFolder.isDirectory()){ @@ -35,15 +40,27 @@ SecretFolder secret; + File in = inputs.expectLoneInput().expectLoneArtifact(); + File out = new File(argument.getOutputDirectory(), argument.getReleaseFileName()); try{ secret = new SecretFolder(secretFolder, null); - File in = inputs.expectLoneInput().expectLoneArtifact(); // REMARK - we have to use the release file name - File out = new File(argument.getOutputDirectory(), argument.getReleaseFileName()); new SignFiles().process(secret, in, out); - return singletonList(out); }catch(Exception e){ throw new BuildPluginException(e); } + + if(verify){ + try{ + byte[] bytes0 = IOUtil.fileToBytes(in); + byte[] bytes1 = VerifyFiles.verifyFile(secret.getCertFile(), in); + if(!Arrays.areEqual(bytes0, bytes1)){ + throw new BuildPluginException("Verification failed - did not reproduce"); + } + }catch(IOException e){ + throw new BuildPluginException(e); + } + } + return singletonList(out); } } Modified: trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/SecretFolder.java =================================================================== --- trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/SecretFolder.java 2013-12-20 18:43:04 UTC (rev 4622) +++ trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/SecretFolder.java 2013-12-20 20:26:46 UTC (rev 4623) @@ -76,8 +76,11 @@ public RSAPublicKey getPublicKey() throws NoSuchProviderException, PGPException { return (RSAPublicKey) secretkey.getPublicKey().getKey("BC"); } + public File getCertFile() { + return new File(folder,"root.crt"); + } public X509.Certificate getCert() throws Exception { - String certBase64 = IOUtil.fileToString(new File(folder,"root.crt")); + String certBase64 = IOUtil.fileToString(getCertFile()); X509.Certificate x509 = new X509.Certificate(new ByteArrayInputStream(Encode.fromBase64(certBase64))); return x509; } Modified: trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/VerifyFiles.java =================================================================== --- trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/VerifyFiles.java 2013-12-20 18:43:04 UTC (rev 4622) +++ trunk/org.vexi-tools.certify/src/main/java/org/vexi/security/VerifyFiles.java 2013-12-20 20:26:46 UTC (rev 4623) @@ -1,21 +1,25 @@ package org.vexi.security; -import java.io.*; -import java.util.*; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Map; import org.ibex.crypto.X509; -import org.ibex.util.*; -import org.vexi.security.VerifySigned; +import org.ibex.util.Logger; public class VerifyFiles { + static public void run(Logger log, File cert, File signedDir) throws Exception { X509.Certificate x509 = new X509.Certificate(new FileInputStream(cert)); Map identityToPK = new HashMap(); identityToPK.put(x509.getCN(), x509.getRSAPublicKey()); - - log.info("certifier",x509.getCN()); log.warn("directory",signedDir+"/*"); File[] files = signedDir.listFiles(); @@ -23,14 +27,9 @@ String name = in.getName(); if(!name.endsWith(".signed")) continue; String nameUnsigned = name.substring(0, name.length()-".signed".length()); - try{ - VerifySigned.verify( - //log, - identityToPK, - new FileInputStream(in), - name, - new FileOutputStream(new File(signedDir,nameUnsigned))); + OutputStream out = new FileOutputStream(new File(signedDir,nameUnsigned)); + verifyFile(identityToPK, in, out); log.warn("ok",name); }catch(IOException e){ log.warn("ko",name); @@ -38,6 +37,24 @@ } } } + + static public byte[] verifyFile(File cert, File in) throws IOException { + X509.Certificate x509 = new X509.Certificate(new FileInputStream(cert)); + Map identityToPK = new HashMap(); + identityToPK.put(x509.getCN(), x509.getRSAPublicKey()); + ByteArrayOutputStream baos = new ByteArrayOutputStream((int)in.length()); + verifyFile(identityToPK, in, baos); + return baos.toByteArray(); + } - + static public void verifyFile(Map identityToPK, File in, OutputStream out) throws IOException { + String name = in.getName(); + + VerifySigned.verify( + //log, + identityToPK, + new FileInputStream(in), + name, + out); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk _______________________________________________ Vexi-svn mailing list Vexi-svn@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/vexi-svn