シャミール秘密共有を使用しようとしています。ウィキペディアで見つけたコードを実装します。しかし、実行すると、膨大な数の再構築の結果が実際の秘密の値とは異なります。
https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing
再構成関数は次のとおりです。
function join(shares) {
var accum, count, formula, startposition, nextposition, value, numerator, denominator;
for(formula = accum = 0; formula < shares.length; formula++) {
for(count = 0, numerator = denominator = 1; count < shares.length; count++) {
if(formula == count) continue; // If not the same value
startposition = shares[formula][0];
nextposition = shares[count][0];
numerator = (numerator * -nextposition) % prime;
denominator = (denominator * (startposition - nextposition)) % prime;
}
value = shares[formula][1];
accum = (prime + accum + (value * numerator * modInverse(denominator))) % prime;
}
return accum;
}
var sh = split(9846513, 5, 3)
var newshares = [sh[1], sh[3], sh[4]];
document.write(join(newshares));
</script>
このコードを実行しようとすると9846513
、結果の代わりに761
. 誰かがこの論理エラーを修正するのを手伝ってくれますか?