@@ -45,7 +45,8 @@ import qualified Cryptol.TypeCheck.Subst as C (Subst, apSubst, listSubst, single
45
45
import qualified Cryptol.ModuleSystem.Name as C
46
46
(asPrim , nameUnique , nameIdent , nameInfo , NameInfo (.. ))
47
47
import qualified Cryptol.Utils.Ident as C
48
- ( Ident , PrimIdent (.. ), mkIdent , prelPrim , floatPrim , arrayPrim
48
+ ( Ident , PrimIdent (.. ), mkIdent
49
+ , prelPrim , floatPrim , arrayPrim , suiteBPrim , primeECPrim
49
50
, ModName , modNameToText , identText , interactiveName
50
51
, ModPath (.. ), modPathSplit
51
52
)
@@ -654,7 +655,7 @@ proveProp sc env prop =
654
655
655
656
importPrimitive :: SharedContext -> Env -> C. Name -> C. Schema -> IO Term
656
657
importPrimitive sc env n sch
657
- | Just nm <- C. asPrim n, Just term <- Map. lookup nm (prelPrims <> arrayPrims <> floatPrims) = term sc
658
+ | Just nm <- C. asPrim n, Just term <- Map. lookup nm allPrims = term sc
658
659
| Just nm <- C. asPrim n, Just expr <- Map. lookup nm (envRefPrims env) =
659
660
do t <- importSchema sc env sch
660
661
e <- importExpr sc env expr
@@ -663,6 +664,9 @@ importPrimitive sc env n sch
663
664
| Just nm <- C. asPrim n = panic " Unknown Cryptol primitive name" [show nm]
664
665
| otherwise = panic " Improper Cryptol primitive name" [show n]
665
666
667
+ allPrims :: Map C. PrimIdent (SharedContext -> IO Term )
668
+ allPrims = prelPrims <> arrayPrims <> floatPrims <> suiteBPrims <> primeECPrims
669
+
666
670
prelPrims :: Map C. PrimIdent (SharedContext -> IO Term )
667
671
prelPrims =
668
672
Map. fromList $
@@ -817,6 +821,31 @@ floatPrims =
817
821
, (" fpSqrt" , flip scGlobalDef " Cryptol.fpSqrt" )
818
822
]
819
823
824
+ suiteBPrims :: Map C. PrimIdent (SharedContext -> IO Term )
825
+ suiteBPrims =
826
+ Map. fromList $
827
+ first C. suiteBPrim <$>
828
+ [ (" AESEncRound" , flip scGlobalDef " Cryptol.AESEncRound" )
829
+ , (" AESEncFinalRound" , flip scGlobalDef " Cryptol.AESEncFinalRound" )
830
+ , (" AESDecRound" , flip scGlobalDef " Cryptol.AESDecRound" )
831
+ , (" AESDecFinalRound" , flip scGlobalDef " Cryptol.AESDecFinalRound" )
832
+ , (" AESInvMixColumns" , flip scGlobalDef " Cryptol.AESInvMixColumns" )
833
+ , (" AESKeyExpand" , flip scGlobalDef " Cryptol.AESKeyExpand" )
834
+ , (" processSHA2_224" , flip scGlobalDef " Cryptol.processSHA2_224" )
835
+ , (" processSHA2_256" , flip scGlobalDef " Cryptol.processSHA2_256" )
836
+ , (" processSHA2_384" , flip scGlobalDef " Cryptol.processSHA2_384" )
837
+ , (" processSHA2_512" , flip scGlobalDef " Cryptol.processSHA2_512" )
838
+ ]
839
+
840
+ primeECPrims :: Map C. PrimIdent (SharedContext -> IO Term )
841
+ primeECPrims =
842
+ Map. fromList $
843
+ first C. primeECPrim <$>
844
+ [ (" ec_double" , flip scGlobalDef " Cryptol.ec_double" )
845
+ , (" ec_add_nonzero" , flip scGlobalDef " Cryptol.ec_add_nonzero" )
846
+ , (" ec_mult" , flip scGlobalDef " Cryptol.ec_mult" )
847
+ , (" ec_twin_mult" , flip scGlobalDef " Cryptol.ec_twin_mult" )
848
+ ]
820
849
821
850
-- | Convert a Cryptol expression to a SAW-Core term. Calling
822
851
-- 'scTypeOf' on the result of @'importExpr' sc env expr@ must yield a
0 commit comments