Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 1 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
Davide Pesavento | 914d05f | 2019-07-13 16:20:19 -0400 | [diff] [blame] | 2 | /* |
Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 3 | * Copyright (c) 2017-2019, Regents of the University of California. |
| 4 | * |
| 5 | * This file is part of ndncert, a certificate management system based on NDN. |
| 6 | * |
| 7 | * ndncert is free software: you can redistribute it and/or modify it under the terms |
| 8 | * of the GNU General Public License as published by the Free Software Foundation, either |
| 9 | * version 3 of the License, or (at your option) any later version. |
| 10 | * |
| 11 | * ndncert is distributed in the hope that it will be useful, but WITHOUT ANY |
| 12 | * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A |
| 13 | * PARTICULAR PURPOSE. See the GNU General Public License for more details. |
| 14 | * |
| 15 | * You should have received copies of the GNU General Public License along with |
| 16 | * ndncert, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>. |
| 17 | * |
| 18 | * See AUTHORS.md for complete list of ndncert authors and contributors. |
| 19 | */ |
| 20 | |
| 21 | #include "crypto-support/crypto-helper.hpp" |
Davide Pesavento | 914d05f | 2019-07-13 16:20:19 -0400 | [diff] [blame] | 22 | |
Zhiyi Zhang | 42d992d | 2019-07-07 16:46:50 -0700 | [diff] [blame] | 23 | #include "identity-management-fixture.hpp" |
Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 24 | |
| 25 | namespace ndn { |
| 26 | namespace ndncert { |
| 27 | namespace tests { |
| 28 | |
| 29 | BOOST_AUTO_TEST_SUITE(TestCryptoHelper) |
| 30 | |
| 31 | BOOST_AUTO_TEST_CASE(Test0) |
| 32 | { |
| 33 | ECDHState aliceState; |
| 34 | auto alicePub = aliceState.getRawSelfPubKey(); |
| 35 | BOOST_CHECK(aliceState.context->publicKeyLen != 0); |
| 36 | |
| 37 | ECDHState bobState; |
| 38 | auto bobPub = bobState.getRawSelfPubKey(); |
| 39 | BOOST_CHECK(bobState.context->publicKeyLen != 0); |
| 40 | |
| 41 | auto aliceResult = aliceState.deriveSecret( |
| 42 | bobPub, bobState.context->publicKeyLen); |
| 43 | |
| 44 | BOOST_CHECK(aliceState.context->sharedSecretLen != 0); |
| 45 | |
| 46 | auto bobResult = bobState.deriveSecret( |
| 47 | alicePub, aliceState.context->publicKeyLen); |
| 48 | |
| 49 | BOOST_CHECK(bobState.context->sharedSecretLen != 0); |
| 50 | |
| 51 | BOOST_CHECK_EQUAL_COLLECTIONS(aliceResult, aliceResult + 32, |
| 52 | bobResult, bobResult + 32); |
| 53 | } |
| 54 | |
| 55 | BOOST_AUTO_TEST_CASE(Test1) |
| 56 | { |
| 57 | ECDHState aliceState; |
| 58 | auto alicePub = aliceState.getBase64PubKey(); |
| 59 | BOOST_CHECK(alicePub != ""); |
| 60 | |
| 61 | ECDHState bobState; |
| 62 | auto bobPub = bobState.getBase64PubKey(); |
| 63 | BOOST_CHECK(bobPub != ""); |
| 64 | |
| 65 | auto aliceResult = aliceState.deriveSecret(bobPub); |
| 66 | BOOST_CHECK(aliceState.context->sharedSecretLen != 0); |
| 67 | |
| 68 | auto bobResult = bobState.deriveSecret(alicePub); |
| 69 | BOOST_CHECK(bobState.context->sharedSecretLen != 0); |
| 70 | |
| 71 | BOOST_CHECK_EQUAL_COLLECTIONS(aliceResult, aliceResult + 32, |
| 72 | bobResult, bobResult + 32); |
| 73 | } |
| 74 | |
Davide Pesavento | 368341b | 2019-08-13 23:57:50 -0400 | [diff] [blame] | 75 | // Test case 2 from RFC 5869 |
Davide Pesavento | 914d05f | 2019-07-13 16:20:19 -0400 | [diff] [blame] | 76 | BOOST_AUTO_TEST_CASE(HkdfIetf2) |
Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 77 | { |
| 78 | uint8_t secret[] = {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, |
| 79 | 0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, |
| 80 | 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77, |
| 81 | 0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, |
| 82 | 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, |
| 83 | 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, |
| 84 | 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, |
| 85 | 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, |
| 86 | 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, |
| 87 | 0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf}; |
| 88 | |
| 89 | uint8_t salt[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, |
| 90 | 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, |
| 91 | 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, |
| 92 | 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, |
| 93 | 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, |
| 94 | 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, |
| 95 | 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, |
| 96 | 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, |
| 97 | 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, |
| 98 | 0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f}; |
| 99 | |
| 100 | uint8_t info[] = {0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7, |
| 101 | 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, |
| 102 | 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7, |
| 103 | 0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, |
| 104 | 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7, |
| 105 | 0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, |
| 106 | 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7, |
| 107 | 0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, |
| 108 | 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, |
| 109 | 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff}; |
| 110 | |
Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 111 | uint8_t expected[] = {0xb1,0x1e,0x39,0x8d,0xc8,0x03,0x27, |
| 112 | 0xa1,0xc8,0xe7,0xf7,0x8c,0x59,0x6a, |
| 113 | 0x49,0x34,0x4f,0x01,0x2e,0xda,0x2d, |
| 114 | 0x4e,0xfa,0xd8,0xa0,0x50,0xcc,0x4c, |
| 115 | 0x19,0xaf,0xa9,0x7c,0x59,0x04,0x5a, |
| 116 | 0x99,0xca,0xc7,0x82,0x72,0x71,0xcb, |
| 117 | 0x41,0xc6,0x5e,0x59,0x0e,0x09,0xda, |
| 118 | 0x32,0x75,0x60,0x0c,0x2f,0x09,0xb8, |
| 119 | 0x36,0x77,0x93,0xa9,0xac,0xa3,0xdb, |
| 120 | 0x71,0xcc,0x30,0xc5,0x81,0x79,0xec, |
| 121 | 0x3e,0x87,0xc1,0x4c,0x01,0xd5,0xc1, |
| 122 | 0xf3,0x43,0x4f,0x1d,0x87}; |
| 123 | |
Davide Pesavento | 368341b | 2019-08-13 23:57:50 -0400 | [diff] [blame] | 124 | uint8_t result[82]; |
Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 125 | auto resultLen = hkdf(secret, sizeof(secret), |
| 126 | salt,sizeof(salt), |
| 127 | result, sizeof(result), |
| 128 | info, sizeof(info)); |
| 129 | |
Davide Pesavento | 368341b | 2019-08-13 23:57:50 -0400 | [diff] [blame] | 130 | BOOST_CHECK_EQUAL(resultLen, 82); |
| 131 | BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), |
| 132 | expected, expected + sizeof(expected)); |
Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 133 | } |
| 134 | |
Zhiyi Zhang | af7c290 | 2019-03-14 22:13:21 -0700 | [diff] [blame] | 135 | BOOST_AUTO_TEST_SUITE_END() |
| 136 | |
| 137 | } // namespace tests |
| 138 | } // namespace ndncert |
| 139 | } // namespace ndn |