summaryrefslogtreecommitdiff
path: root/tests/test-cv25519.hs
blob: faf257389d63c06e2a65b6f6ff7a1dc3a09e0c03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE OverloadedStrings #-}

import Control.Arrow
import Control.Monad
import Data.Binary
import Data.Binary.Get
import Data.ByteString (ByteString)
import Data.Bits
import qualified Data.ByteArray as BA
import qualified Data.ByteString.Char8 as B8
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import Data.Char
import Text.Show.Pretty
import Numeric
import Data.Int

import Data.OpenPGP.Internal
import Data.OpenPGP.Util
import Data.OpenPGP.Util.Base
import Data.OpenPGP as OpenPGP
import Crypto.Cipher.SBox
import Data.OpenPGP.Util.Ed25519 (zeroExtend,zeroPad)
import qualified Crypto.PubKey.Curve25519 as Cv25519
import Crypto.Error
import Crypto.Cipher.AES
import Crypto.Cipher.Types
import Data.OpenPGP.Util.DecryptSecretKey -- (withS2K, simpleUnCFB, Enciphered(..))

import Data.OpenPGP.Util.Cv25519

msg :: ByteString
msg = [bytes|
 84 5e 03 c2 69 bf c6 b5 ad 64 55 12 01 07 40 ed
 3a 49 32 b5 2b 4e f5 c8 b1 3d 25 8c 73 c6 bc f3
 16 c2 4d ed 23 3c ef ac 01 df ff ea 8a 38 75 30
 ab 5e d2 7b eb 5c 1f 7d 65 9d 7b 84 b4 5e fb b9
 43 81 29 d4 e9 ba 0d 08 34 be 95 40 9d 57 0c 85
 0d 94 4c fe 42 21 a0 23 d9 70 3d a2 03 ec 0a d1

 d2 70 01 95 06 62 3d 1b 66 ba 5b 67 b8 a7 2a b7
 86 0b 28 94 18 c5 3b ef fc 2f e2 5d 87 78 80 9e
 89 dc c7 e7 87 14 b8 bc 8c 9f 93 2f bb 2b c3 7c
 3c da c5 32 32 bf 58 3f fa 7f 1c 53 b7 14 63 b7
 1c 2e d6 29 c8 8e 15 a8 48 6d 97 a9 35 49 21 c7
 73 20 b4 00 4e db 80 04 30 4a df 59 77 79 22 aa
 0c 7c 08 a1 d0 d6 a7 30 9d e9 59 8d 2d 9f e8 c4
 0c 2b
 |]

keyring :: ByteString
keyring =
 [bytes|
 94 58 04 5d c8 7f 7e 16 09 2b 06 01 04 01 da 47
 0f 01 01 07 40 bb a7 dc 2a e0 b0 ef 05 d1 69 07
 31 b3 91 0d c9 69 38 6f 3f 97 e6 19 45 cb 6c 76
 3b 15 29 f5 e5 00 01 00 96 eb 2a 5c d5 5b 65 25
 e9 dd ed b8 58 1c e9 1e 75 f2 26 92 9d 9f 35 d7
 35 a7 65 e5 41 44 f5 f5 11 a4 b4 18 47 75 79 20
 54 2e 20 3c 67 75 79 40 65 78 61 6d 70 6c 65 2e
 63 6f 6d 3e 88 90 04 13 16 08 00 38 16 21 04 00
 7d a7 19 91 02 5a 09 bd da 46 78 38 ed ab 61 d8
 66 c7 02 05 02 5d c8 7f 7e 02 1b 03 05 0b 09 08
 07 02 06 15 0a 09 08 0b 02 04 16 02 03 01 02 1e
 01 02 17 80 00 0a 09 10 38 ed ab 61 d8 66 c7 02
 3e d4 00 ff 7a 88 a3 af cd 96 bd 46 b4 31 76 3c
 40 35 1c ef 0b 0b 1d e2 66 03 7e 22 4c 32 34 f7
 db dd 20 98 00 ff 55 20 65 55 ed 70 a4 a0 03 58
 c3 1c 0a 12 63 b5 5c 3f f8 18 de 62 c8 0b e7 85
 37 ee 8c 7a 2a 0d 9c 5d 04 5d c8 7f 7e 12 0a 2b
 06 01 04 01 97 55 01 05 01 01 07 40 71 8a c9 e8
 0d cf 0d d0 16 10 c2 26 50 f1 f4 1c 49 b4 af 4d
 aa 0e 06 2b 35 8c 1e 86 79 8c 25 31 03 01 08 07
 00 00 ff 68 a2 f7 b1 31 2c 6a 09 82 f2 55 a2 44
 cb d4 a1 0d 62 ef f0 77 18 68 d9 6c 86 c1 b2 c7
 e1 4d 40 12 28 88 78 04 18 16 08 00 20 16 21 04
 00 7d a7 19 91 02 5a 09 bd da 46 78 38 ed ab 61
 d8 66 c7 02 05 02 5d c8 7f 7e 02 1b 0c 00 0a 09
 10 38 ed ab 61 d8 66 c7 02 86 10 01 00 83 99 5d
 74 90 f5 4a b5 74 bc 07 77 7a f7 25 14 3e 5e bf
 ae 52 99 0c 01 05 0b 4b 57 ee 95 02 1b 01 00 eb
 db e4 27 95 f9 a4 4f bc f0 ce cc 44 33 90 ab 42
 0f aa ca 06 89 ce 48 f1 85 27 62 05 73 e3 03
 |]


expected_result = CompressedDataPacket
    { compression_algorithm = ZLIB
    , message = Message [ LiteralDataPacket
                           { format = 'b'
                           , filename = "secret-message.txt"
                           , timestamp = 1573421489
                           , content = "This is a secret that will be encrypted.\n"}
                        ]
    }

main = do
    let Message [asym,encdta] = decode (BL.fromStrict msg)
        Message
            [ master  -- ---Secret 007DA71991025A09BDDA467838EDAB61D866C702 Ed25519
            , uid     -- UserID "Guy T. <guy@example.com>"
            , uidsig  -- Signature ^ signed: 38EDAB61D866C702 ["vouch-sign"]
            , ecdhkey -- SecretKey 8CF3B7D9CDCA47086F3C509AC269BFC6B5AD6455 ECC
            , ecdhsig -- Signature ^ signed: 38EDAB61D866C702 ["encrypt"]
            ] = decode (BL.fromStrict keyring)
        m = decryptMessage ecdhkey asym encdta
    print m
    putStrLn $ "decrypt cv25519: " ++ show (m == Just [expected_result])