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