Skip to content

Commit

Permalink
add Key Util 'secretKeyToCurveScalar'
Browse files Browse the repository at this point in the history
SecretKey(Ed25519) to Scalar(X25519)
  • Loading branch information
Hyeonyeob Kim committed Dec 27, 2019
1 parent 5652d55 commit ac7eeef
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions source/agora/common/crypto/Key.d
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
module agora.common.crypto.Key;

import agora.common.crypto.Crc16;
import agora.common.crypto.ECC;
import agora.common.Types;
import agora.common.Deserializer;
import agora.common.Serializer;
Expand Down Expand Up @@ -366,3 +367,38 @@ unittest
Signature sig = kp.secret.sign("Hello World".representation);
assert(kp.address.verify(sig, "Hello World".representation));
}



/// SecretKey(Ed25519) to Scalar(X25519)
public static Scalar secretKeyToCurveScalar (SecretKey secret) nothrow @nogc
{
Scalar x25519_sk;
if (crypto_sign_ed25519_sk_to_curve25519(x25519_sk.data[].ptr, secret[].ptr) != 0)
assert(0);
return x25519_sk;
}

///
unittest
{
import agora.common.crypto.Schnorr;

KeyPair kp = KeyPair.fromSeed(
Seed.fromString(
"SCT4KKJNYLTQO4TVDPVJQZEONTVVW66YLRWAINWI3FZDY7U4JS4JJEI4"));

Scalar scalar = secretKeyToCurveScalar(kp.secret);
assert(scalar ==
Scalar(`0x44245dd23bd7453bf5fe07ec27a29be3dfe8e18d35bba28c7b222b71a4802db8`));

Pair pair;
pair.v = scalar;
pair.V = pair.v.toPoint();

assert(pair.V.data == kp.address.data);
Signature enroll_sig = sign(pair, "BOSAGORA");

Point point_Address = Point(kp.address);
assert(verify(point_Address, enroll_sig, "BOSAGORA"));
}

0 comments on commit ac7eeef

Please sign in to comment.