feat: Adding gcd implementation

This commit is contained in:
Alivecow 2024-11-23 12:31:27 +01:00
parent 8be8dc7a54
commit 0b18ba1bff
4 changed files with 102 additions and 9 deletions

View file

@ -9,8 +9,8 @@ use tasks01::{
gfmul::gfmul_task,
pad_oracle::padding_oracle,
pfmath::{
gfdiv, gfpoly_add, gfpoly_diff, gfpoly_divmod, gfpoly_make_monic, gfpoly_mul, gfpoly_pow,
gfpoly_powmod, gfpoly_sort, gfpoly_sqrt,
gfdiv, gfpoly_add, gfpoly_diff, gfpoly_divmod, gfpoly_gcd, gfpoly_make_monic, gfpoly_mul,
gfpoly_pow, gfpoly_powmod, gfpoly_sort, gfpoly_sqrt,
},
poly2block::poly2block,
sea128::sea128,
@ -151,6 +151,12 @@ pub fn task_deploy(testcase: &Testcase) -> Result<Value> {
Ok(json)
}
"gfpoly_gcd" => {
let result = gfpoly_gcd(args)?;
let json = json!({"G" : result.to_c_array()});
Ok(json)
}
_ => Err(anyhow!(
"Fatal. No compatible action found. Json data was {:?}. Arguments were; {:?}",

View file

@ -2,7 +2,10 @@ use anyhow::Result;
use base64::{prelude::BASE64_STANDARD, Engine};
use serde_json::Value;
use crate::utils::{field::FieldElement, poly::Polynomial};
use crate::utils::{
field::FieldElement,
poly::{gcd, Polynomial},
};
pub fn gfpoly_add(args: &Value) -> Result<Polynomial> {
let poly_a = Polynomial::from_c_array(&args["A"].clone());
@ -105,6 +108,15 @@ pub fn gfpoly_diff(args: &Value) -> Result<Polynomial> {
Ok(result)
}
pub fn gfpoly_gcd(args: &Value) -> Result<Polynomial> {
let poly_a = Polynomial::from_c_array(&args["A"].clone());
let poly_b = Polynomial::from_c_array(&args["B"].clone());
let result = gcd(poly_a, poly_b);
Ok(result)
}
#[cfg(test)]
mod tests {
use super::*;