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 : }