### 秘密鍵の作成
use k256::{ecdsa::{SigningKey, Signature, signature::Signer, signature::Verifier, VerifyingKey}};
use rand_core::OsRng;
fn new_privatekey() {
let signing_key = SigningKey::random(&mut OsRng);
let private_key = signing_key.to_bytes();
println!("{:x?}", hex::encode(private_key));
}
fn main() {
new_privatekey();
}
$ cargo run
…
“69c88f4f82746fbc5ebd0bad102ecf4c83c29eb91eb329961c071cab028a26f1”
rustで点P(2**256-2**32-2**9-2**8-2**7-2**6-2**4-1)を計算しようとすると、bigintのライブラリを使用してもoverflowするので、素直にk256を利用するのが良さそう。
### 公開鍵の追加
fn new_keys() {
let signing_key = SigningKey::random(&mut OsRng);
let private_key = hex::encode(signing_key.to_bytes());
println!("{:x?}", private_key);
let verifying_key = signing_key.verifying_key();
let public_key = hex::encode(verifying_key.to_sec1_bytes());
println!("{:x?}", public_key);
}
fn main() {
new_keys();
}
$ cargo run
…
“0d531f6878384de2126386d1c31564c78c4fd5bdc93fc5a15ea8b2a99878b0a8”
“0240a4c5cbca113228016cc39a7bd938dc4b0917eccc97b100450133c48228eb3c”