Package dk.alexandra.fresco.stat.utils
Class VectorUtils
java.lang.Object
dk.alexandra.fresco.stat.utils.VectorUtils
public class VectorUtils extends Object
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceVectorUtils.EntrywiseBinaryOp<A,B,C>static interfaceVectorUtils.EntrywiseUnaryOp<A,C> -
Constructor Summary
Constructors Constructor Description VectorUtils() -
Method Summary
Modifier and Type Method Description static List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>add(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Add two secret vectors.static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>div(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> vector, dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed> scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Divide all values in the given vector by the scalar.static <A, B, C> ArrayList<C>entrywiseBinaryOp(List<A> a, List<B> b, VectorUtils.EntrywiseBinaryOp<A,B,C> op, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)static <A, C> ArrayList<C>entrywiseUnaryOp(List<A> a, VectorUtils.EntrywiseUnaryOp<A,C> op, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)static dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>innerProductWithBitvector(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Compute the inner product of a secret vector with a secret bit vector.static dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>innerProductWithBitvectorPublic(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, List<Double> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Compute the inner product of a public vector with a secret bit vector.static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>>input(List<BigInteger> list, int party, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)static <T> ArrayList<T>listBuilder(int size, IntFunction<T> generator)Build a list of the given size using a generator.static List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>>mult(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric protocolBuilderNumeric)Subtract two secret vectors.static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>>negate(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Compute the entry-wise binary negation of a secret vectorstatic ArrayList<dk.alexandra.fresco.framework.DRes<BigInteger>>open(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>scale(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> vector, double scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Scale all values in the given vector by the scalar.static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>scale(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> vector, dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed> scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Scale all values in the given vector by the scalar.static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>>scaleInt(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> vector, dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt> scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Scale all values in the given vector by the scalar.static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>sub(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Subtract two secret vectors.static List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>sum(List<List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>> a, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Add a list of secret vectors.
-
Constructor Details
-
VectorUtils
public VectorUtils()
-
-
Method Details
-
innerProductWithBitvectorPublic
public static dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed> innerProductWithBitvectorPublic(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, List<Double> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Compute the inner product of a public vector with a secret bit vector.- Parameters:
a- A secret bit vectorb- A public vectorbuilder- The builder to use.- Returns:
- The inner product of a and b.
-
innerProductWithBitvector
public static dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed> innerProductWithBitvector(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Compute the inner product of a secret vector with a secret bit vector.- Parameters:
a- A secret bit vectorb- A secret vectorbuilder- The builder to use.- Returns:
- The inner product of a and b.
-
listBuilder
Build a list of the given size using a generator. Note that this is not lazy -- the generator is called for all indices when this is called.- Type Parameters:
T-- Parameters:
size- The size of the list.generator- The generator used to create the entries.- Returns:
- A list containg the created elements.
-
scale
public static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> scale(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> vector, dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed> scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Scale all values in the given vector by the scalar.- Parameters:
vector- A secret vector.scalar- A secret scalar.builder- The builder to use.- Returns:
- A scaled vector.
-
scale
public static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> scale(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> vector, double scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Scale all values in the given vector by the scalar.- Parameters:
vector- A secret vector.scalar- A public scalar.builder- The builder to use.- Returns:
- A scaled vector.
-
scaleInt
public static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> scaleInt(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> vector, dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt> scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Scale all values in the given vector by the scalar.- Parameters:
vector- A secret vector.scalar- A public scalar.builder- The builder to use.- Returns:
- A scaled vector.
-
div
public static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> div(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> vector, dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed> scalar, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Divide all values in the given vector by the scalar.- Parameters:
vector- A secret vector.scalar- A secret scalar.builder- The builder to use.- Returns:
-
add
public static List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> add(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Add two secret vectors.- Parameters:
a- A secret vector.b- A secret scalar.builder- The builder to use.- Returns:
- a+b
-
sum
public static List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> sum(List<List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>>> a, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Add a list of secret vectors.- Parameters:
a- A list of secret vectors.builder- The builder to use.- Returns:
- sum(a)
-
sub
public static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> sub(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.lib.fixed.SFixed>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Subtract two secret vectors.- Parameters:
a- A secret vector.b- A secret scalar.builder- The builder to use.- Returns:
- a-b
-
negate
public static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> negate(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)Compute the entry-wise binary negation of a secret vector- Parameters:
a- A secret 0-1-vector.builder- The builder to use.- Returns:
- not a
-
open
public static ArrayList<dk.alexandra.fresco.framework.DRes<BigInteger>> open(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder) -
mult
public static List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> mult(List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> a, List<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> b, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric protocolBuilderNumeric)Subtract two secret vectors.- Parameters:
a- A secret vector.b- A secret scalar.protocolBuilderNumeric- The builder to use.- Returns:
- a.*b
-
entrywiseBinaryOp
public static <A, B, C> ArrayList<C> entrywiseBinaryOp(List<A> a, List<B> b, VectorUtils.EntrywiseBinaryOp<A,B,C> op, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder) -
entrywiseUnaryOp
public static <A, C> ArrayList<C> entrywiseUnaryOp(List<A> a, VectorUtils.EntrywiseUnaryOp<A,C> op, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder) -
input
public static ArrayList<dk.alexandra.fresco.framework.DRes<dk.alexandra.fresco.framework.value.SInt>> input(List<BigInteger> list, int party, dk.alexandra.fresco.framework.builder.numeric.ProtocolBuilderNumeric builder)
-