2 * Copyright (c) 2018, The OpenThread Authors.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * 3. Neither the name of the copyright holder nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
31 * This file implements a simple tool to compute pskc.
34 #include <mbedtls/sha256.h>
39 #include "common/code_utils.hpp"
40 #include "utils/hex.hpp"
41 #include "utils/steering_data.hpp"
45 printf("steering-data - compute steering data\n"
47 " steering-data [LENGTH] <JOINER_ID> ...\n"
49 " steering-data 18b4300000000001\n"
50 " steering-data 15 18b4300000000001\n"
51 " steering-data 18b4300000000001 18b4300000000002\n");
54 int ComputeJoinerId(const char *aEui64, uint8_t *aJoinerId)
58 VerifyOrExit(strlen(aEui64) == otbr::SteeringData::kSizeJoinerId * 2);
59 VerifyOrExit(otbr::Utils::Hex2Bytes(aEui64, aJoinerId, otbr::SteeringData::kSizeJoinerId) ==
60 otbr::SteeringData::kSizeJoinerId);
61 otbr::SteeringData::ComputeJoinerId(aJoinerId, aJoinerId);
67 fprintf(stderr, "Invalid EUI64: %s", aEui64);
73 int main(int argc, char *argv[])
75 otbr::SteeringData computer;
85 if (strlen(argv[i]) != otbr::SteeringData::kSizeJoinerId * 2)
87 length = atoi(argv[i]);
88 VerifyOrExit(length > 0 && length <= otbr::SteeringData::kMaxSizeOfBloomFilter,
89 fprintf(stderr, "Invalid bloom filter length: %d\n", length));
94 computer.Init(static_cast<uint8_t>(length));
98 uint8_t joinerId[otbr::SteeringData::kSizeJoinerId];
100 VerifyOrExit(ComputeJoinerId(argv[i], joinerId) == 0, fprintf(stderr, "Invalid EUI64 : %s\n", argv[i]));
101 computer.ComputeBloomFilter(joinerId);
104 for (i = 0; i < length; i++)
106 printf("%02x", computer.GetBloomFilter()[i]);