@@ -35,15 +35,22 @@ use sha2::Sha512;
3535///
3636/// * `phrase` - Mnemonic phrase
3737/// * `password` - Use empty string for no password
38+ /// * `language_code` - The language to use, valid values are: 'en', 'zh-hans', 'zh-hant', 'fr', 'it', 'jap', 'ko', 'es'. Defaults to 'en'
3839///
3940/// # Returns
4041///
4142/// Returns the 32-bytes mini-secret via entropy
4243#[ pyfunction]
43- #[ text_signature = "(phrase, password)" ]
44- pub fn bip39_to_mini_secret ( phrase : & str , password : & str ) -> PyResult < Vec < u8 > > {
44+ #[ text_signature = "(phrase, password, language_code, / )" ]
45+ pub fn bip39_to_mini_secret ( phrase : & str , password : & str , language_code : Option < & str > ) -> PyResult < Vec < u8 > > {
4546 let salt = format ! ( "mnemonic{}" , password) ;
46- let mnemonic = match Mnemonic :: from_phrase ( phrase, Language :: English ) {
47+
48+ let language = match Language :: from_language_code ( language_code. unwrap_or ( "en" ) ) {
49+ Some ( language) => language,
50+ None => return Err ( exceptions:: ValueError :: py_err ( "Invalid language_code" ) )
51+ } ;
52+
53+ let mnemonic = match Mnemonic :: from_phrase ( phrase, language) {
4754 Ok ( some_mnemomic) => some_mnemomic,
4855 Err ( err) => return Err ( exceptions:: ValueError :: py_err ( format ! ( "Invalid mnemonic: {}" , err. to_string( ) ) ) )
4956 } ;
@@ -59,20 +66,26 @@ pub fn bip39_to_mini_secret(phrase: &str, password: &str) -> PyResult<Vec<u8>> {
5966/// # Arguments
6067///
6168/// * `words` - The amount of words to generate, valid values are 12, 15, 18, 21 and 24
69+
6270///
6371/// # Returns
6472///
6573/// A string containing the mnemonic words.
6674#[ pyfunction]
67- #[ text_signature = "(words)" ]
68- pub fn bip39_generate ( words : u32 ) -> PyResult < String > {
75+ #[ text_signature = "(words, language_code, /)" ]
76+ pub fn bip39_generate ( words : u32 , language_code : Option < & str > ) -> PyResult < String > {
77+
78+ let language = match Language :: from_language_code ( language_code. unwrap_or ( "en" ) ) {
79+ Some ( language) => language,
80+ None => return Err ( exceptions:: ValueError :: py_err ( "Invalid language_code" ) )
81+ } ;
6982
7083 let word_count_type = match MnemonicType :: for_word_count ( words as usize ) {
7184 Ok ( some_work_count) => some_work_count,
7285 Err ( err) => return Err ( exceptions:: ValueError :: py_err ( err. to_string ( ) ) )
7386 } ;
7487
75- let phrase = Mnemonic :: new ( word_count_type, Language :: English ) . into_phrase ( ) ;
88+ let phrase = Mnemonic :: new ( word_count_type, language ) . into_phrase ( ) ;
7689
7790 assert_eq ! ( phrase. split( " " ) . count( ) , words as usize ) ;
7891
@@ -85,14 +98,21 @@ pub fn bip39_generate(words: u32) -> PyResult<String> {
8598///
8699/// * `phrase` - Mnemonic phrase
87100/// * `password` - Use empty string for no password
101+ /// * `language_code` - The language to use, valid values are: 'en', 'zh-hans', 'zh-hant', 'fr', 'it', 'jap', 'ko', 'es'. Defaults to 'en'
88102///
89103/// # Returns
90104///
91105/// Returns a 32-bytes seed
92106#[ pyfunction]
93- #[ text_signature = "(phrase, password)" ]
94- pub fn bip39_to_seed ( phrase : & str , password : & str ) -> PyResult < Vec < u8 > > {
95- let mnemonic = match Mnemonic :: from_phrase ( phrase, Language :: English ) {
107+ #[ text_signature = "(phrase, password, language_code, /)" ]
108+ pub fn bip39_to_seed ( phrase : & str , password : & str , language_code : Option < & str > ) -> PyResult < Vec < u8 > > {
109+
110+ let language = match Language :: from_language_code ( language_code. unwrap_or ( "en" ) ) {
111+ Some ( language) => language,
112+ None => return Err ( exceptions:: ValueError :: py_err ( "Invalid language_code" ) )
113+ } ;
114+
115+ let mnemonic = match Mnemonic :: from_phrase ( phrase, language) {
96116 Ok ( some_mnemomic) => some_mnemomic,
97117 Err ( err) => return Err ( exceptions:: ValueError :: py_err ( format ! ( "Invalid mnemonic: {}" , err. to_string( ) ) ) )
98118 } ;
@@ -108,16 +128,22 @@ pub fn bip39_to_seed(phrase: &str, password: &str) -> PyResult<Vec<u8>> {
108128/// # Arguments
109129///
110130/// * `phrase` - Mnemonic phrase
131+ /// * `language_code` - The language to use, valid values are: 'en', 'zh-hans', 'zh-hant', 'fr', 'it', 'jap', 'ko', 'es'. Defaults to 'en'
111132///
112133/// # Returns
113134///
114135/// Returns boolean with validation result
115136#[ pyfunction]
116- #[ text_signature = "(phrase)" ]
117- pub fn bip39_validate ( phrase : & str ) -> bool {
118- match Mnemonic :: validate ( phrase, Language :: English ) {
119- Err ( _) => false ,
120- _ => true
137+ #[ text_signature = "(phrase, language_code, /)" ]
138+ pub fn bip39_validate ( phrase : & str , language_code : Option < & str > ) -> PyResult < bool > {
139+ let language = match Language :: from_language_code ( language_code. unwrap_or ( "en" ) ) {
140+ Some ( language) => language,
141+ None => return Err ( exceptions:: ValueError :: py_err ( "Invalid language_code" ) )
142+ } ;
143+
144+ match Mnemonic :: validate ( phrase, language) {
145+ Err ( _) => Ok ( false ) ,
146+ _ => Ok ( true )
121147 }
122148}
123149
0 commit comments