{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE TypeApplications #-}
-- |
-- Module       : Data.ByteString.Base64.Internal.Tables
-- Copyright    : (c) 2019-2020 Emily Pillmore
-- License      : BSD-style
--
-- Maintainer   : Emily Pillmore <emilypi@cohomolo.gy>
-- Stability    : Experimental
-- Portability  : portable
--
-- Shared internal tables
--
module Data.ByteString.Base64.Internal.Tables
( base64Table
, base64UrlTable
, decodeB64Table
, decodeB64UrlTable
) where


import Data.ByteString.Base64.Internal.Utils

import Foreign.ForeignPtr

import GHC.Word

-- | Base64url encoding table
--
base64UrlTable :: EncodingTable
base64UrlTable :: EncodingTable
base64UrlTable = Addr# -> EncodingTable
packTable Addr#
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"#
{-# NOINLINE base64UrlTable #-}

-- | Base64 std encoding table
--
base64Table :: EncodingTable
base64Table :: EncodingTable
base64Table = Addr# -> EncodingTable
packTable Addr#
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"#
{-# NOINLINE base64Table #-}

-- | Non-URLsafe b64 decoding table (naive)
--
decodeB64Table :: ForeignPtr Word8
decodeB64Table :: ForeignPtr Word8
decodeB64Table = Int -> [Word8] -> ForeignPtr Word8
forall a b. (Storable a, Storable b) => Int -> [a] -> ForeignPtr b
writeNPlainForeignPtrBytes @Word8 Int
256
      [ Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0x3e,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0x3f
      , Word8
0x34,Word8
0x35,Word8
0x36,Word8
0x37,Word8
0x38,Word8
0x39,Word8
0x3a,Word8
0x3b,Word8
0x3c,Word8
0x3d,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0x63,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0x00,Word8
0x01,Word8
0x02,Word8
0x03,Word8
0x04,Word8
0x05,Word8
0x06,Word8
0x07,Word8
0x08,Word8
0x09,Word8
0x0a,Word8
0x0b,Word8
0x0c,Word8
0x0d,Word8
0x0e
      , Word8
0x0f,Word8
0x10,Word8
0x11,Word8
0x12,Word8
0x13,Word8
0x14,Word8
0x15,Word8
0x16,Word8
0x17,Word8
0x18,Word8
0x19,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0x1a,Word8
0x1b,Word8
0x1c,Word8
0x1d,Word8
0x1e,Word8
0x1f,Word8
0x20,Word8
0x21,Word8
0x22,Word8
0x23,Word8
0x24,Word8
0x25,Word8
0x26,Word8
0x27,Word8
0x28
      , Word8
0x29,Word8
0x2a,Word8
0x2b,Word8
0x2c,Word8
0x2d,Word8
0x2e,Word8
0x2f,Word8
0x30,Word8
0x31,Word8
0x32,Word8
0x33,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      ]
{-# NOINLINE decodeB64Table #-}

-- | URLsafe b64 decoding table (naive)
--
decodeB64UrlTable :: ForeignPtr Word8
decodeB64UrlTable :: ForeignPtr Word8
decodeB64UrlTable = Int -> [Word8] -> ForeignPtr Word8
forall a b. (Storable a, Storable b) => Int -> [a] -> ForeignPtr b
writeNPlainForeignPtrBytes @Word8 Int
256
      [ Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0x3e,Word8
0xff,Word8
0xff
      , Word8
0x34,Word8
0x35,Word8
0x36,Word8
0x37,Word8
0x38,Word8
0x39,Word8
0x3a,Word8
0x3b,Word8
0x3c,Word8
0x3d,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0x63,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0x00,Word8
0x01,Word8
0x02,Word8
0x03,Word8
0x04,Word8
0x05,Word8
0x06,Word8
0x07,Word8
0x08,Word8
0x09,Word8
0x0a,Word8
0x0b,Word8
0x0c,Word8
0x0d,Word8
0x0e
      , Word8
0x0f,Word8
0x10,Word8
0x11,Word8
0x12,Word8
0x13,Word8
0x14,Word8
0x15,Word8
0x16,Word8
0x17,Word8
0x18,Word8
0x19,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0x3f
      , Word8
0xff,Word8
0x1a,Word8
0x1b,Word8
0x1c,Word8
0x1d,Word8
0x1e,Word8
0x1f,Word8
0x20,Word8
0x21,Word8
0x22,Word8
0x23,Word8
0x24,Word8
0x25,Word8
0x26,Word8
0x27,Word8
0x28
      , Word8
0x29,Word8
0x2a,Word8
0x2b,Word8
0x2c,Word8
0x2d,Word8
0x2e,Word8
0x2f,Word8
0x30,Word8
0x31,Word8
0x32,Word8
0x33,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      , Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff,Word8
0xff
      ]
{-# NOINLINE decodeB64UrlTable #-}