movement_sdk/crypto/
mod.rs1mod hash;
49mod traits;
50
51#[cfg(feature = "bls")]
52mod bls12381;
53#[cfg(feature = "ed25519")]
54mod ed25519;
55#[cfg(feature = "ed25519")]
56mod multi_ed25519;
57mod multi_key;
58#[cfg(feature = "secp256k1")]
59mod secp256k1;
60#[cfg(feature = "secp256r1")]
61mod secp256r1;
62#[cfg(feature = "twisted_ed25519")]
63pub mod twisted_ed25519;
64
65pub use hash::{HashFunction, sha2_256, sha3_256, sha3_256_of, signing_message};
67
68pub use traits::{PublicKey, Signature, Signer, Verifier};
70
71#[cfg(feature = "ed25519")]
73pub use ed25519::{
74 ED25519_PRIVATE_KEY_LENGTH, ED25519_PUBLIC_KEY_LENGTH, ED25519_SIGNATURE_LENGTH,
75 Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature,
76};
77
78#[cfg(feature = "ed25519")]
80pub use multi_ed25519::{
81 MAX_NUM_OF_KEYS, MIN_THRESHOLD, MultiEd25519PublicKey, MultiEd25519Signature,
82};
83
84pub use multi_key::{
86 AnyPublicKey, AnyPublicKeyVariant, AnySignature, MAX_NUM_OF_KEYS as MULTI_KEY_MAX_NUM_OF_KEYS,
87 MIN_THRESHOLD as MULTI_KEY_MIN_THRESHOLD, MultiKeyPublicKey, MultiKeySignature,
88};
89
90#[cfg(feature = "secp256k1")]
92pub use secp256k1::{
93 SECP256K1_PRIVATE_KEY_LENGTH, SECP256K1_PUBLIC_KEY_LENGTH,
94 SECP256K1_PUBLIC_KEY_UNCOMPRESSED_LENGTH, SECP256K1_SIGNATURE_LENGTH, Secp256k1PrivateKey,
95 Secp256k1PublicKey, Secp256k1Signature,
96};
97
98#[cfg(feature = "secp256r1")]
100pub use secp256r1::{
101 SECP256R1_PRIVATE_KEY_LENGTH, SECP256R1_PUBLIC_KEY_LENGTH, SECP256R1_SIGNATURE_LENGTH,
102 Secp256r1PrivateKey, Secp256r1PublicKey, Secp256r1Signature,
103};
104
105#[cfg(feature = "bls")]
107pub use bls12381::{
108 BLS12381_POP_LENGTH, BLS12381_PRIVATE_KEY_LENGTH, BLS12381_PUBLIC_KEY_LENGTH,
109 BLS12381_SIGNATURE_LENGTH, Bls12381PrivateKey, Bls12381ProofOfPossession, Bls12381PublicKey,
110 Bls12381Signature,
111};
112
113#[cfg(feature = "twisted_ed25519")]
115pub use twisted_ed25519::{
116 DECRYPTION_KEY_DERIVATION_MESSAGE, H_RISTRETTO_COMPRESSED, TWISTED_ED25519_PRIVATE_KEY_LENGTH,
117 TWISTED_ED25519_PUBLIC_KEY_LENGTH, TwistedEd25519PrivateKey, TwistedEd25519PublicKey,
118 h_ristretto,
119};
120
121pub const ED25519_SCHEME: u8 = 0;
123
124pub const MULTI_ED25519_SCHEME: u8 = 1;
126
127pub const SINGLE_KEY_SCHEME: u8 = 2;
129
130pub const MULTI_KEY_SCHEME: u8 = 3;
132
133pub const KEYLESS_SCHEME: u8 = 5;
135
136pub fn derive_authentication_key(public_key: &[u8], scheme: u8) -> [u8; 32] {
140 use sha3::{Digest, Sha3_256};
141 let mut hasher = Sha3_256::new();
142 hasher.update(public_key);
143 hasher.update([scheme]);
144 let result = hasher.finalize();
145 let mut auth_key = [0u8; 32];
146 auth_key.copy_from_slice(&result);
147 auth_key
148}
149
150pub fn derive_address(public_key: &[u8], scheme: u8) -> crate::types::AccountAddress {
154 let auth_key = derive_authentication_key(public_key, scheme);
155 crate::types::AccountAddress::new(auth_key)
156}