Author: nextgens Date: 2007-04-09 00:35:30 +0000 (Mon, 09 Apr 2007) New Revision: 12558
Removed: trunk/freenet/src/freenet/crypt/StationToStationContext.java Log: Remove StationToStationContext as it's dead-code now... Keep KeyAgreementSchemeContext for now as it might be usefull for JFK[ir] Deleted: trunk/freenet/src/freenet/crypt/StationToStationContext.java =================================================================== --- trunk/freenet/src/freenet/crypt/StationToStationContext.java 2007-04-09 00:28:50 UTC (rev 12557) +++ trunk/freenet/src/freenet/crypt/StationToStationContext.java 2007-04-09 00:35:30 UTC (rev 12558) @@ -1,151 +0,0 @@ -/* This code is part of Freenet. It is distributed under the GNU General - * Public License, version 2 (or at your option any later version). See - * http://www.gnu.org/ for further details of the GPL. */ -package freenet.crypt; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.math.BigInteger; - -import net.i2p.util.NativeBigInteger; -import freenet.support.HexUtil; -import freenet.support.Logger; - -public class StationToStationContext extends KeyAgreementSchemeContext { - - // Set on startup - - /** Random number */ - final NativeBigInteger myRandom; - - /** My exponential */ - final NativeBigInteger myExponential; - - /** His pubkey */ - final DSAPublicKey hisPubKey; - - /** Our private key */ - final DSAPrivateKey myPrivateKey; - - /** The group we both share */ - final DSAGroup group; - - /** The rng */ - final RandomSource random; - - // Generated or set later - NativeBigInteger hisExponential = null; - NativeBigInteger key = null; - - boolean logMINOR; - - public StationToStationContext(DSAPrivateKey ourKey, DSAGroup group, DSAPublicKey hisKey, RandomSource rand) { - this.myPrivateKey = ourKey; - this.random = rand; - this.group = group; - this.hisPubKey = hisKey; - // How big is the random ? FIXME! - this.myRandom = new NativeBigInteger(2048, rand); - // Not sure of what I'm doing below. - this.myExponential = (NativeBigInteger) group.getG().modPow(myRandom, group.getQ()); - lastUsedTime = System.currentTimeMillis(); - logMINOR = Logger.shouldLog(Logger.MINOR, this); - } - - public synchronized NativeBigInteger getOurExponential() { - lastUsedTime = System.currentTimeMillis(); - return myExponential; - } - - public synchronized void setOtherSideExponential(NativeBigInteger a) { - lastUsedTime = System.currentTimeMillis(); - if(hisExponential != null) { - if(!hisExponential.equals(a)) - throw new IllegalStateException("Assigned other side exponential twice"); - else return; - } - if(a == null) throw new NullPointerException(); - hisExponential = a; - } - - public synchronized byte[] getKey() { - lastUsedTime = System.currentTimeMillis(); - if(hisExponential == null) throw new IllegalStateException("Can't call getKey() until setOtherSideExponential() has been called!"); - if(key != null) return key.toByteArray(); - - // Calculate key - if(logMINOR) - Logger.minor(this, "My exponent: "+myExponential.toHexString()+", my random: "+myRandom+", peer's exponential: "+hisExponential.toHexString()); - // Not sure of what I'm doing below - key = (NativeBigInteger) hisExponential.modPow(myRandom, group.getQ()); - - if(logMINOR) - Logger.minor(this, "Key="+HexUtil.bytesToHex(key.toByteArray())); - return key.toByteArray(); - } - - public synchronized byte[] concatAndSignAndCrypt(){ - lastUsedTime = System.currentTimeMillis(); - if(hisExponential == null) throw new IllegalStateException("Can't call concatAndSignAndCrypt() until setOtherSideExponential() has been called!"); - if(key == null) getKey(); - - String message = "(" + myExponential + ',' + hisExponential + ')'; - DSASignature signature = DSA.sign(group, myPrivateKey, new BigInteger(1, SHA256.digest(message.getBytes())), random); - - if(logMINOR) - Logger.minor(this, "The concat result : "+message+". Its signature : "+signature); - - ByteArrayOutputStream os = new ByteArrayOutputStream(); - CipherOutputStream cos = new CipherOutputStream(getCipher(), os); - byte[] result = null; - try{ - cos.write(signature.toString().getBytes()); - cos.flush(); - cos.close(); - result = os.toByteArray(); - os.close(); - } catch(IOException e){ - Logger.error(this, "Error :"+e); - e.printStackTrace(); - } - - return result; - } - - public synchronized boolean isAuthentificationSuccessfull(byte[] data){ - lastUsedTime = System.currentTimeMillis(); - if(data == null) return false; - if(hisExponential == null) throw new IllegalStateException("Can't call concatAndSignAndCrypt() until setOtherSideExponential() has been called!"); - if(key == null) getKey(); - - ByteArrayInputStream is = new ByteArrayInputStream(data); - EncipherInputStream ei = new EncipherInputStream(is, getCipher()); - final String message = "(" + hisExponential + ',' + myExponential + ')'; - - try{ - String signatureToCheck = ei.toString(); - ei.close(); - is.close(); - - if(signatureToCheck != null) - if(DSA.verify(hisPubKey, new DSASignature(signatureToCheck), new BigInteger(1, SHA256.digest(message.getBytes())), false)) { - return true; - } - - } catch(IOException e){ - Logger.error(this, "Error :"+e); - e.printStackTrace(); - } - - return false; - } - - /** - * @return True if getCipher() will work. If this returns false, getCipher() will - * probably NPE. - */ - public boolean canGetCipher() { - return hisExponential != null; - } -}
