Home | History | Annotate | Download | only in src
      1 /*############################################################################
      2   # Copyright 2017 Intel Corporation
      3   #
      4   # Licensed under the Apache License, Version 2.0 (the "License");
      5   # you may not use this file except in compliance with the License.
      6   # You may obtain a copy of the License at
      7   #
      8   #     http://www.apache.org/licenses/LICENSE-2.0
      9   #
     10   # Unless required by applicable law or agreed to in writing, software
     11   # distributed under the License is distributed on an "AS IS" BASIS,
     12   # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13   # See the License for the specific language governing permissions and
     14   # limitations under the License.
     15   ############################################################################*/
     16 /// Tiny member Init/Deinit implementation.
     17 /*! \file */
     18 
     19 #define EXPORT_EPID_APIS
     20 #include <epid/member/api.h>
     21 
     22 #include <stdint.h>
     23 #include "epid/common/types.h"
     24 #include "epid/member/software_member.h"
     25 #include "epid/member/tiny/math/fp.h"
     26 #include "epid/member/tiny/math/mathtypes.h"
     27 #include "epid/member/tiny/math/pairing.h"
     28 #include "epid/member/tiny/math/serialize.h"
     29 #include "epid/member/tiny/src/context.h"
     30 #include "epid/member/tiny/src/serialize.h"
     31 #include "epid/member/tiny/stdlib/tiny_stdlib.h"
     32 
     33 EpidStatus EPID_API EpidMemberGetSize(MemberParams const* params,
     34                                       size_t* context_size) {
     35   const size_t kMinContextSize =
     36       sizeof(MemberCtx) - sizeof(((MemberCtx*)0)->heap);
     37   if (!params || !context_size) {
     38     return kEpidBadArgErr;
     39   }
     40   *context_size = kMinContextSize + SIGRL_HEAP_SIZE +
     41                   BasenamesGetSize(MAX_ALLOWED_BASENAMES);
     42   return kEpidNoErr;
     43 }
     44 
     45 EpidStatus EPID_API EpidMemberInit(MemberParams const* params, MemberCtx* ctx) {
     46   EpidStatus sts = kEpidNoErr;
     47   size_t context_size = 0;
     48   if (!params || !ctx) {
     49     return kEpidBadArgErr;
     50   }
     51 
     52   sts = EpidMemberGetSize(params, &context_size);
     53   if (sts != kEpidNoErr) {
     54     return sts;
     55   }
     56 
     57   memset(ctx, 0, context_size);
     58 
     59   ctx->is_provisioned = 0;
     60   ctx->f_is_set = 0;
     61 
     62   // set the default hash algorithm to sha512
     63   ctx->hash_alg = kSha512;
     64   ctx->f_is_set = 0;
     65   // set allowed basenames pointer to the heap
     66   ctx->allowed_basenames = (AllowedBasenames*)&ctx->heap[SIGRL_HEAP_SIZE];
     67   InitBasenames(ctx->allowed_basenames, MAX_ALLOWED_BASENAMES);
     68   if (params->f) {
     69     FpDeserialize(&ctx->f, params->f);
     70     if (!FpInField(&ctx->f)) {
     71       memset(&ctx->f, 0, sizeof(ctx->f));
     72       return kEpidBadArgErr;
     73     }
     74     ctx->f_is_set = 1;
     75   }
     76   ctx->rnd_func = params->rnd_func;
     77   ctx->rnd_param = params->rnd_param;
     78   PairingInit(&ctx->pairing_state);
     79   return kEpidNoErr;
     80 }
     81 
     82 void EPID_API EpidMemberDeinit(MemberCtx* ctx) {
     83   (void)ctx;
     84   return;
     85 }
     86 
     87 EpidStatus EPID_API EpidMemberCreate(MemberParams const* params,
     88                                      MemberCtx** ctx) {
     89   (void)params;
     90   (void)ctx;
     91   return kEpidNotImpl;
     92 }
     93 
     94 void EPID_API EpidMemberDelete(MemberCtx** ctx) { (void)ctx; }
     95