Package freenet.keys

Source Code of freenet.keys.InsertableUSK

/* 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.keys;

import java.net.MalformedURLException;

import freenet.crypt.DSAGroup;
import freenet.crypt.DSAPrivateKey;
import freenet.crypt.DSAPublicKey;
import freenet.crypt.Global;
import freenet.support.Logger;

/**
* An insertable USK.
*
* Changes from an ordinary USK:
* - It has a private key
* - getURI() doesn't include ,extra
* - constructor from URI doesn't need or want ,extra
* - It has a getUSK() method which gets the public USK
*/
public class InsertableUSK extends USK {
 
    private static final long serialVersionUID = 1L;
    public final DSAPrivateKey privKey;
 
  public static InsertableUSK createInsertable(FreenetURI uri, boolean persistent) throws MalformedURLException {
    if(!uri.getKeyType().equalsIgnoreCase("USK"))
      throw new MalformedURLException();
    InsertableClientSSK ssk =
      InsertableClientSSK.create(uri.setKeyType("SSK"));
    return new InsertableUSK(ssk.docName, ssk.pubKeyHash, ssk.cryptoKey, ssk.privKey, uri.getSuggestedEdition(), ssk.cryptoAlgorithm);
  }
 
  InsertableUSK(String docName, byte[] pubKeyHash, byte[] cryptoKey, DSAPrivateKey key, long suggestedEdition, byte cryptoAlgorithm) throws MalformedURLException {
    super(pubKeyHash, cryptoKey, docName, suggestedEdition, cryptoAlgorithm);
    if(cryptoKey.length != ClientSSK.CRYPTO_KEY_LENGTH)
      throw new MalformedURLException("Decryption key wrong length: "+cryptoKey.length+" should be "+ClientSSK.CRYPTO_KEY_LENGTH);
    this.privKey = key;
  }

  public USK getUSK() {
    return new USK(pubKeyHash, cryptoKey, siteName, suggestedEdition, cryptoAlgorithm);
  }

  public InsertableClientSSK getInsertableSSK(long ver) {
    return getInsertableSSK(siteName + SEPARATOR + ver);
  }
 
  public InsertableClientSSK getInsertableSSK(String string) {
    try {
      return new InsertableClientSSK(string, pubKeyHash,
          new DSAPublicKey(getCryptoGroup(), privKey), privKey, cryptoKey, cryptoAlgorithm);
    } catch (MalformedURLException e) {
      Logger.error(this, "Caught "+e+" should not be possible in USK.getSSK", e);
      throw new Error(e);
    }
  }

  public InsertableUSK privCopy(long edition) {
    if(edition == suggestedEdition) return this;
    try {
      return new InsertableUSK(siteName, pubKeyHash, cryptoKey, privKey, edition, cryptoAlgorithm);
    } catch (MalformedURLException e) {
      throw new Error(e);
    }
  }

  public final DSAGroup getCryptoGroup() {
    return Global.DSAgroupBigA;
  }
}
TOP

Related Classes of freenet.keys.InsertableUSK

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.