Target generation, ideally, to those files we'll need for doing crypto.

This commit is contained in:
2020-04-12 19:51:29 -07:00
parent f93aa7ffc3
commit 2baa5f070d
20 changed files with 57 additions and 38 deletions

View File

@@ -10,7 +10,6 @@ module Add(
import Data.Bits((.&.))
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import Gen(toLit)
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
@@ -22,6 +21,7 @@ import System.Random(RandomGen)
safeAddOps :: RustModule
safeAddOps = RustModule {
predicate = \ me others -> (me + 64) `elem` others,
suggested = \ me -> [me + 64],
outputName = "safe_add",
isUnsigned = True,
generator = declareSafeAddOperators,
@@ -31,6 +31,7 @@ safeAddOps = RustModule {
unsafeAddOps :: RustModule
unsafeAddOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "unsafe_add",
isUnsigned = True,
generator = declareUnsafeAddOperators,
@@ -40,6 +41,7 @@ unsafeAddOps = RustModule {
safeSignedAddOps :: RustModule
safeSignedAddOps = RustModule {
predicate = \ me others -> (me + 64) `elem` others,
suggested = \ me -> [me + 64],
outputName = "safe_sadd",
isUnsigned = False,
generator = declareSafeSignedAddOperators,
@@ -49,6 +51,7 @@ safeSignedAddOps = RustModule {
unsafeSignedAddOps :: RustModule
unsafeSignedAddOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "unsafe_sadd",
isUnsigned = False,
generator = declareUnsafeSignedAddOperators,

View File

@@ -13,6 +13,7 @@ import RustModule
base :: RustModule
base = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "base",
isUnsigned = True,
generator = declareBaseStructure,

View File

@@ -7,7 +7,6 @@ module BinaryOps(
import Data.Bits(xor,(.&.),(.|.))
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import Gen(toLit)
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
@@ -19,6 +18,7 @@ import System.Random(RandomGen)
binaryOps :: RustModule
binaryOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "binary",
isUnsigned = True,
generator = declareBinaryOperators,

View File

@@ -15,6 +15,7 @@ import System.Random(RandomGen)
comparisons :: RustModule
comparisons = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "compare",
isUnsigned = True,
generator = declareComparators,
@@ -24,6 +25,7 @@ comparisons = RustModule {
signedComparisons :: RustModule
signedComparisons = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "scompare",
isUnsigned = False,
generator = declareSignedComparators,

View File

@@ -5,7 +5,7 @@ module Conversions(
)
where
import Gen(toLit)
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
import Language.Rust.Quote
@@ -15,6 +15,7 @@ import RustModule
conversions :: RustModule
conversions = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "conversions",
isUnsigned = True,
generator = declareConversions,
@@ -24,6 +25,7 @@ conversions = RustModule {
signedConversions :: RustModule
signedConversions = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "sconversions",
isUnsigned = False,
generator = declareSignedConversions,

View File

@@ -7,7 +7,6 @@ module CryptoNum(
import Data.Bits(testBit)
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import Gen
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
@@ -19,6 +18,7 @@ import System.Random(RandomGen)
cryptoNum :: RustModule
cryptoNum = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "cryptonum",
isUnsigned = True,
generator = declareCryptoNumInstance,

View File

@@ -4,7 +4,6 @@ module Division(divisionOps)
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import Gen(toLit)
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
@@ -16,6 +15,7 @@ import System.Random(RandomGen)
divisionOps :: RustModule
divisionOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "divmod",
isUnsigned = True,
generator = declareDivision,

View File

@@ -1,13 +0,0 @@
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Gen(
toLit
)
where
import Language.Rust.Data.Position
import Language.Rust.Syntax
toLit :: Word -> Expr Span
toLit i = Lit [] (Int Dec (fromIntegral i) Unsuffixed mempty) mempty

View File

@@ -1,9 +1,14 @@
module Generators
where
import Language.Rust.Data.Position
import Language.Rust.Syntax
import Numeric(showHex)
import System.Random(RandomGen,random,randomR)
toLit :: Word -> Expr Span
toLit i = Lit [] (Int Dec (fromIntegral i) Unsuffixed mempty) mempty
generateNum :: RandomGen g => g -> Word -> (Integer, g)
generateNum g size =
let (x, g') = random g

View File

@@ -20,6 +20,7 @@ import System.Random(RandomGen)
generateModInvOps :: RustModule
generateModInvOps = RustModule {
predicate = \ me others -> (me + 64) `elem` others,
suggested = \ me -> [me + 64],
outputName = "modinv",
isUnsigned = True,
generator = declareModInv,

View File

@@ -16,6 +16,7 @@ import System.Random(RandomGen)
modulusOps :: RustModule
modulusOps = RustModule {
predicate = \ me others -> (me * 2) `elem` others,
suggested = \ me -> [me * 2],
outputName = "modops",
isUnsigned = True,
generator = declareModOps,

View File

@@ -1,9 +1,8 @@
{-# LANGUAGE QuasiQuotes #-}
module Multiply
-- (
-- safeMultiplyOps
-- , unsafeMultiplyOps
-- )
module Multiply(
safeMultiplyOps
, unsafeMultiplyOps
)
where
import Data.Bits((.&.))
@@ -11,7 +10,6 @@ import Data.List(foldl')
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import qualified Data.Set as Set
import Gen(toLit)
import Generators
import Karatsuba
import Language.Rust.Data.Ident
@@ -24,19 +22,21 @@ import System.Random(RandomGen)
safeMultiplyOps :: RustModule
safeMultiplyOps = RustModule {
predicate = \ me others -> (me * 2) `elem` others,
suggested = \ me -> [me * 2],
outputName = "safe_mul",
isUnsigned = True,
generator = declareSafeMulOperators,
testCase = Nothing -- Just generateSafeTest
testCase = Just generateSafeTest
}
unsafeMultiplyOps :: RustModule
unsafeMultiplyOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "unsafe_mul",
isUnsigned = True,
generator = declareUnsafeMulOperators,
testCase = Nothing -- Just generateUnsafeTest
testCase = Just generateUnsafeTest
}
declareSafeMulOperators :: Word -> [Word] -> SourceFile Span

View File

@@ -38,6 +38,7 @@ targetTestGenerationPicos =
data RustModule = RustModule {
predicate :: Word -> [Word] -> Bool,
suggested :: Word -> [Word],
outputName :: String,
isUnsigned :: Bool,
generator :: Word -> [Word] -> SourceFile Span,

View File

@@ -8,7 +8,6 @@ module Scale(
import Data.Bits((.&.))
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import Gen(toLit)
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
@@ -20,6 +19,7 @@ import System.Random(RandomGen)
safeScaleOps :: RustModule
safeScaleOps = RustModule {
predicate = \ me others -> (me + 64) `elem` others,
suggested = \ me -> [me + 64],
outputName = "safe_scale",
isUnsigned = True,
generator = declareSafeScaleOperators,
@@ -29,6 +29,7 @@ safeScaleOps = RustModule {
unsafeScaleOps :: RustModule
unsafeScaleOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "unsafe_scale",
isUnsigned = True,
generator = declareUnsafeScaleOperators,

View File

@@ -5,7 +5,6 @@ module Shift(shiftOps, signedShiftOps)
import Data.Bits(shiftL,shiftR)
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import Gen(toLit)
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
@@ -17,6 +16,7 @@ import System.Random(RandomGen)
shiftOps :: RustModule
shiftOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "shift",
isUnsigned = True,
generator = declareShiftOperators,
@@ -26,6 +26,7 @@ shiftOps = RustModule {
signedShiftOps :: RustModule
signedShiftOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "sshift",
isUnsigned = False,
generator = declareSignedShiftOperators,

View File

@@ -11,6 +11,7 @@ import RustModule
signedBaseOps :: RustModule
signedBaseOps = RustModule {
predicate = const (const True),
suggested = const [],
outputName = "base",
isUnsigned = False,
generator = declareSigned,

View File

@@ -10,7 +10,6 @@ module Subtract(
import Data.Bits((.&.))
import Data.Map.Strict(Map)
import qualified Data.Map.Strict as Map
import Gen(toLit)
import Generators
import Language.Rust.Data.Ident
import Language.Rust.Data.Position
@@ -22,6 +21,7 @@ import System.Random(RandomGen)
safeSubtractOps :: RustModule
safeSubtractOps = RustModule {
predicate = \ me others -> (me + 64) `elem` others,
suggested = \ me -> [me + 64],
outputName = "safe_sub",
isUnsigned = True,
generator = declareSafeSubtractOperators,
@@ -31,6 +31,7 @@ safeSubtractOps = RustModule {
safeSignedSubtractOps :: RustModule
safeSignedSubtractOps = RustModule {
predicate = \ me others -> (me + 64) `elem` others,
suggested = \ me -> [me + 64],
outputName = "safe_ssub",
isUnsigned = False,
generator = declareSafeSignedSubtractOperators,
@@ -40,6 +41,7 @@ safeSignedSubtractOps = RustModule {
unsafeSubtractOps :: RustModule
unsafeSubtractOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "unsafe_sub",
isUnsigned = True,
generator = declareUnsafeSubtractOperators,
@@ -49,6 +51,7 @@ unsafeSubtractOps = RustModule {
unsafeSignedSubtractOps :: RustModule
unsafeSignedSubtractOps = RustModule {
predicate = \ _ _ -> True,
suggested = const [],
outputName = "unsafe_ssub",
isUnsigned = False,
generator = declareUnsafeSignedSubtractOperators,