Package freenet.crypt

Source Code of freenet.crypt.DSAPrivateKey

/* 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.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.util.Random;

import net.i2p.util.NativeBigInteger;

import freenet.support.Base64;
import freenet.support.HexUtil;
import freenet.support.IllegalBase64Exception;
import freenet.support.SimpleFieldSet;

public class DSAPrivateKey extends CryptoKey {
  private static final long serialVersionUID = -1;

    private final BigInteger x;

    public DSAPrivateKey(BigInteger x, DSAGroup g) {
        this.x = x;
        if(x.signum() != 1 || x.compareTo(g.getQ()) > -1 || x.compareTo(BigInteger.ZERO) < 1)
          throw new IllegalArgumentException();
    }

    // this is dangerous...  better to force people to construct the
    // BigInteger themselves so they know what is going on with the sign
    //public DSAPrivateKey(byte[] x) {
    //    this.x = new BigInteger(1, x);
    //}

    public DSAPrivateKey(DSAGroup g, Random r) {
        BigInteger tempX;
        do {
            tempX = new NativeBigInteger(256, r);
        } while (tempX.compareTo(g.getQ()) > -1 || tempX.compareTo(BigInteger.ZERO) < 1);
        this.x = tempX;
    }
   
    protected DSAPrivateKey() {
        // For serialization.
        x = null;
    }

    @Override
  public String keyType() {
        return "DSA.s";
    }
   
    public BigInteger getX() {
        return x;
    }
   
    public static CryptoKey read(InputStream i, DSAGroup g) throws IOException {
        return new DSAPrivateKey(Util.readMPI(i), g);
    }
   
    @Override
    public String toLongString() {
        return "x="+HexUtil.biToHex(x);
    }
   
    // what?  why is DSAGroup passed in?
    //public static CryptoKey readFromField(DSAGroup group, String field) {
    //    //BigInteger x=Util.byteArrayToMPI(Util.hexToBytes(field));
    //    return new DSAPrivateKey(new BigInteger(field, 16));
    //}
   
    @Override
  public byte[] asBytes() {
        return Util.MPIbytes(x);
    }
   
    @Override
  public byte[] fingerprint() {
        return fingerprint(new BigInteger[] {x});
    }

  public SimpleFieldSet asFieldSet() {
    SimpleFieldSet fs = new SimpleFieldSet(true);
    fs.putSingle("x", Base64.encode(x.toByteArray()));
    return fs;
  }

  public static DSAPrivateKey create(SimpleFieldSet fs, DSAGroup group) throws IllegalBase64Exception {
    NativeBigInteger y = new NativeBigInteger(1, Base64.decode(fs.get("x")));
    if(y.bitLength() > 512)
      throw new IllegalBase64Exception("Probably a pubkey");
    return new DSAPrivateKey(y, group);
  }

//    public static void main(String[] args) throws Exception {
//        Yarrow y=new Yarrow();
//        DSAPrivateKey p=new DSAPrivateKey(Global.DSAgroupC, y);
//        DSAPublicKey pk=new DSAPublicKey(Global.DSAgroupC, p);
//        p.write(System.out);
//    }
}
TOP

Related Classes of freenet.crypt.DSAPrivateKey

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.