|
|
@@ -262,35 +262,61 @@ fn sub_scalar(a: MalArgs) -> MalRet {
|
|
|
s0.sub_assign(s1);
|
|
|
Ok(Str(std::string::ToString::to_string(&s0)[2..].to_string()))
|
|
|
}
|
|
|
- _ => error("expected (scalar, scalar)"),
|
|
|
+ _ => error("scalar sub expected (scalar, scalar)"),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fn mul_scalar(a: MalArgs) -> MalRet {
|
|
|
println!("{:?}", a);
|
|
|
match (a[0].clone(), a[1].clone()) {
|
|
|
+ (Func(_, _), ZKScalar(a1)) => {
|
|
|
+ if let Vector(ref values, _) = a[0].apply(vec![]).unwrap() {
|
|
|
+ if let ZKScalar(mut a0) = values[0] {
|
|
|
+ a0.mul_assign(a1);
|
|
|
+ Ok(ZKScalar(a0))
|
|
|
+ } else {
|
|
|
+ error("scalar mul expect (zkscalar, zkscalar) found (func, zkscalar)")
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ error("scalar mul expect (zkscalar, zkscalar)")
|
|
|
+ }
|
|
|
+ }
|
|
|
(ZKScalar(mut a0), ZKScalar(a1)) => {
|
|
|
- // let (mut s0, s1) = (Scalar::from_string(&a0), Scalar::from_string(&a1));
|
|
|
a0.mul_assign(a1);
|
|
|
Ok(ZKScalar(a0))
|
|
|
}
|
|
|
- _ => error("expected (zkscalar, zkscalar)"),
|
|
|
+ _ => error("scalar mul expect (zkscalar, zkscalar)"),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fn div_scalar(a: MalArgs) -> MalRet {
|
|
|
+ println!("{:?}", a);
|
|
|
match (a[0].clone(), a[1].clone()) {
|
|
|
+ (ZKScalar(s0), ZKScalar(s1)) => {
|
|
|
+ let ret = s1.invert().map(|other| *&s0 * other);
|
|
|
+ if bool::from(ret.is_some()) {
|
|
|
+ Ok(Str(
|
|
|
+ std::string::ToString::to_string(&ret.unwrap())[2..].to_string()
|
|
|
+ ))
|
|
|
+ } else {
|
|
|
+ error("DivisionByZero")
|
|
|
+ }
|
|
|
+ }
|
|
|
(Str(a0), Str(a1)) => {
|
|
|
let (s0, s1) = (
|
|
|
bls12_381::Scalar::from_string(&a0),
|
|
|
bls12_381::Scalar::from_string(&a1),
|
|
|
);
|
|
|
let ret = s1.invert().map(|other| *&s0 * other);
|
|
|
- Ok(Str(
|
|
|
- std::string::ToString::to_string(&ret.unwrap())[2..].to_string()
|
|
|
- ))
|
|
|
+ if bool::from(ret.is_some()) {
|
|
|
+ Ok(Str(
|
|
|
+ std::string::ToString::to_string(&ret.unwrap())[2..].to_string()
|
|
|
+ ))
|
|
|
+ } else {
|
|
|
+ error("DivisionByZero")
|
|
|
+ }
|
|
|
}
|
|
|
- _ => error("expected (scalar, scalar)"),
|
|
|
+ _ => error("scalar div expected (scalar, scalar)"),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -362,7 +388,7 @@ fn add_scalar(a: MalArgs) -> MalRet {
|
|
|
let (mut z0, z1) = (a0.clone(), a1.clone());
|
|
|
z0.add_assign(z1);
|
|
|
Ok(ZKScalar(z0))
|
|
|
- },
|
|
|
+ }
|
|
|
(Str(a0), Str(a1)) => {
|
|
|
let (mut s0, s1) = (
|
|
|
bls12_381::Scalar::from_string(&a0),
|