Home | History | Annotate | Download | only in 1.1
      1 /*############################################################################
      2   # Copyright 2016-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 #ifndef EPID_COMMON_1_1_TYPES_H_
     17 #define EPID_COMMON_1_1_TYPES_H_
     18 
     19 /*!
     20 * \file
     21 * \brief SDK data types for Intel(R) EPID 1.1.
     22 */
     23 
     24 #include <limits.h>  // for CHAR_BIT
     25 
     26 #include "epid/common/types.h"
     27 
     28 /// Intel(R) EPID 1.1 specific data types.
     29 /*!
     30 \defgroup Epid11Types Intel(R) EPID 1.1 specific types
     31 Defines serialized data types used by the SDK. These data types
     32 are only used by components that need to do Intel(R) EPID 1.1
     33 verification.
     34 
     35 \ingroup EpidTypes
     36 \see <a href="group___epid11_verifier_module.html#details"><b>Intel(R) EPID 1.1
     37 support</b></a>
     38 @{
     39 */
     40 
     41 #pragma pack(1)
     42 
     43 /// 80 bit octet string
     44 typedef struct OctStr80 {
     45   unsigned char data[80 / CHAR_BIT];  ///< 80 bit data
     46 } OctStr80;
     47 
     48 /// 600 bit octet string
     49 typedef struct OctSt600 {
     50   unsigned char data[600 / CHAR_BIT];  ///< 600 bit data
     51 } OctStr600;
     52 
     53 /// 768 bit octet string
     54 typedef struct OctStr768 {
     55   unsigned char data[768 / CHAR_BIT];  ///< 768 bit data
     56 } OctStr768;
     57 
     58 /// Serialized Fq3 element
     59 typedef struct Fq3ElemStr {
     60   FqElemStr a[3];  ///< polynomial coefficient
     61 } Fq3ElemStr;
     62 
     63 /// Serialized Intel(R) EPID 1.1 G1 element
     64 typedef G1ElemStr Epid11G1ElemStr;
     65 
     66 /// Serialized Intel(R) EPID 1.1 G3 element
     67 typedef G1ElemStr Epid11G3ElemStr;
     68 
     69 /// Serialized Intel(R) EPID 1.1 G2 element
     70 typedef struct Epid11G2ElemStr {
     71   FqElemStr x[3];  ///< an integer between [0, q-1]
     72   FqElemStr y[3];  ///< an integer between [0, q-1]
     73 } Epid11G2ElemStr;
     74 
     75 /// Serialized Intel(R) EPID 1.1 GT element
     76 typedef struct Epid11GtElemStr {
     77   Fq3ElemStr a[2];  ///< an element in Fq3
     78 } Epid11GtElemStr;
     79 
     80 /// Intel(R) EPID 1.1 Parameters.
     81 /*!
     82 Intel(R) EPID 1.1 parameters are: (p, q, h, a, b, coeff, qnr, orderG2, p', q',
     83 h', a', b', g1, g2, g3). The size of the Intel(R) EPID public parameters of G1,
     84 G2, G3, and GT is 6464 bits or 808 bytes.
     85 */
     86 typedef struct Epid11Params {
     87   BigNumStr p;  ///< a prime
     88   BigNumStr q;  ///< a prime
     89   OctStr32 h;   ///< a small integer, also denoted as cofactor
     90   FqElemStr a;  ///< an integer between [0, q-1]
     91   FqElemStr b;  ///< an integer between [0, q-1]
     92   /*! the coefficients of an irreducible polynomial
     93   coeff[0], coeff[1], coeff[2] are 256-bit integers between [0, q - 1]*/
     94   BigNumStr coeff[3];
     95   FqElemStr qnr;      ///< a quadratic non-residue (an integer between [0, q-1])
     96   OctStr768 orderG2;  ///< the total number of points in G2 elliptic curve
     97   BigNumStr p_tick;   ///< a prime
     98   BigNumStr q_tick;   ///< a prime
     99   OctStr32 h_tick;    ///< a small integer, also denoted as cofactor
    100   FqElemStr a_tick;   ///< an integer between [0, q-1]
    101   FqElemStr b_tick;   ///< an integer between [0, q-1]
    102   Epid11G1ElemStr g1;  ///< a generator(an element) of G1
    103   Epid11G2ElemStr g2;  ///<  a generator (an element) of G2
    104   Epid11G1ElemStr g3;  ///<  a generator (an element) of G3
    105 } Epid11Params;
    106 
    107 /// Intel(R) EPID 1.1 group ID
    108 typedef OctStr32 Epid11GroupId;
    109 
    110 /// Intel(R) EPID 1.1 group public key
    111 /*!
    112 * Group public key: (gid, h1, h2, w)
    113 */
    114 typedef struct Epid11GroupPubKey {
    115   Epid11GroupId gid;   ///< group ID
    116   Epid11G1ElemStr h1;  ///< an element in G1
    117   Epid11G1ElemStr h2;  ///< an element in G1
    118   Epid11G2ElemStr w;   ///< an element in G2
    119 } Epid11GroupPubKey;
    120 
    121 /// Intel(R) EPID 1.1 basic signature.
    122 /*!
    123 * Basic signature: (B, K, T1, T2, c, nd, sx, sy, sf, sa, sb, salpha, sbeta)
    124 */
    125 typedef struct Epid11BasicSignature {
    126   Epid11G3ElemStr B;   ///< an element in G3
    127   Epid11G3ElemStr K;   ///< an element in G3
    128   Epid11G1ElemStr T1;  ///< an element in G1
    129   Epid11G1ElemStr T2;  ///< an element in G1
    130   OctStr256 c;         ///< a 256-bit integer
    131   OctStr80 nd;         ///< an 80-bit integer
    132   FpElemStr sx;        ///< an integer between [0, p-1]
    133   FpElemStr sy;        ///< an integer between [0, p-1]
    134   OctStr600 sf;        ///< a 593-bit integer
    135   FpElemStr sa;        ///< an integer between [0, p-1]
    136   FpElemStr sb;        ///< an integer between [0, p-1]
    137   FpElemStr salpha;    ///< an integer between [0, p-1]
    138   FpElemStr sbeta;     ///< an integer between [0, p-1]
    139 } Epid11BasicSignature;
    140 
    141 /// Intel(R) EPID 1.1 non-revoked Proof
    142 /*!
    143 * Non-revoked Proof: (T, c, smu, snu)
    144 */
    145 typedef struct Epid11NrProof {
    146   Epid11G3ElemStr T;  ///< an element in G3
    147   OctStr256 c;        ///< a 256-bit integer
    148   FpElemStr smu;      ///< an integer between [0, p'-1]
    149   FpElemStr snu;      ///< an integer between [0, p'-1]
    150 } Epid11NrProof;
    151 
    152 /// Intel(R) EPID 1.1 Signature
    153 /*!
    154 * Signature: (sigma0, RLver, n2, sigma[0], ..., sigma[n2-1])
    155 */
    156 typedef struct Epid11Signature {
    157   Epid11BasicSignature sigma0;  ///< basic signature
    158   OctStr32 rl_ver;              ///< revocation list version number
    159   OctStr32 n2;                  ///< number of entries in SigRL
    160   Epid11NrProof sigma[1];  ///< array of non-revoked proofs (flexible array)
    161 } Epid11Signature;
    162 
    163 /// Intel(R) EPID 1.1 private-key based revocation list
    164 /*!
    165 * Private-key based revocation list PrivRL: (gid, RLver, n1, f[0],
    166 * ..., f[n1-1])
    167 */
    168 typedef struct Epid11PrivRl {
    169   Epid11GroupId gid;  ///< group ID
    170   OctStr32 version;   ///< revocation list version number
    171   OctStr32 n1;        ///< number of entries in PrivRL
    172   FpElemStr f[1];     ///< integers between [1, p-1]  (flexible array)
    173 } Epid11PrivRl;
    174 
    175 /// Intel(R) EPID 1.1 entry in SigRL (B,K)
    176 typedef struct Epid11SigRlEntry {
    177   Epid11G3ElemStr b;  ///< an element of G1
    178   Epid11G3ElemStr k;  ///< an element of G1
    179 } Epid11SigRlEntry;
    180 
    181 /// Intel(R) EPID 1.1 signature based revocation list
    182 /*!
    183 * Signature based revocation list SigRL: (gid, RLver, n2, B[0],
    184 * K[0], ..., B[n2-1], K[n2-1])
    185 */
    186 typedef struct Epid11SigRl {
    187   Epid11GroupId gid;       ///< group ID
    188   OctStr32 version;        ///< revocation list version number
    189   OctStr32 n2;             ///< number of entries in SigRL
    190   Epid11SigRlEntry bk[1];  ///< revoked  Bs and Ks (flexible array)
    191 } Epid11SigRl;
    192 
    193 /// Intel(R) EPID 1.1 group revocation list
    194 /*!
    195 * Group revocation list GroupRL: (RLver, n3, gid[0], ...,
    196 * gid[n3-1])
    197 */
    198 typedef struct Epid11GroupRl {
    199   OctStr32 version;      ///< revocation list version number
    200   OctStr32 n3;           ///< number of entries in GroupRL
    201   Epid11GroupId gid[1];  ///< revoked group IDs (flexible array)
    202 } Epid11GroupRl;
    203 
    204 #pragma pack()
    205 
    206 /*! @} */
    207 #endif  // EPID_COMMON_1_1_TYPES_H_
    208