From 22b4928bbeb0feadc4c1afb8637a3fab67543f93 Mon Sep 17 00:00:00 2001 From: Avril Date: Wed, 24 Jun 2020 10:26:57 +0100 Subject: [PATCH] change sub-byte selection --- Cargo.toml | 2 +- include/khash.h | 2 +- src/lib.rs | 3 ++- src/map.rs | 18 +++++++++++++++++- src/mnemonic.rs | 35 ++++++++++++++++++++++++++--------- 5 files changed, 47 insertions(+), 13 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0e6d05c..a7806ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "khash" description = "Kana hashes" -version = "1.0.0" +version = "1.1.0" authors = ["Avril "] edition = "2018" license = "GPL-3.0-or-later" diff --git a/include/khash.h b/include/khash.h index 19852d1..3f35e23 100644 --- a/include/khash.h +++ b/include/khash.h @@ -32,7 +32,7 @@ extern "C" { uint8_t salt_type; uint32_t size; uint8_t* body; - } khash_salt _deprecated("Use `khash_ctx` instead."); + } khash_salt; /// A valid context for khash functinos. Instantiated with `khash_new_context`. typedef struct { diff --git a/src/lib.rs b/src/lib.rs index bc14945..12af60b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,7 +19,8 @@ mod tests { let context = ctx::Context::default(); let kana = generate(&context, input)?; println!("kana: {}", kana); - assert_eq!(kana, "ワイトひはっトと"); + + assert_eq!(kana, "ワイトひはぇトョ"); Ok(()) } #[test] diff --git a/src/map.rs b/src/map.rs index c5c7b23..b609afe 100644 --- a/src/map.rs +++ b/src/map.rs @@ -75,7 +75,23 @@ pub fn find_sub(kana: char) -> Option> } /// Find subs by index. -pub fn sub(i: usize) -> Option> +pub fn sub(i: usize) -> Option<[Option; KANA_SUB.len()]> +{ + if i < KANA.len() { + let mut output = [None; KANA_SUB.len()]; + for (j, (def,sub)) in (0..).zip(KANA_SUB_VALID_FOR.iter().zip(KANA_SUB.iter())) + { + if def.contains(i) { + output[j] = Some(sub.clone()); + } + } + Some(output) + } else { + None + } +} + +pub fn sub_old(i: usize) -> Option> { if i < KANA.len() { let mut output = Vec::with_capacity(KANA_SUB.len()); diff --git a/src/mnemonic.rs b/src/mnemonic.rs index 2d5617a..9af8820 100644 --- a/src/mnemonic.rs +++ b/src/mnemonic.rs @@ -21,9 +21,9 @@ impl Digest { d.0 = Some(map::KANA[oneesan]); if from[1] > 0 { if let Some(imoutos) = map::sub(oneesan) { - let one = (usize::from(from[1]) / map::KANA.len()) % 2; - if imoutos.len() > 0 && one > 0{ - d.1 = Some(imoutos[usize::from(from[1]) % imoutos.len()]); + if let Some(imouto) = imoutos[usize::from(from[1]) % map::KANA_SUB.len()] + { + d.1 = Some(imouto); return d; } } @@ -31,16 +31,33 @@ impl Digest { d.1 = Self::new(&from[..]).0; } d + // Old + /*let mut d = Self::default(); + + let oneesan = usize::from(from[0]) % map::KANA.len(); + d.0 = Some(map::KANA[oneesan]); + if from[1] > 0 { + if let Some(imoutos) = map::sub(oneesan) { + let one = (usize::from(from[1]) / map::KANA.len()) % 2; + if imoutos.len() > 0 && one > 0{ + d.1 = Some(imoutos[usize::from(from[1]) % imoutos.len()]); + return d; + } + } + let from = [from[1], 0]; + d.1 = Self::new(&from[..]).0; + } + d*/ /*let oneesan = usize::from(from) % map::KANA.len(); - d.0 = Some(map::KANA[oneesan]); - if let Some(imoutos) = map::sub(oneesan) { + d.0 = Some(map::KANA[oneesan]); + if let Some(imoutos) = map::sub(oneesan) { if imoutos.len() > 0 { - } - } else { + } + } else { - } + } - return d;*/ + return d;*/ } }