### 秘密鍵の作成
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”