mirror of
https://github.com/GaloisInc/cryptol.git
synced 2025-01-04 22:03:11 +03:00
properties and cleanup for new contrib examples
This commit is contained in:
parent
d7e9b9b3c6
commit
22df9717cb
4
Makefile
4
Makefile
@ -87,7 +87,7 @@ ${CS_BIN}/cryptolnb: ${CS_BIN}/alex ${CS_BIN}/happy | ${CS}
|
||||
${PKG}: ${CS_BIN}/cryptol
|
||||
mkdir -p ${PKG}/bin
|
||||
mkdir -p ${PKG}/lib
|
||||
mkdir -p ${PKG}/doc/examples
|
||||
mkdir -p ${PKG}/doc/examples/contrib
|
||||
cp ${CS_BIN}/cryptol ${PKG}/bin/cryptol
|
||||
cp -R docs/*.md ${PKG}/doc
|
||||
cp -R docs/*.pdf ${PKG}/doc
|
||||
@ -99,6 +99,8 @@ ${PKG}: ${CS_BIN}/cryptol
|
||||
cp examples/DEStest.cry ${PKG}/doc/examples
|
||||
cp examples/Test.cry ${PKG}/doc/examples
|
||||
cp examples/SHA1.cry ${PKG}/doc/examples
|
||||
cp examples/contrib/mkrand.cry ${PKG}/doc/examples/contrib
|
||||
cp examples/contrib/RC4.cry ${PKG}/doc/examples/contrib
|
||||
cp examples/contrib/simon.cry ${PKG}/doc/examples/contrib
|
||||
cp examples/contrib/speck.cry ${PKG}/doc/examples/contrib
|
||||
cp LICENSE ${PKG}/doc
|
||||
|
@ -33,6 +33,6 @@ ks key = [ k | (_,_,k) <- drop`{1} go ] where
|
||||
///////
|
||||
// "Test vectors" from wikipedia
|
||||
|
||||
test1 = take (ks "Key") == [0xEB,0x9F,0x77,0x81,0xB7,0x34,0xCA,0x72,0xA7,0x19]
|
||||
test2 = take (ks "Wiki") == [0x60,0x44,0xDB,0x6D,0x41,0xB7]
|
||||
test3 = take (ks "Secret") == [0x04,0xD4,0x6B,0x05,0x3C,0xA8,0x7B,0x59]
|
||||
property test1 = take (ks "Key") == [0xEB,0x9F,0x77,0x81,0xB7,0x34,0xCA,0x72,0xA7,0x19]
|
||||
property test2 = take (ks "Wiki") == [0x60,0x44,0xDB,0x6D,0x41,0xB7]
|
||||
property test3 = take (ks "Secret") == [0x04,0xD4,0x6B,0x05,0x3C,0xA8,0x7B,0x59]
|
||||
|
@ -1,28 +1,30 @@
|
||||
/*
|
||||
|
||||
|
||||
MKRAND - A Digital Random Bit Generator
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014, TAG Universal Machine.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
--
|
||||
|
||||
@ -36,13 +38,13 @@ MKRAND - A Digital Random Bit Generator
|
||||
|
||||
take `{100} (randBytes seed)
|
||||
|
||||
Here a string is encoded with seedUnit, using the deterministic random stream as a
|
||||
Here a string is encoded with seedUnit, using the deterministic random stream as a
|
||||
one-time pad against which to XOR the string:
|
||||
|
||||
|
||||
Encode:
|
||||
randXOR seedUnit "Deus Ex Machina"
|
||||
[0x28, 0x2b, 0x2c, 0xfa, 0x92, 0xca, 0xb3, 0xcb, 0xed, 0x50, 0xc2,v0x1b, 0x11, 0x0e, 0x70]
|
||||
|
||||
|
||||
Decode:
|
||||
:set ascii=on
|
||||
randXOR seedUnit [0x28, 0x2b, 0x2c, 0xfa, 0x92, 0xca, 0xb3, 0xcb, 0xed, 0x50, 0xc2,0x1b, 0x11, 0x0e, 0x70]
|
||||
@ -60,32 +62,32 @@ seedUnit:Seg
|
||||
seedUnit = (0 :[63]) # (1:[1]) # (0:[64])
|
||||
|
||||
|
||||
/*
|
||||
* Field - Unfold an application of Rule 30 to a seed
|
||||
*/
|
||||
/*
|
||||
* Field - Unfold an application of Rule 30 to a seed
|
||||
*/
|
||||
field: Seg -> [inf]Seg
|
||||
field s = new
|
||||
where
|
||||
where
|
||||
new = [s] # [ rule30 row | row <- new]
|
||||
rule30 r = [ a ^ (b || c) | a <- r >>> 1
|
||||
| b <- r
|
||||
rule30 r = [ a ^ (b || c) | a <- r >>> 1
|
||||
| b <- r
|
||||
| c <- r <<< 1
|
||||
]
|
||||
|
||||
|
||||
/* SHA30 - Use the input segment as the seed, generate two square fields,
|
||||
* keep the center column of the second.
|
||||
/* SHA30 - Use the input segment as the seed, generate two square fields,
|
||||
* keep the center column of the second.
|
||||
*/
|
||||
sha30: Seg -> Seg
|
||||
sha30 s = take`{0x80} (drop`{0x80} [ r @ ((((width r) / 2)-1):[8]) | r <- field s])
|
||||
|
||||
|
||||
/*
|
||||
* RAND - Seed XOR (SHA30 Seed)
|
||||
/*
|
||||
* RAND - Seed XOR (SHA30 Seed)
|
||||
*/
|
||||
rands : Seg -> [inf]Seg
|
||||
rands s = rest
|
||||
where
|
||||
where
|
||||
rand p = p ^ (sha30 p)
|
||||
rest = [rand s] # [rand x | x <- rest]
|
||||
|
||||
@ -96,7 +98,22 @@ randBytes s = groupBy`{8} (join (rands s))
|
||||
|
||||
|
||||
/* XOR a byte string into a random byte string, using the given seed */
|
||||
randXOR : {n} Seg -> String n -> String n
|
||||
randXOR : {n} Seg -> String n -> String n
|
||||
randXOR seed src = [s ^ r | s <- src
|
||||
| r <- randBytes seed
|
||||
]
|
||||
|
||||
/* OTP example */
|
||||
|
||||
property otp_encdec =
|
||||
randXOR seedUnit "Deus Ex Machina" == c
|
||||
&& randXOR seedUnit c == "Deus Ex Machina"
|
||||
where c = [ 0x28, 0x2b, 0x2c, 0xfa
|
||||
, 0x92, 0xca, 0xb3, 0xcb
|
||||
, 0xed, 0x50, 0xc2, 0x1b
|
||||
, 0x11, 0x0e, 0x70]
|
||||
|
||||
otp_involutive : {len} (fin len) => String len -> Bit
|
||||
otp_involutive msg = randXOR seedUnit (randXOR seedUnit msg) == msg
|
||||
|
||||
property otp_involutive_32 msg = otp_involutive (msg : String 32)
|
Loading…
Reference in New Issue
Block a user