diff options
author | Sebastian <sebasjm@gmail.com> | 2023-03-12 23:56:54 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-03-12 23:56:54 -0300 |
commit | b874f9a0c50084803de58febb698864aa8dd061a (patch) | |
tree | 50f23d8faa674a94646a21c5821fd4f494c60f64 /packages/merchant-backoffice-ui/src/utils/crypto.ts | |
parent | ae1aee13581469a8398321b57e95cc85f210047b (diff) | |
download | wallet-core-b874f9a0c50084803de58febb698864aa8dd061a.tar.xz |
print and setup totp
Diffstat (limited to 'packages/merchant-backoffice-ui/src/utils/crypto.ts')
-rw-r--r-- | packages/merchant-backoffice-ui/src/utils/crypto.ts | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/merchant-backoffice-ui/src/utils/crypto.ts b/packages/merchant-backoffice-ui/src/utils/crypto.ts new file mode 100644 index 000000000..7bab8abf1 --- /dev/null +++ b/packages/merchant-backoffice-ui/src/utils/crypto.ts @@ -0,0 +1,53 @@ +/* + This file is part of GNU Taler + (C) 2021-2023 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +/** + * + * @author Sebastian Javier Marchano (sebasjm) + */ + +const encTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; +// base32 RFC 3548 +function encodeBase32(data: ArrayBuffer) { + const dataBytes = new Uint8Array(data); + let sb = ""; + const size = data.byteLength; + let bitBuf = 0; + let numBits = 0; + let pos = 0; + while (pos < size || numBits > 0) { + if (pos < size && numBits < 5) { + const d = dataBytes[pos++]; + bitBuf = (bitBuf << 8) | d; + numBits += 8; + } + if (numBits < 5) { + // zero-padding + bitBuf = bitBuf << (5 - numBits); + numBits = 5; + } + const v = (bitBuf >>> (numBits - 5)) & 31; + sb += encTable[v]; + numBits -= 5; + } + return sb; +} + +export function randomBase32Key(): string { + var buf = new Uint8Array(20); + window.crypto.getRandomValues(buf); + return encodeBase32(buf); +} |