Skip to content

Latest commit

 

History

History
 
 

signer

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Mina signer

This crate provides an API and framework for Mina signing. It follows the algorithm outlined in the Mina Signature Specification.

Signer interface

The mina_signer crate currently supports creating both legacy and an experimental kimchi signers.

  • [create_legacy] creates a legacy signer compatible with mainnet and testnet transaction signatures
  • [create_kimchi] creates an experimental kimchi signer

Here is an example of how to use the signer interface to sign and verify Mina transactions.

#[path = "../tests/transaction.rs"]
mod transaction;

use rand;
use mina_signer::{NetworkId, Keypair, PubKey, Signer};
use transaction::Transaction;

let keypair = Keypair::rand(&mut rand::rngs::OsRng).expect("failed to generate keypair");

let tx = Transaction::new_payment(
                keypair.public.clone(),
                PubKey::from_address("B62qicipYxyEHu7QjUqS7QvBipTs5CzgkYZZZkPoKVYBu6tnDUcE9Zt").expect("invalid receiver address"),
                1729000000000,
                2000000000,
                271828,
            );

let mut ctx = mina_signer::create_legacy::<Transaction>(NetworkId::TESTNET);
let sig = ctx.sign(&keypair, &tx);
assert!(ctx.verify(&sig, &keypair.public, &tx));

These examples use the test Transaction structure found in the ./tests directory. This is a complete reference implementation of the Mina payment and delegation transaction structures found on mainnet and testnet.

Note: In order to sign something it must be hashed. This framework allows you to define how types are hashed by implementing the Hashable trait-- see the mina_hasher documentation

For more details about the ``mina_signer`, please see rustdoc mina-signer documentation.

Tests

There is a standard set of signature tests in the ./tests directory.

These can be run with

cargo test --package mina-signer