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 portable implementations of standard library functions 17 /*! \file */ 18 19 #include "epid/member/tiny/src/serialize.h" 20 #include <stddef.h> 21 22 #include "epid/common/types.h" 23 #include "epid/member/tiny/math/serialize.h" 24 #include "epid/member/tiny/src/native_types.h" 25 #include "epid/member/tiny/src/signbasic.h" 26 27 void* BasicSignatureSerialize(BasicSignature* dest, 28 NativeBasicSignature const* src) { 29 #if defined(UNOPTIMIZED_SERIALIZATION) 30 EFqSerialize(&dest->B, &src->B); 31 EFqSerialize(&dest->K, &src->K); 32 EFqSerialize(&dest->T, &src->T); 33 FpSerialize(&dest->c, &src->c); 34 FpSerialize(&dest->sx, &src->sx); 35 FpSerialize(&dest->sf, &src->sf); 36 FpSerialize(&dest->sa, &src->sa); 37 FpSerialize(&dest->sb, &src->sb); 38 return dest + 1; 39 #else // defined(UNOPTIMIZED_SERIALIZATION) 40 SwapNativeAndPortableLayout(dest, sizeof(*dest), src, sizeof(*src)); 41 return dest + 1; 42 #endif // defined(UNOPTIMIZED_SERIALIZATION) 43 } 44 45 void const* BasicSignatureDeserialize(NativeBasicSignature* dest, 46 BasicSignature const* src) { 47 #if defined(UNOPTIMIZED_SERIALIZATION) 48 EFqDeserialize(&dest->B, &src->B); 49 EFqDeserialize(&dest->K, &src->K); 50 EFqDeserialize(&dest->T, &src->T); 51 FpDeserialize(&dest->c, &src->c); 52 FpDeserialize(&dest->sx, &src->sx); 53 FpDeserialize(&dest->sf, &src->sf); 54 FpDeserialize(&dest->sa, &src->sa); 55 FpDeserialize(&dest->sb, &src->sb); 56 return src + 1; 57 #else // defined(UNOPTIMIZED_SERIALIZATION) 58 SwapNativeAndPortableLayout(dest, sizeof(*dest), src, sizeof(*src)); 59 return src + 1; 60 #endif // defined(UNOPTIMIZED_SERIALIZATION) 61 } 62 63 void* GroupPubKeySerialize(GroupPubKey* dest, NativeGroupPubKey const* src) { 64 #if defined(UNOPTIMIZED_SERIALIZATION) 65 EFqSerialize(&dest->h1, &src->h1); 66 EFqSerialize(&dest->h2, &src->h2); 67 EFq2Serialize(&dest->w, &src->w); 68 dest->gid = src->gid; 69 return dest + 1; 70 #else // defined(UNOPTIMIZED_SERIALIZATION) 71 dest->gid = src->gid; 72 SwapNativeAndPortableLayout( 73 (uint8_t*)dest + sizeof(dest->gid), sizeof(*dest) - sizeof(dest->gid), 74 (uint8_t*)src + sizeof(src->gid), sizeof(*src) - sizeof(src->gid)); 75 return dest + 1; 76 #endif // defined(UNOPTIMIZED_SERIALIZATION) 77 } 78 79 void const* GroupPubKeyDeserialize(NativeGroupPubKey* dest, 80 GroupPubKey const* src) { 81 #if defined(UNOPTIMIZED_SERIALIZATION) 82 EFqDeserialize(&dest->h1, &src->h1); 83 EFqDeserialize(&dest->h2, &src->h2); 84 EFq2Deserialize(&dest->w, &src->w); 85 dest->gid = src->gid; 86 return src + 1; 87 #else // defined(UNOPTIMIZED_SERIALIZATION) 88 dest->gid = src->gid; 89 SwapNativeAndPortableLayout( 90 (uint8_t*)dest + sizeof(dest->gid), sizeof(*dest) - sizeof(dest->gid), 91 (uint8_t*)src + sizeof(src->gid), sizeof(*src) - sizeof(src->gid)); 92 return src + 1; 93 #endif // defined(UNOPTIMIZED_SERIALIZATION) 94 } 95 96 void const* PrivKeyDeserialize(NativePrivKey* dest, PrivKey const* src) { 97 #if defined(UNOPTIMIZED_SERIALIZATION) 98 EFqDeserialize(&dest->cred.A, &src->A); 99 FpDeserialize(&dest->cred.x, &src->x); 100 FpDeserialize(&dest->f, &src->f); 101 dest->cred.gid = src->gid; 102 return src + 1; 103 #else // defined(UNOPTIMIZED_SERIALIZATION) 104 dest->cred.gid = src->gid; 105 SwapNativeAndPortableLayout((uint8_t*)dest + sizeof(dest->cred.gid), 106 sizeof(*dest) - sizeof(dest->cred.gid), 107 (uint8_t*)src + sizeof(src->gid), 108 sizeof(*src) - sizeof(src->gid)); 109 return src + 1; 110 #endif // defined(UNOPTIMIZED_SERIALIZATION) 111 } 112 113 void const* PreCompDeserialize(NativeMemberPrecomp* dest, 114 MemberPrecomp const* src) { 115 #if defined(UNOPTIMIZED_SERIALIZATION) 116 Fq12Deserialize(&dest->ea2, (Fq12ElemStr*)&src->ea2); 117 Fq12Deserialize(&dest->e12, (Fq12ElemStr*)&src->e12); 118 Fq12Deserialize(&dest->e22, (Fq12ElemStr*)&src->e22); 119 Fq12Deserialize(&dest->e2w, (Fq12ElemStr*)&src->e2w); 120 return src + 1; 121 #else // defined(UNOPTIMIZED_SERIALIZATION) 122 SwapNativeAndPortableLayout(dest, sizeof(*dest), src, sizeof(*src)); 123 return src + 1; 124 #endif // defined(UNOPTIMIZED_SERIALIZATION) 125 } 126 127 void const* MembershipCredentialDeserialize(NativeMembershipCredential* dest, 128 MembershipCredential const* src) { 129 #if defined(UNOPTIMIZED_SERIALIZATION) 130 EFqDeserialize(&dest->A, &src->A); 131 FpDeserialize(&dest->x, &src->x); 132 dest->gid = src->gid; 133 return src + 1; 134 #else // defined(UNOPTIMIZED_SERIALIZATION) 135 dest->gid = src->gid; 136 SwapNativeAndPortableLayout( 137 (uint8_t*)dest + sizeof(dest->gid), sizeof(*dest) - sizeof(dest->gid), 138 (uint8_t*)src + sizeof(src->gid), sizeof(*src) - sizeof(src->gid)); 139 return src + 1; 140 #endif // defined(UNOPTIMIZED_SERIALIZATION) 141 } 142