12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*############################################################################
- # Copyright 2017 Intel Corporation
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- ############################################################################*/
- /// Member pre-computation implementation
- /*! \file */
- #include "epid/member/src/precomp.h"
- #include "epid/common/src/epid2params.h"
- #include "epid/common/src/grouppubkey.h"
- #include "epid/common/types.h"
- /// Handle SDK Error with Break
- #define BREAK_ON_EPID_ERROR(ret) \
- if (kEpidNoErr != (ret)) { \
- break; \
- }
- EpidStatus PrecomputeMemberPairing(Epid2Params_ const* epid2_params,
- GroupPubKey const* pub_key,
- G1ElemStr const* A_str,
- MemberPrecomp* precomp) {
- EpidStatus sts = kEpidErr;
- GroupPubKey_* pub_key_ = NULL;
- EcPoint* A = NULL;
- FfElement* e = NULL;
- if (!epid2_params || !pub_key || !A_str || !precomp) return kEpidBadArgErr;
- do {
- EcGroup* G1 = epid2_params->G1;
- EcGroup* G2 = epid2_params->G2;
- FiniteField* GT = epid2_params->GT;
- PairingState* ps_ctx = epid2_params->pairing_state;
- EcPoint* g2 = epid2_params->g2;
- sts = CreateGroupPubKey(pub_key, G1, G2, &pub_key_);
- BREAK_ON_EPID_ERROR(sts);
- sts = NewFfElement(GT, &e);
- BREAK_ON_EPID_ERROR(sts);
- // 1. The member computes e12 = pairing(h1, g2).
- sts = Pairing(ps_ctx, pub_key_->h1, g2, e);
- BREAK_ON_EPID_ERROR(sts);
- sts = WriteFfElement(GT, e, &precomp->e12, sizeof(precomp->e12));
- BREAK_ON_EPID_ERROR(sts);
- // 2. The member computes e22 = pairing(h2, g2).
- sts = Pairing(ps_ctx, pub_key_->h2, g2, e);
- BREAK_ON_EPID_ERROR(sts);
- sts = WriteFfElement(GT, e, &precomp->e22, sizeof(precomp->e22));
- BREAK_ON_EPID_ERROR(sts);
- // 3. The member computes e2w = pairing(h2, w).
- sts = Pairing(ps_ctx, pub_key_->h2, pub_key_->w, e);
- BREAK_ON_EPID_ERROR(sts);
- sts = WriteFfElement(GT, e, &precomp->e2w, sizeof(precomp->e2w));
- BREAK_ON_EPID_ERROR(sts);
- // 4. The member computes ea2 = pairing(A, g2).
- sts = NewEcPoint(G1, &A);
- BREAK_ON_EPID_ERROR(sts);
- sts = ReadEcPoint(G1, A_str, sizeof(*A_str), A);
- BREAK_ON_EPID_ERROR(sts);
- sts = Pairing(ps_ctx, A, g2, e);
- BREAK_ON_EPID_ERROR(sts);
- sts = WriteFfElement(GT, e, &precomp->ea2, sizeof(precomp->ea2));
- BREAK_ON_EPID_ERROR(sts);
- sts = kEpidNoErr;
- } while (0);
- DeleteGroupPubKey(&pub_key_);
- DeleteEcPoint(&A);
- DeleteFfElement(&e);
- return sts;
- }
|