Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2020 Project CHIP Authors
4 : * Copyright (c) 2013-2017 Nest Labs, Inc.
5 : *
6 : * Licensed under the Apache License, Version 2.0 (the "License");
7 : * you may not use this file except in compliance with the License.
8 : * You may obtain a copy of the License at
9 : *
10 : * http://www.apache.org/licenses/LICENSE-2.0
11 : *
12 : * Unless required by applicable law or agreed to in writing, software
13 : * distributed under the License is distributed on an "AS IS" BASIS,
14 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 : * See the License for the specific language governing permissions and
16 : * limitations under the License.
17 : */
18 : /**
19 : * @file
20 : * This file implements an object for the core Verhoeff
21 : * check-digit algorithm operations.
22 : *
23 : */
24 :
25 : #include "Verhoeff.h"
26 :
27 0 : int Verhoeff::DihedralMultiply(int x, int y, int n)
28 : {
29 0 : int n2 = n * 2;
30 :
31 0 : x = x % n2;
32 0 : y = y % n2;
33 :
34 0 : if (x < n)
35 : {
36 0 : if (y < n)
37 0 : return (x + y) % n;
38 :
39 0 : return ((x + (y - n)) % n) + n;
40 : }
41 :
42 0 : if (y < n)
43 0 : return ((n + (x - n) - y) % n) + n;
44 :
45 0 : return (n + (x - n) - (y - n)) % n;
46 : }
47 :
48 62 : int Verhoeff::DihedralInvert(int val, int n)
49 : {
50 62 : if (val > 0 && val < n)
51 23 : return n - val;
52 39 : return val;
53 : }
54 :
55 9047 : int Verhoeff::Permute(int val, const uint8_t * permTable, int permTableLen, uint64_t iterCount)
56 : {
57 9047 : val = val % permTableLen;
58 9047 : if (iterCount == 0)
59 908 : return val;
60 8139 : return Permute(permTable[val], permTable, permTableLen, iterCount - 1);
61 : }
|