feat: Sorting of polynomial array with rust standard sort implemented
This commit is contained in:
parent
bb5e762a1d
commit
c3ea652c87
3 changed files with 185 additions and 33 deletions
|
|
@ -8,10 +8,12 @@ use tasks01::{
|
|||
gcm::{gcm_decrypt, gcm_encrypt},
|
||||
gfmul::gfmul_task,
|
||||
pad_oracle::padding_oracle,
|
||||
pfmath::{gfdiv, gfpoly_add, gfpoly_divmod, gfpoly_mul, gfpoly_pow, gfpoly_powmod},
|
||||
pfmath::{
|
||||
gfdiv, gfpoly_add, gfpoly_divmod, gfpoly_mul, gfpoly_pow, gfpoly_powmod, gfpoly_sort,
|
||||
},
|
||||
poly2block::poly2block,
|
||||
sea128::sea128,
|
||||
xex::{fde_xex},
|
||||
xex::fde_xex,
|
||||
};
|
||||
|
||||
use anyhow::{anyhow, Result};
|
||||
|
|
@ -118,6 +120,12 @@ pub fn task_deploy(testcase: &Testcase) -> Result<Value> {
|
|||
|
||||
Ok(json)
|
||||
}
|
||||
"gfpoly_sort" => {
|
||||
let result = gfpoly_sort(args)?;
|
||||
let json = json!({"sorted_polys" : json!(result)});
|
||||
|
||||
Ok(json)
|
||||
}
|
||||
|
||||
_ => Err(anyhow!(
|
||||
"Fatal. No compatible action found. Json data was {:?}. Arguments were; {:?}",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use anyhow::Result;
|
|||
use base64::{prelude::BASE64_STANDARD, Engine};
|
||||
use serde_json::Value;
|
||||
|
||||
use crate::utils::field::{FieldElement, Polynomial};
|
||||
use crate::utils::field::{sort_polynomial_array, FieldElement, Polynomial};
|
||||
|
||||
pub fn gfpoly_add(args: &Value) -> Result<Polynomial> {
|
||||
let poly_a = Polynomial::from_c_array(&args["A"].clone());
|
||||
|
|
@ -67,3 +67,75 @@ pub fn gfpoly_powmod(args: &Value) -> Result<Polynomial> {
|
|||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub fn gfpoly_sort(args: &Value) -> Result<Vec<Polynomial>> {
|
||||
let poly_arrays: Vec<Value> = serde_json::from_value(args["polys"].clone())?;
|
||||
let mut polys: Vec<Polynomial> = vec![];
|
||||
|
||||
for array in poly_arrays {
|
||||
polys.push(Polynomial::from_c_array(&array));
|
||||
}
|
||||
|
||||
polys.sort();
|
||||
//polys.sort();
|
||||
Ok(polys)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use serde_json::json;
|
||||
|
||||
#[test]
|
||||
fn test_poly_sorting() {
|
||||
let json1 = json!(
|
||||
{"polys": [
|
||||
[
|
||||
"NeverGonnaGiveYouUpAAA==",
|
||||
"NeverGonnaLetYouDownAA==",
|
||||
"NeverGonnaRunAroundAAA==",
|
||||
"AndDesertYouAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"WereNoStrangersToLoveA==",
|
||||
"YouKnowTheRulesAAAAAAA==",
|
||||
"AndSoDoIAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"NeverGonnaMakeYouCryAA==",
|
||||
"NeverGonnaSayGoodbyeAA==",
|
||||
"NeverGonnaTellALieAAAA==",
|
||||
"AndHurtYouAAAAAAAAAAAA=="
|
||||
]
|
||||
]});
|
||||
|
||||
let expected = json!([
|
||||
[
|
||||
"WereNoStrangersToLoveA==",
|
||||
"YouKnowTheRulesAAAAAAA==",
|
||||
"AndSoDoIAAAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"NeverGonnaMakeYouCryAA==",
|
||||
"NeverGonnaSayGoodbyeAA==",
|
||||
"NeverGonnaTellALieAAAA==",
|
||||
"AndHurtYouAAAAAAAAAAAA=="
|
||||
],
|
||||
[
|
||||
"NeverGonnaGiveYouUpAAA==",
|
||||
"NeverGonnaLetYouDownAA==",
|
||||
"NeverGonnaRunAroundAAA==",
|
||||
"AndDesertYouAAAAAAAAAA=="
|
||||
]
|
||||
]);
|
||||
|
||||
let sorted_array = gfpoly_sort(&json1).unwrap();
|
||||
let mut result: Vec<Vec<String>> = vec![];
|
||||
for poly in sorted_array {
|
||||
result.push(poly.to_c_array());
|
||||
}
|
||||
|
||||
assert_eq!(json!(result), expected);
|
||||
//assert_eq!(BASE64_STANDARD.encode(product), "MoAAAAAAAAAAAAAAAAAAAA==");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue