Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F101884394
PartialSecret.java
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Feb 14, 18:00
Size
2 KB
Mime Type
text/x-java
Expires
Sun, Feb 16, 18:00 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
24247266
Attached To
R3229 Genome Privacy - SHCS App
PartialSecret.java
View Options
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
Log In to Comment