-- |
-- Module      : Data.X509.OID
-- License     : BSD-style
-- Maintainer  : Vincent Hanquez <vincent@snarc.org>
-- Stability   : experimental
-- Portability : unknown
--
module Data.X509.OID
    ( OIDTable
    , lookupByOID
    , lookupOID
    , curvesOIDTable
    ) where

import Control.Applicative
import Crypto.PubKey.ECC.Types
import Data.ASN1.OID
import Data.List (find)

type OIDTable a = [(a,OID)]

lookupByOID :: OIDTable a -> OID -> Maybe a
lookupByOID :: forall a. OIDTable a -> OID -> Maybe a
lookupByOID OIDTable a
table OID
oid = forall a b. (a, b) -> a
fst forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find (forall a. Eq a => a -> a -> Bool
(==) OID
oid forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) OIDTable a
table

lookupOID :: Eq a => OIDTable a -> a -> Maybe OID
lookupOID :: forall a. Eq a => OIDTable a -> a -> Maybe OID
lookupOID OIDTable a
table a
a = forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup a
a OIDTable a
table

curvesOIDTable :: OIDTable CurveName
curvesOIDTable :: OIDTable CurveName
curvesOIDTable =
    [ (CurveName
SEC_p112r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
6])
    , (CurveName
SEC_p112r2, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
7])
    , (CurveName
SEC_p128r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
28])
    , (CurveName
SEC_p128r2, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
29])
    , (CurveName
SEC_p160k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
9])
    , (CurveName
SEC_p160r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
8])
    , (CurveName
SEC_p160r2, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
30])
    , (CurveName
SEC_p192k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
31])
    , (CurveName
SEC_p192r1, [Integer
1,Integer
2,Integer
840,Integer
10045,Integer
3,Integer
1,Integer
1])
    , (CurveName
SEC_p224k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
32])
    , (CurveName
SEC_p224r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
33])
    , (CurveName
SEC_p256k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
10])
    , (CurveName
SEC_p256r1, [Integer
1,Integer
2,Integer
840,Integer
10045,Integer
3,Integer
1,Integer
7])
    , (CurveName
SEC_p384r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
34])
    , (CurveName
SEC_p521r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
35])
    , (CurveName
SEC_t113r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
4])
    , (CurveName
SEC_t113r2, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
5])
    , (CurveName
SEC_t131r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
22])
    , (CurveName
SEC_t131r2, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
23])
    , (CurveName
SEC_t163k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
1])
    , (CurveName
SEC_t163r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
2])
    , (CurveName
SEC_t163r2, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
15])
    , (CurveName
SEC_t193r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
24])
    , (CurveName
SEC_t193r2, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
25])
    , (CurveName
SEC_t233k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
26])
    , (CurveName
SEC_t233r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
27])
    , (CurveName
SEC_t239k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
3])
    , (CurveName
SEC_t283k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
16])
    , (CurveName
SEC_t283r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
17])
    , (CurveName
SEC_t409k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
36])
    , (CurveName
SEC_t409r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
37])
    , (CurveName
SEC_t571k1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
38])
    , (CurveName
SEC_t571r1, [Integer
1,Integer
3,Integer
132,Integer
0,Integer
39])
    ]