summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Paul Weber <singpolyma@singpolyma.net>2011-08-12 21:05:31 -0500
committerStephen Paul Weber <singpolyma@singpolyma.net>2011-08-12 21:05:31 -0500
commit078d62b646f3fcecf7918d051472c5905e2957f5 (patch)
tree435423b561db5f9fc560da0781a2964042f334ac
parent1cc474786194555bec47dd5c061c1bcc5d992952 (diff)
keygen example
-rw-r--r--.gitignore1
-rw-r--r--Makefile11
-rw-r--r--examples/keygen.hs43
3 files changed, 51 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 655c11c..7a4ad60 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,5 +3,6 @@
3*.swp* 3*.swp*
4verify 4verify
5sign 5sign
6keygen
6dist/* 7dist/*
7report.html 8report.html
diff --git a/Makefile b/Makefile
index b02c9f2..37d3f0b 100644
--- a/Makefile
+++ b/Makefile
@@ -3,18 +3,21 @@ HLINTFLAGS=-XHaskell98 -XNoCPP -i 'Use camelCase' -i 'Use String' -i 'Use head'
3 3
4.PHONY: all clean doc install 4.PHONY: all clean doc install
5 5
6all: sign verify report.html doc dist/build/libHSopenpgp-0.2.a dist/openpgp-0.2.tar.gz 6all: sign verify keygen report.html doc dist/build/libHSopenpgp-0.2.a dist/openpgp-0.2.tar.gz
7 7
8install: dist/build/libHSopenpgp-0.2.a 8install: dist/build/libHSopenpgp-0.2.a
9 cabal install 9 cabal install
10 10
11sign: examples/sign.hs 11sign: examples/sign.hs Data/*.hs Data/OpenPGP/*.hs
12 ghc --make $(GHCFLAGS) -o $@ $^ 12 ghc --make $(GHCFLAGS) -o $@ $^
13 13
14verify: examples/verify.hs 14verify: examples/verify.hs Data/*.hs Data/OpenPGP/*.hs
15 ghc --make $(GHCFLAGS) -o $@ $^ 15 ghc --make $(GHCFLAGS) -o $@ $^
16 16
17report.html: examples/* Data/* Data/OpenPGP/* 17keygen: examples/keygen.hs Data/*.hs Data/OpenPGP/*.hs
18 ghc --make $(GHCFLAGS) -o $@ $^
19
20report.html: examples/*.hs Data/*.hs Data/OpenPGP/*.hs
18 hlint $(HLINTFLAGS) --report Data examples || true 21 hlint $(HLINTFLAGS) --report Data examples || true
19 22
20doc: dist/doc/html/openpgp/index.html README 23doc: dist/doc/html/openpgp/index.html README
diff --git a/examples/keygen.hs b/examples/keygen.hs
new file mode 100644
index 0000000..65c3e33
--- /dev/null
+++ b/examples/keygen.hs
@@ -0,0 +1,43 @@
1import System.Time (getClockTime, ClockTime(..))
2import qualified Data.Map as Map
3import qualified Data.ByteString.Lazy as LZ
4
5import Data.Binary
6import OpenSSL.RSA
7import Control.Arrow (second)
8import Codec.Encryption.RSA.NumberTheory (extEuclGcd)
9
10import qualified Data.OpenPGP as OpenPGP
11import qualified Data.OpenPGP.Crypto as OpenPGP
12
13main :: IO ()
14main = do
15 time <- getClockTime
16 let TOD t _ = time
17
18 nkey <- generateRSAKey' 1042 65537
19
20 let secretKey = OpenPGP.SecretKeyPacket {
21 OpenPGP.version = 4,
22 OpenPGP.timestamp = fromIntegral t,
23 OpenPGP.key_algorithm = OpenPGP.RSA,
24 OpenPGP.key = Map.fromList $ map (second OpenPGP.MPI)
25 [('n', rsaN nkey), ('e', rsaE nkey),
26 ('d', rsaD nkey), ('p', rsaP nkey), ('q', rsaQ nkey),
27 ('u', fst $ extEuclGcd (rsaP nkey) (rsaQ nkey))],
28 OpenPGP.s2k_useage = 0,
29 OpenPGP.symmetric_type = undefined,
30 OpenPGP.s2k_type = undefined,
31 OpenPGP.s2k_hash_algorithm = undefined,
32 OpenPGP.s2k_salt = undefined,
33 OpenPGP.s2k_count = undefined,
34 OpenPGP.encrypted_data = undefined,
35 OpenPGP.private_hash = undefined }
36
37 let userID = OpenPGP.UserIDPacket "Test <test@example.com>"
38 let message = OpenPGP.Message[ secretKey, userID ]
39
40 let message' = OpenPGP.Message [ secretKey, userID,
41 OpenPGP.sign message message OpenPGP.SHA256 [] (fromIntegral t)]
42
43 LZ.putStr $ encode message'