001: /*
002: * Copyright (c) 2001 Silvere Martin-Michiellot All Rights Reserved.
003: *
004: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
005: * royalty free, license to use, modify and redistribute this
006: * software in source and binary code form,
007: * provided that i) this copyright notice and license appear on all copies of
008: * the software; and ii) Licensee does not utilize the software in a manner
009: * which is disparaging to Silvere Martin-Michiellot.
010: *
011: * This software is provided "AS IS," without a warranty of any kind. ALL
012: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
013: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
014: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
015: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
016: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
017: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
018: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
019: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
020: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
021: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
022: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
023: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
024: *
025: * This software is not designed or intended for use in on-line control of
026: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
027: * the design, construction, operation or maintenance of any nuclear
028: * facility. Licensee represents and warrants that it will not use or
029: * redistribute the Software for such purposes.
030: *
031: * @Author: Silvere Martin-Michiellot
032: *
033: */
034:
035: package com.db.utils.signatures;
036:
037: import java.io.*;
038: import java.security.*;
039: import java.security.spec.*;
040:
041: /**
042: * Generate a DSA signature from files and returns true if the operation was completed with success
043: */
044: public class GenerateSignature {
045:
046: public static boolean VerifySignature(String dataFileName) {
047:
048: try {
049:
050: /* Generate a key pair */
051:
052: KeyPairGenerator keyGen = KeyPairGenerator.getInstance(
053: "DSA", "SUN");
054: SecureRandom random = SecureRandom.getInstance("SHA1PRNG",
055: "SUN");
056:
057: keyGen.initialize(1024, random);
058:
059: KeyPair pair = keyGen.generateKeyPair();
060: PrivateKey priv = pair.getPrivate();
061: PublicKey pub = pair.getPublic();
062:
063: /* Create a Signature object and initialize it with the private key */
064:
065: Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
066:
067: dsa.initSign(priv);
068:
069: /* Update and sign the data */
070:
071: FileInputStream fis = new FileInputStream(dataFileName);
072: BufferedInputStream bufin = new BufferedInputStream(fis);
073: byte[] buffer = new byte[1024];
074: int len;
075: while (bufin.available() != 0) {
076: len = bufin.read(buffer);
077: dsa.update(buffer, 0, len);
078: }
079: ;
080:
081: bufin.close();
082:
083: /* Now that all the data to be signed has been read in,
084: generate a signature for it */
085:
086: byte[] realSig = dsa.sign();
087:
088: /* Save the signature in a file */
089: FileOutputStream sigfos = new FileOutputStream("sig");
090: sigfos.write(realSig);
091:
092: sigfos.close();
093:
094: /* Save the public key in a file */
095: byte[] key = pub.getEncoded();
096: FileOutputStream keyfos = new FileOutputStream("suepk");
097: keyfos.write(key);
098:
099: keyfos.close();
100:
101: return true;
102:
103: } catch (Exception e) {
104:
105: return false;
106:
107: }
108:
109: }
110:
111: }
|