aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2016-09-06 17:00:38 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2016-09-06 17:00:38 +0800
commitafc01080302fb3348536782e0af39cfb3943867f (patch)
tree29eb1f57d9e483a15fd2e3626629191d3805b3de /src
parent00c3253835763f5f7da16981719c5e751bf7b3e7 (diff)
downloaddexon-bls-afc01080302fb3348536782e0af39cfb3943867f.tar
dexon-bls-afc01080302fb3348536782e0af39cfb3943867f.tar.gz
dexon-bls-afc01080302fb3348536782e0af39cfb3943867f.tar.bz2
dexon-bls-afc01080302fb3348536782e0af39cfb3943867f.tar.lz
dexon-bls-afc01080302fb3348536782e0af39cfb3943867f.tar.xz
dexon-bls-afc01080302fb3348536782e0af39cfb3943867f.tar.zst
dexon-bls-afc01080302fb3348536782e0af39cfb3943867f.zip
add Secret::set for c api
Diffstat (limited to 'src')
-rw-r--r--src/bls.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/bls.cpp b/src/bls.cpp
index 03f7d16..3dfab45 100644
--- a/src/bls.cpp
+++ b/src/bls.cpp
@@ -87,6 +87,18 @@ struct Wrap {
size_t size() const { return pv->size(); }
};
+template<class T, class G>
+struct WrapPointer {
+ const T *const *v;
+ size_t k;
+ WrapPointer(const T *const *v, size_t k) : v(v), k(k) {}
+ const G& operator[](size_t i) const
+ {
+ return v[i]->self_->get();
+ }
+ size_t size() const { return k; }
+};
+
struct Polynomial {
FrVec c; // f[x] = sum_{i=0}^{k-1} c[i] x^i
void init(const Fr& s, int k)
@@ -426,6 +438,11 @@ void SecretKey::set(const SecretKeyVec& msk, const Id& id)
Wrap<SecretKey, Fr> w(msk);
evalPoly(self_->s, id.self_->v, w);
}
+void SecretKey::set(const SecretKey *const *msk, size_t k, const Id& id)
+{
+ WrapPointer<SecretKey, Fr> w(msk, k);
+ evalPoly(self_->s, id.self_->v, w);
+}
void SecretKey::recover(const SecretKeyVec& secVec, const IdVec& idVec)
{