Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Przemyslaw Kaminski
haskell-gargantext
Commits
b5738963
Commit
b5738963
authored
Jan 05, 2021
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Prelude.Crypto.Share] WIP / Clean
parent
2c43e4a1
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
82 additions
and
49 deletions
+82
-49
Types.hs
src/Gargantext/Core/Types.hs
+1
-49
Share.hs
src/Gargantext/Prelude/Crypto/Share.hs
+81
-0
No files found.
src/Gargantext/Core/Types.hs
View file @
b5738963
...
...
@@ -22,7 +22,7 @@ module Gargantext.Core.Types ( module Gargantext.Core.Types.Main
,
HasInvalidError
(
..
),
assertValid
,
Name
,
TableResult
(
..
),
NodeTableResult
,
Ordering
(
..
)
,
randomOrdering
,
randomBool
,
genWith
,
Ordering
(
..
)
,
TODO
(
..
)
)
where
...
...
@@ -40,8 +40,6 @@ import Data.Text (Text, unpack)
import
Data.Validity
import
GHC.Generics
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
import
System.Random
import
Prelude
(
fromEnum
,
toEnum
)
import
Gargantext.Core.Types.Main
import
Gargantext.Database.Admin.Types.Node
import
Gargantext.Core.Utils.Prefix
(
unPrefix
,
wellNamedSchema
)
...
...
@@ -51,52 +49,6 @@ import Gargantext.Prelude
data
Ordering
=
Down
|
Up
deriving
(
Enum
,
Show
,
Eq
,
Bounded
)
------------------------------------------------------------------------
-- Random work (WIP)
-- TODO mv in Prelude.Random
instance
Random
Ordering
where
randomR
(
a
,
b
)
g
=
case
randomR
(
fromEnum
a
,
fromEnum
b
)
g
of
(
x
,
g'
)
->
(
toEnum
x
,
g'
)
random
g
=
randomR
(
minBound
,
maxBound
)
g
type
Seed
=
Int
{- | Crypto work
TODO XOR to share secret
-}
randomOrdering
::
Maybe
Seed
->
Int
->
IO
[
Ordering
]
randomOrdering
=
randomWith
randomBool
::
Maybe
Seed
->
Int
->
IO
[
Bool
]
randomBool
=
randomWith
randomWith
::
Random
a
=>
Maybe
Seed
->
Int
->
IO
[
a
]
randomWith
seed
n
=
do
g
<-
case
seed
of
Nothing
->
newStdGen
Just
s
->
pure
$
mkStdGen
s
pure
$
take
n
$
(
randoms
g
)
newtype
PrivateSeed
=
PrivateSeed
Int
newtype
PublicSeed
=
PublicSeed
Int
genWith
::
PrivateSeed
->
PublicSeed
->
Int
->
IO
[
Bool
]
genWith
(
PrivateSeed
x
)
(
PublicSeed
o
)
n
=
do
xs
<-
randomBool
(
Just
x
)
n
ys
<-
randomBool
(
Just
o
)
n
pure
$
zipWith
xor
xs
ys
{-
searchSeeds :: Int -> IO [Int]
searchSeeds xs = mapM (\n -> randomWith (Just n) l) [1..]
where
l = length xs
-}
------------------------------------------------------------------------
type
Name
=
Text
type
Term
=
Text
...
...
src/Gargantext/Prelude/Crypto/Share.hs
0 → 100644
View file @
b5738963
{-|
Module : Gargantext.Prelude.Crypto.Share
Description :
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
# Random work/research (WIP)
Goal: share secretly a sequence of random actions (either [Bool] or
[Ordering] for instances here) but without sharing secrets.
Motivation: useful to share clustering algorithm reproduction using BAC
(Ballades Aléatoires Courtes).
Question: how to certify the author of such (random) actions ? Solution
later ;)
-}
------------------------------------------------------------------------
{-# OPTIONS_GHC -fno-warn-orphans #-}
------------------------------------------------------------------------
module
Gargantext.Prelude.Crypto.Share
where
import
Data.Maybe
import
System.Random
import
Prelude
(
fromEnum
,
toEnum
)
import
Gargantext.Core.Types
(
Ordering
)
import
Gargantext.Prelude
------------------------------------------------------------------------
-- | Main Types
newtype
Seed
=
Seed
Int
type
Private
=
Seed
type
Public
=
Seed
------------------------------------------------------------------------
instance
Random
Ordering
where
randomR
(
a
,
b
)
g
=
case
randomR
(
fromEnum
a
,
fromEnum
b
)
g
of
(
x
,
g'
)
->
(
toEnum
x
,
g'
)
random
g
=
randomR
(
minBound
,
maxBound
)
g
randomOrdering
::
Maybe
Seed
->
Int
->
IO
[
Ordering
]
randomOrdering
=
randomWith
randomBool
::
Maybe
Seed
->
Int
->
IO
[
Bool
]
randomBool
=
randomWith
------------------------------------------------------------------
randomWith
::
Random
a
=>
Maybe
Seed
->
Int
->
IO
[
a
]
randomWith
seed
n
=
do
g
<-
case
seed
of
Nothing
->
newStdGen
Just
(
Seed
s
)
->
pure
$
mkStdGen
s
pure
$
take
n
$
(
randoms
g
)
genWith
::
Private
->
Public
->
Int
->
IO
[
Bool
]
genWith
privateSeed
publicSeed
n
=
do
xs
<-
randomBool
(
Just
privateSeed
)
n
ys
<-
randomBool
(
Just
publicSeed
)
n
pure
$
zipWith
xor
xs
ys
{-
- TODO WIP
searchSeeds :: Int -> IO [Int]
searchSeeds xs = mapM (\n -> randomWith (Just n) l) [1..]
where
l = length xs
shareSeed = undefined
certifySeed = undefined
-}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment