/*############################################################################
# Copyright 2016-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.
############################################################################*/
/*!
* \file
* \brief native type validation unit tests.
*
* \warning to run the tests in this file you must build a non-shared mode.
*/
#ifndef SHARED
#include <cstring>
#include <vector>
#include "epid/common-testhelper/epid_gtest-testhelper.h"
#include "epid/member/tiny/unittests/member-testhelper.h"
#include "gtest/gtest.h"
extern "C" {
#include "epid/common/types.h"
#include "epid/member/tiny/math/pairing.h"
#include "epid/member/tiny/src/native_types.h"
#include "epid/member/tiny/src/validate.h"
}
namespace {
//////////////////////////////////////////////////////////////////////////
// GroupPubKeyIsInRange Tests
TEST_F(EpidMemberTest, GroupPubKeyIsInRangePasses) {
NativeGroupPubKey const input = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xb580e099, 0x434c62fd, 0x64cee3ce, 0xd06d8f9d, 0x7e27b0cb,
0x3d753d61, 0xe21b17eb, 0xb36fff81}}},
{{{0x74f459ee, 0xd8693ea1, 0x82457e7f, 0xee3d6642, 0xe94dae9c,
0xfdb5b79d, 0xe08859a4, 0x3a075680}}}}, // h1
{{{{0xbcdd7fe1, 0x29666163, 0xd55ba704, 0xdc99ed42, 0x5474107b,
0xd5dbca1c, 0x63c2518e, 0xd2742e9f}}},
{{{0xe78e1084, 0x93a56ecc, 0xde4ceacb, 0xda3f517d, 0xe85b087b,
0x48120aa6, 0xe314ac72, 0x765dc06e}}}}, // h2
{{{{{0x0728e896, 0x8dcd3688, 0x6a95cac6, 0x788753f6, 0x401ba5b6,
0x50719451, 0xe20fca1c, 0xbd195a95}}},
{{{0xe2f4b3a1, 0x22d9fde0, 0x0f6c56f5, 0x2414cfd1, 0x15d775f8,
0xa6657a68, 0xb86ae7e5, 0xca78115b}}}},
{{{{0x57e4f33c, 0x0a3b5896, 0x89c2399c, 0x898846dd, 0x5deef56a,
0xbc077230, 0xe8b3c725, 0x9021a7e0}}},
{{{0xee1140a9, 0x837d3e31, 0x8e25c6ad, 0xba6bf0da, 0x1f3deaa2,
0x5d0a88db, 0x1bb6f705, 0x79516936}}}}}};
EXPECT_TRUE(GroupPubKeyIsInRange(&input));
}
TEST_F(EpidMemberTest, GroupPubKeyIsInRangeFails) {
NativeGroupPubKey const input = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xAED33013, 0xD3292DDB, 0x12980A82, 0x0CDC65FB, 0xEE71A49F,
0x46E5F25E, 0xFFFCF0CD, 0xFFFFFFFF}}}, //< q
{{{0x74f459ee, 0xd8693ea1, 0x82457e7f, 0xee3d6642, 0xe94dae9c,
0xfdb5b79d, 0xe08859a4, 0x3a075680}}}}, // h1
{{{{0xbcdd7fe1, 0x29666163, 0xd55ba704, 0xdc99ed42, 0x5474107b,
0xd5dbca1c, 0x63c2518e, 0xd2742e9f}}},
{{{0xe78e1084, 0x93a56ecc, 0xde4ceacb, 0xda3f517d, 0xe85b087b,
0x48120aa6, 0xe314ac72, 0x765dc06e}}}}, // h2
{{{{{0x0728e896, 0x8dcd3688, 0x6a95cac6, 0x788753f6, 0x401ba5b6,
0x50719451, 0xe20fca1c, 0xbd195a95}}},
{{{0xe2f4b3a1, 0x22d9fde0, 0x0f6c56f5, 0x2414cfd1, 0x15d775f8,
0xa6657a68, 0xb86ae7e5, 0xca78115b}}}},
{{{{0x57e4f33c, 0x0a3b5896, 0x89c2399c, 0x898846dd, 0x5deef56a,
0xbc077230, 0xe8b3c725, 0x9021a7e0}}},
{{{0xee1140a9, 0x837d3e31, 0x8e25c6ad, 0xba6bf0da, 0x1f3deaa2,
0x5d0a88db, 0x1bb6f705, 0x79516936}}}}}};
EXPECT_FALSE(GroupPubKeyIsInRange(&input));
}
//////////////////////////////////////////////////////////////////////////
// MembershipCredentialIsInRange Tests
TEST_F(EpidMemberTest, MembershipCredentialIsInRangePasses) {
NativeMembershipCredential const input = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0x196254db, 0x570890e8, 0xdaf296ec, 0x87683f4e, 0xeb4caf8a,
0xacbfdd77, 0xf468e15f, 0x46c969ee}}},
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086, 0x105eafd8,
0xa1e0d7df, 0x0a30ae43} // x
};
EXPECT_TRUE(MembershipCredentialIsInRange(&input));
}
TEST_F(EpidMemberTest, MembershipCredentialIsInRangeFails) {
NativeMembershipCredential const input = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xAED33013, 0xD3292DDB, 0x12980A82, 0x0CDC65FB, 0xEE71A49F,
0x46E5F25E, 0xFFFCF0CD, 0xFFFFFFFF}}}, //< q
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086, 0x105eafd8,
0xa1e0d7df, 0x0a30ae43} // x
};
EXPECT_FALSE(MembershipCredentialIsInRange(&input));
}
//////////////////////////////////////////////////////////////////////////
// MembershipCredentialIsInGroup Tests
TEST_F(EpidMemberTest, MembershipCredentialIsInGroupPasses) {
PairingState pairing_state;
PairingInit(&pairing_state);
NativeMembershipCredential const input = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0x196254db, 0x570890e8, 0xdaf296ec, 0x87683f4e, 0xeb4caf8a,
0xacbfdd77, 0xf468e15f, 0x46c969ee}}},
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086, 0x105eafd8,
0xa1e0d7df, 0x0a30ae43} // x
};
FpElem const f = {0x636131c7, 0x362d4135, 0xa707879b, 0xa16567fd,
0xe07cc68e, 0x05d64356, 0x6d47090b, 0x4840b56c}; // f
NativeGroupPubKey const pubkey = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xb580e099, 0x434c62fd, 0x64cee3ce, 0xd06d8f9d, 0x7e27b0cb,
0x3d753d61, 0xe21b17eb, 0xb36fff81}}},
{{{0x74f459ee, 0xd8693ea1, 0x82457e7f, 0xee3d6642, 0xe94dae9c,
0xfdb5b79d, 0xe08859a4, 0x3a075680}}}}, // h1
{{{{0xbcdd7fe1, 0x29666163, 0xd55ba704, 0xdc99ed42, 0x5474107b,
0xd5dbca1c, 0x63c2518e, 0xd2742e9f}}},
{{{0xe78e1084, 0x93a56ecc, 0xde4ceacb, 0xda3f517d, 0xe85b087b,
0x48120aa6, 0xe314ac72, 0x765dc06e}}}}, // h2
{{{{{0x0728e896, 0x8dcd3688, 0x6a95cac6, 0x788753f6, 0x401ba5b6,
0x50719451, 0xe20fca1c, 0xbd195a95}}},
{{{0xe2f4b3a1, 0x22d9fde0, 0x0f6c56f5, 0x2414cfd1, 0x15d775f8,
0xa6657a68, 0xb86ae7e5, 0xca78115b}}}},
{{{{0x57e4f33c, 0x0a3b5896, 0x89c2399c, 0x898846dd, 0x5deef56a,
0xbc077230, 0xe8b3c725, 0x9021a7e0}}},
{{{0xee1140a9, 0x837d3e31, 0x8e25c6ad, 0xba6bf0da, 0x1f3deaa2,
0x5d0a88db, 0x1bb6f705, 0x79516936}}}}}};
EXPECT_TRUE(
MembershipCredentialIsInGroup(&input, &f, &pubkey, &pairing_state));
}
TEST_F(EpidMemberTest, MembershipCredentialIsInGroupFails) {
PairingState pairing_state;
PairingInit(&pairing_state);
NativeMembershipCredential const input = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02}, // group id
{{{{0x196254db, 0x570890e8, 0xdaf296ec, 0x87683f4e, 0xeb4caf8a,
0xacbfdd77, 0xf468e15f, 0x46c969ee}}},
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086, 0x105eafd8,
0xa1e0d7df, 0x0a30ae43} // x
};
FpElem const f = {0x636131c7, 0x362d4135, 0xa707879b, 0xa16567fd,
0xe07cc68e, 0x05d64356, 0x6d47090b, 0x4840b56c}; // f
NativeGroupPubKey const pubkey = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xb580e099, 0x434c62fd, 0x64cee3ce, 0xd06d8f9d, 0x7e27b0cb,
0x3d753d61, 0xe21b17eb, 0xb36fff81}}},
{{{0x74f459ee, 0xd8693ea1, 0x82457e7f, 0xee3d6642, 0xe94dae9c,
0xfdb5b79d, 0xe08859a4, 0x3a075680}}}}, // h1
{{{{0xbcdd7fe1, 0x29666163, 0xd55ba704, 0xdc99ed42, 0x5474107b,
0xd5dbca1c, 0x63c2518e, 0xd2742e9f}}},
{{{0xe78e1084, 0x93a56ecc, 0xde4ceacb, 0xda3f517d, 0xe85b087b,
0x48120aa6, 0xe314ac72, 0x765dc06e}}}}, // h2
{{{{{0x0728e896, 0x8dcd3688, 0x6a95cac6, 0x788753f6, 0x401ba5b6,
0x50719451, 0xe20fca1c, 0xbd195a95}}},
{{{0xe2f4b3a1, 0x22d9fde0, 0x0f6c56f5, 0x2414cfd1, 0x15d775f8,
0xa6657a68, 0xb86ae7e5, 0xca78115b}}}},
{{{{0x57e4f33c, 0x0a3b5896, 0x89c2399c, 0x898846dd, 0x5deef56a,
0xbc077230, 0xe8b3c725, 0x9021a7e0}}},
{{{0xee1140a9, 0x837d3e31, 0x8e25c6ad, 0xba6bf0da, 0x1f3deaa2,
0x5d0a88db, 0x1bb6f705, 0x79516936}}}}}};
EXPECT_FALSE(
MembershipCredentialIsInGroup(&input, &f, &pubkey, &pairing_state));
}
//////////////////////////////////////////////////////////////////////////
// PrivKeyIsInRange Tests
TEST_F(EpidMemberTest, PrivKeyIsInRangePasses) {
NativePrivKey const input = {
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01}, // group id
{{{{0x196254db, 0x570890e8, 0xdaf296ec, 0x87683f4e, 0xeb4caf8a,
0xacbfdd77, 0xf468e15f, 0x46c969ee}}},
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086,
0x105eafd8, 0xa1e0d7df, 0x0a30ae43} // x
},
{0x636131c7, 0x362d4135, 0xa707879b, 0xa16567fd, 0xe07cc68e, 0x05d64356,
0x6d47090b, 0x4840b56c} // f
};
EXPECT_TRUE(PrivKeyIsInRange(&input));
}
TEST_F(EpidMemberTest, PrivKeyIsInRangeRangeFails) {
NativePrivKey const input = {
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xAED33013, 0xD3292DDB, 0x12980A82, 0x0CDC65FB, 0xEE71A49F,
0x46E5F25E, 0xFFFCF0CD, 0xFFFFFFFF}}}, //< q
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086,
0x105eafd8, 0xa1e0d7df, 0x0a30ae43} // x
},
{0x636131c7, 0x362d4135, 0xa707879b, 0xa16567fd, 0xe07cc68e, 0x05d64356,
0x6d47090b, 0x4840b56c} // f
};
EXPECT_FALSE(PrivKeyIsInRange(&input));
}
//////////////////////////////////////////////////////////////////////////
// PrivKeyIsInGroup Tests
TEST_F(EpidMemberTest, PrivKeyIsInGroupPasses) {
PairingState pairing_state;
PairingInit(&pairing_state);
NativePrivKey const input = {
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01}, // group id
{{{{0x196254db, 0x570890e8, 0xdaf296ec, 0x87683f4e, 0xeb4caf8a,
0xacbfdd77, 0xf468e15f, 0x46c969ee}}},
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086,
0x105eafd8, 0xa1e0d7df, 0x0a30ae43} // x
},
{0x636131c7, 0x362d4135, 0xa707879b, 0xa16567fd, 0xe07cc68e, 0x05d64356,
0x6d47090b, 0x4840b56c} // f
};
NativeGroupPubKey const pubkey = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xb580e099, 0x434c62fd, 0x64cee3ce, 0xd06d8f9d, 0x7e27b0cb,
0x3d753d61, 0xe21b17eb, 0xb36fff81}}},
{{{0x74f459ee, 0xd8693ea1, 0x82457e7f, 0xee3d6642, 0xe94dae9c,
0xfdb5b79d, 0xe08859a4, 0x3a075680}}}}, // h1
{{{{0xbcdd7fe1, 0x29666163, 0xd55ba704, 0xdc99ed42, 0x5474107b,
0xd5dbca1c, 0x63c2518e, 0xd2742e9f}}},
{{{0xe78e1084, 0x93a56ecc, 0xde4ceacb, 0xda3f517d, 0xe85b087b,
0x48120aa6, 0xe314ac72, 0x765dc06e}}}}, // h2
{{{{{0x0728e896, 0x8dcd3688, 0x6a95cac6, 0x788753f6, 0x401ba5b6,
0x50719451, 0xe20fca1c, 0xbd195a95}}},
{{{0xe2f4b3a1, 0x22d9fde0, 0x0f6c56f5, 0x2414cfd1, 0x15d775f8,
0xa6657a68, 0xb86ae7e5, 0xca78115b}}}},
{{{{0x57e4f33c, 0x0a3b5896, 0x89c2399c, 0x898846dd, 0x5deef56a,
0xbc077230, 0xe8b3c725, 0x9021a7e0}}},
{{{0xee1140a9, 0x837d3e31, 0x8e25c6ad, 0xba6bf0da, 0x1f3deaa2,
0x5d0a88db, 0x1bb6f705, 0x79516936}}}}}};
EXPECT_TRUE(PrivKeyIsInGroup(&input, &pubkey, &pairing_state));
}
TEST_F(EpidMemberTest, PrivKeyIsInGroupFails) {
PairingState pairing_state;
PairingInit(&pairing_state);
NativePrivKey const input = {
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02}, // group id
{{{{0x196254db, 0x570890e8, 0xdaf296ec, 0x87683f4e, 0xeb4caf8a,
0xacbfdd77, 0xf468e15f, 0x46c969ee}}},
{{{0x82803777, 0x16249880, 0xffa64ba8, 0xae43de62, 0x0acf364f,
0x9a1b8aad, 0x91e4a81d, 0x1e522316}}}}, // A
{0x1372c377, 0x00147c6b, 0x46ddb71b, 0xd09db9e4, 0x5a611086,
0x105eafd8, 0xa1e0d7df, 0x0a30ae43} // x
},
{0x636131c7, 0x362d4135, 0xa707879b, 0xa16567fd, 0xe07cc68e, 0x05d64356,
0x6d47090b, 0x4840b56c} // f
};
NativeGroupPubKey const pubkey = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xb580e099, 0x434c62fd, 0x64cee3ce, 0xd06d8f9d, 0x7e27b0cb,
0x3d753d61, 0xe21b17eb, 0xb36fff81}}},
{{{0x74f459ee, 0xd8693ea1, 0x82457e7f, 0xee3d6642, 0xe94dae9c,
0xfdb5b79d, 0xe08859a4, 0x3a075680}}}}, // h1
{{{{0xbcdd7fe1, 0x29666163, 0xd55ba704, 0xdc99ed42, 0x5474107b,
0xd5dbca1c, 0x63c2518e, 0xd2742e9f}}},
{{{0xe78e1084, 0x93a56ecc, 0xde4ceacb, 0xda3f517d, 0xe85b087b,
0x48120aa6, 0xe314ac72, 0x765dc06e}}}}, // h2
{{{{{0x0728e896, 0x8dcd3688, 0x6a95cac6, 0x788753f6, 0x401ba5b6,
0x50719451, 0xe20fca1c, 0xbd195a95}}},
{{{0xe2f4b3a1, 0x22d9fde0, 0x0f6c56f5, 0x2414cfd1, 0x15d775f8,
0xa6657a68, 0xb86ae7e5, 0xca78115b}}}},
{{{{0x57e4f33c, 0x0a3b5896, 0x89c2399c, 0x898846dd, 0x5deef56a,
0xbc077230, 0xe8b3c725, 0x9021a7e0}}},
{{{0xee1140a9, 0x837d3e31, 0x8e25c6ad, 0xba6bf0da, 0x1f3deaa2,
0x5d0a88db, 0x1bb6f705, 0x79516936}}}}}};
EXPECT_FALSE(PrivKeyIsInGroup(&input, &pubkey, &pairing_state));
}
} // namespace
#endif // SHARED