Page MenuHomec4science

PartialSecret.java
No OneTemporary

File Metadata

Created
Fri, Feb 14, 18:00

PartialSecret.java

package crypto.elgamal;
import java.math.BigInteger;
/**
* Secret share held by one party to participate in
* multi-party decryption.
*/
public class PartialSecret {
/**
* Reference of the SPU
*/
public static final int PART_SPU = 1;
/**
* Reference of the MU
*/
public static final int PART_MU = 2;
/**
* ID of the current party,
* either PART_SPU or PART_MU.
*/
private int partNumber;
/**
* private key
*/
private BigInteger privKey;
/**
* @param partNumber
* ID of the party.
* @param privKey
* Private key share already computed.
*/
public PartialSecret(int partNumber, BigInteger privKey) {
this.partNumber = partNumber;
this.privKey = privKey;
}
/**
*
* @param partNumber
* ID of the party.
* @param coefficients
* Coefficients of the function used for interpolation. First element is the secret key, following are random integers.
* @param groupOrder
* Order of the group.
*/
public PartialSecret(int partNumber, BigInteger[] coefficients, BigInteger groupOrder) {
this.partNumber = partNumber;
this.privKey = generatePartialSecret(partNumber, coefficients, groupOrder);
}
public int getPartType() {
return partNumber;
}
public BigInteger getPrivKey() {
return privKey;
}
/**
* Generates a new private key share based on function coefficients and group order.
* @param partNumber
* ID of the party.
* @param coefficients
* Coefficients of the function used for interpolation. First element is the secret key, following are random integers.
* @param groupOrder
* Order of the group.
* @return
* private key share
*/
private static BigInteger generatePartialSecret(int partNumber, BigInteger[] coefficients, BigInteger groupOrder) {
BigInteger result = BigInteger.ZERO;
for (int i = 0; i < coefficients.length; i++) {
int xPow = (int) Math.pow(partNumber, i);
BigInteger term = coefficients[i].multiply(BigInteger.valueOf(xPow));
result = result.add(term);
}
return result.mod(groupOrder);
}
/**
*
* @param partNumber
* ID of the party.
* @return
* is the part number valid.
*/
public static boolean isValidPartNumber(int partNumber) {
switch (partNumber)
{
case PartialSecret.PART_SPU:
case PartialSecret.PART_MU:
return true;
default:
return false;
}
}
}

Event Timeline