/usr/share/doc/libghc-crypto-pubkey-types-doc/html/src/Crypto-Types-PubKey-DSA.html is in libghc-crypto-pubkey-types-doc 0.4.3-7build8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>Crypto/Types/PubKey/DSA.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE DeriveDataTypeable #-}</span>
<a name="line-2"></a><span class='hs-comment'>-- |</span>
<a name="line-3"></a><span class='hs-comment'>-- Module : Crypto.Types.PubKey.DSA</span>
<a name="line-4"></a><span class='hs-comment'>-- License : BSD-style</span>
<a name="line-5"></a><span class='hs-comment'>-- Maintainer : Vincent Hanquez <vincent@snarc.org></span>
<a name="line-6"></a><span class='hs-comment'>-- Stability : Stable</span>
<a name="line-7"></a><span class='hs-comment'>-- Portability : Excellent</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- references:</span>
<a name="line-10"></a><span class='hs-comment'>-- <https://tools.ietf.org/html/rfc6979></span>
<a name="line-11"></a><span class='hs-comment'>--</span>
<a name="line-12"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Crypto</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span><span class='hs-varop'>.</span><span class='hs-conid'>PubKey</span><span class='hs-varop'>.</span><span class='hs-conid'>DSA</span>
<a name="line-13"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>Params</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-14"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Signature</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-15"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PublicNumber</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PublicKey</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PrivateNumber</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PrivateKey</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>KeyPair</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toPublicKey</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toPrivateKey</span>
<a name="line-22"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-23"></a>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Data</span>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span>
<a name="line-26"></a>
<a name="line-27"></a><a name="PublicNumber"></a><span class='hs-comment'>-- | DSA Public Number, usually embedded in DSA Public Key</span>
<a name="line-28"></a><a name="PublicNumber"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>PublicNumber</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Integer</span>
<a name="line-29"></a>
<a name="line-30"></a><a name="PrivateNumber"></a><span class='hs-comment'>-- | DSA Private Number, usually embedded in DSA Private Key</span>
<a name="line-31"></a><a name="PrivateNumber"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>PrivateNumber</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Integer</span>
<a name="line-32"></a>
<a name="line-33"></a><a name="Params"></a><span class='hs-comment'>-- | Represent DSA parameters namely P, G, and Q.</span>
<a name="line-34"></a><a name="Params"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Params</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Params</span>
<a name="line-35"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>params_p</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <span class='hs-comment'>-- ^ DSA p</span>
<a name="line-36"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>params_g</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <span class='hs-comment'>-- ^ DSA g</span>
<a name="line-37"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>params_q</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <span class='hs-comment'>-- ^ DSA q</span>
<a name="line-38"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span><span class='hs-conid'>Data</span><span class='hs-layout'>,</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-39"></a>
<a name="line-40"></a><a name="instance%20ASN1Object%20Params"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ASN1Object</span> <span class='hs-conid'>Params</span> <span class='hs-keyword'>where</span>
<a name="line-41"></a> <span class='hs-varid'>toASN1</span> <span class='hs-varid'>params</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Start</span> <span class='hs-conid'>Sequence</span>
<a name="line-42"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_p</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-43"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_q</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-44"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_g</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-45"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>End</span> <span class='hs-conid'>Sequence</span>
<a name="line-46"></a> <span class='hs-conop'>:</span> <span class='hs-varid'>xs</span>
<a name="line-47"></a> <span class='hs-varid'>fromASN1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Sequence</span><span class='hs-conop'>:</span><span class='hs-conid'>IntVal</span> <span class='hs-varid'>p</span><span class='hs-conop'>:</span><span class='hs-conid'>IntVal</span> <span class='hs-varid'>q</span><span class='hs-conop'>:</span><span class='hs-conid'>IntVal</span> <span class='hs-varid'>g</span><span class='hs-conop'>:</span><span class='hs-conid'>End</span> <span class='hs-conid'>Sequence</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-48"></a> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-conid'>Params</span> <span class='hs-layout'>{</span> <span class='hs-varid'>params_p</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>p</span><span class='hs-layout'>,</span> <span class='hs-varid'>params_g</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>g</span><span class='hs-layout'>,</span> <span class='hs-varid'>params_q</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>q</span> <span class='hs-layout'>}</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-49"></a> <span class='hs-varid'>fromASN1</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-str'>"fromASN1: DSA.Params: unexpected format"</span>
<a name="line-50"></a>
<a name="line-51"></a><a name="Signature"></a><span class='hs-comment'>-- | Represent a DSA signature namely R and S.</span>
<a name="line-52"></a><a name="Signature"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Signature</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Signature</span>
<a name="line-53"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>sign_r</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <span class='hs-comment'>-- ^ DSA r</span>
<a name="line-54"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sign_s</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <span class='hs-comment'>-- ^ DSA s</span>
<a name="line-55"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span><span class='hs-conid'>Data</span><span class='hs-layout'>,</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-56"></a>
<a name="line-57"></a><a name="instance%20ASN1Object%20Signature"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ASN1Object</span> <span class='hs-conid'>Signature</span> <span class='hs-keyword'>where</span>
<a name="line-58"></a> <span class='hs-varid'>toASN1</span> <span class='hs-varid'>sign</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Start</span> <span class='hs-conid'>Sequence</span>
<a name="line-59"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>sign_r</span> <span class='hs-varid'>sign</span><span class='hs-layout'>)</span>
<a name="line-60"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>sign_s</span> <span class='hs-varid'>sign</span><span class='hs-layout'>)</span>
<a name="line-61"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>End</span> <span class='hs-conid'>Sequence</span>
<a name="line-62"></a> <span class='hs-conop'>:</span> <span class='hs-varid'>xs</span>
<a name="line-63"></a> <span class='hs-varid'>fromASN1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Sequence</span><span class='hs-conop'>:</span><span class='hs-conid'>IntVal</span> <span class='hs-varid'>r</span><span class='hs-conop'>:</span><span class='hs-conid'>IntVal</span> <span class='hs-varid'>s</span><span class='hs-conop'>:</span><span class='hs-conid'>End</span> <span class='hs-conid'>Sequence</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-64"></a> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-conid'>Signature</span> <span class='hs-layout'>{</span> <span class='hs-varid'>sign_r</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span><span class='hs-layout'>,</span> <span class='hs-varid'>sign_s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-layout'>}</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-65"></a> <span class='hs-varid'>fromASN1</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-str'>"fromASN1: DSA.Signature: unexpected format"</span>
<a name="line-66"></a>
<a name="line-67"></a><a name="PublicKey"></a><span class='hs-comment'>-- | Represent a DSA public key.</span>
<a name="line-68"></a><a name="PublicKey"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PublicKey</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PublicKey</span>
<a name="line-69"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>public_params</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Params</span> <span class='hs-comment'>-- ^ DSA parameters</span>
<a name="line-70"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>public_y</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PublicNumber</span> <span class='hs-comment'>-- ^ DSA public Y</span>
<a name="line-71"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span><span class='hs-conid'>Data</span><span class='hs-layout'>,</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-72"></a>
<a name="line-73"></a><a name="instance%20ASN1Object%20PublicKey"></a><span class='hs-comment'>-- DSA public key serialization doesn't typically look like this.</span>
<a name="line-74"></a><a name="instance%20ASN1Object%20PublicKey"></a><span class='hs-comment'>-- However to provide an instance we serialize params and the public</span>
<a name="line-75"></a><a name="instance%20ASN1Object%20PublicKey"></a><span class='hs-comment'>-- number together.</span>
<a name="line-76"></a><a name="instance%20ASN1Object%20PublicKey"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ASN1Object</span> <span class='hs-conid'>PublicKey</span> <span class='hs-keyword'>where</span>
<a name="line-77"></a> <span class='hs-varid'>toASN1</span> <span class='hs-varid'>pubKey</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Start</span> <span class='hs-conid'>Sequence</span>
<a name="line-78"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_p</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-79"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_q</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-80"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_g</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-81"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>End</span> <span class='hs-conid'>Sequence</span>
<a name="line-82"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>public_y</span> <span class='hs-varid'>pubKey</span><span class='hs-layout'>)</span>
<a name="line-83"></a> <span class='hs-conop'>:</span> <span class='hs-varid'>xs</span>
<a name="line-84"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>params</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>public_params</span> <span class='hs-varid'>pubKey</span>
<a name="line-85"></a> <span class='hs-varid'>fromASN1</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>fromASN1</span> <span class='hs-varid'>l</span> <span class='hs-keyword'>of</span>
<a name="line-86"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>err</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Left</span> <span class='hs-varid'>err</span>
<a name="line-87"></a> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>dsaParams</span><span class='hs-layout'>,</span> <span class='hs-varid'>ls</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ls</span> <span class='hs-keyword'>of</span>
<a name="line-88"></a> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>dsaPub</span> <span class='hs-conop'>:</span> <span class='hs-varid'>ls2</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-conid'>PublicKey</span> <span class='hs-varid'>dsaParams</span> <span class='hs-varid'>dsaPub</span><span class='hs-layout'>,</span> <span class='hs-varid'>ls2</span><span class='hs-layout'>)</span>
<a name="line-89"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Left</span> <span class='hs-str'>"fromASN1: DSA.PublicKey: unexpected format"</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="PrivateKey"></a><span class='hs-comment'>-- | Represent a DSA private key.</span>
<a name="line-92"></a><a name="PrivateKey"></a><span class='hs-comment'>--</span>
<a name="line-93"></a><a name="PrivateKey"></a><span class='hs-comment'>-- Only x need to be secret.</span>
<a name="line-94"></a><a name="PrivateKey"></a><span class='hs-comment'>-- the DSA parameters are publicly shared with the other side.</span>
<a name="line-95"></a><a name="PrivateKey"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PrivateKey</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PrivateKey</span>
<a name="line-96"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>private_params</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Params</span> <span class='hs-comment'>-- ^ DSA parameters</span>
<a name="line-97"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>private_x</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PrivateNumber</span> <span class='hs-comment'>-- ^ DSA private X</span>
<a name="line-98"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span><span class='hs-conid'>Data</span><span class='hs-layout'>,</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="KeyPair"></a><span class='hs-comment'>-- | Represent a DSA key pair</span>
<a name="line-101"></a><a name="KeyPair"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>KeyPair</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>KeyPair</span> <span class='hs-conid'>Params</span> <span class='hs-conid'>PublicNumber</span> <span class='hs-conid'>PrivateNumber</span>
<a name="line-102"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span><span class='hs-conid'>Read</span><span class='hs-layout'>,</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span><span class='hs-conid'>Data</span><span class='hs-layout'>,</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-103"></a>
<a name="line-104"></a><a name="instance%20ASN1Object%20KeyPair"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ASN1Object</span> <span class='hs-conid'>KeyPair</span> <span class='hs-keyword'>where</span>
<a name="line-105"></a> <span class='hs-varid'>toASN1</span> <span class='hs-layout'>(</span><span class='hs-conid'>KeyPair</span> <span class='hs-varid'>params</span> <span class='hs-varid'>pub</span> <span class='hs-varid'>priv</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-></span>
<a name="line-106"></a> <span class='hs-conid'>Start</span> <span class='hs-conid'>Sequence</span>
<a name="line-107"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-num'>0</span>
<a name="line-108"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_p</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-109"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_q</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-110"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>params_g</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span>
<a name="line-111"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>pub</span>
<a name="line-112"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>priv</span>
<a name="line-113"></a> <span class='hs-conop'>:</span> <span class='hs-conid'>End</span> <span class='hs-conid'>Sequence</span>
<a name="line-114"></a> <span class='hs-conop'>:</span> <span class='hs-varid'>xs</span>
<a name="line-115"></a> <span class='hs-varid'>fromASN1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Sequence</span> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>n</span> <span class='hs-conop'>:</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-116"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>n</span> <span class='hs-varop'>==</span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>xs</span> <span class='hs-keyword'>of</span>
<a name="line-117"></a> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>p</span> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>q</span> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>g</span> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>pub</span> <span class='hs-conop'>:</span> <span class='hs-conid'>IntVal</span> <span class='hs-varid'>priv</span> <span class='hs-conop'>:</span> <span class='hs-conid'>End</span> <span class='hs-conid'>Sequence</span> <span class='hs-conop'>:</span> <span class='hs-varid'>xs2</span> <span class='hs-keyglyph'>-></span>
<a name="line-118"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>params</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Params</span> <span class='hs-layout'>{</span> <span class='hs-varid'>params_p</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>p</span><span class='hs-layout'>,</span> <span class='hs-varid'>params_g</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>g</span><span class='hs-layout'>,</span> <span class='hs-varid'>params_q</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>q</span> <span class='hs-layout'>}</span>
<a name="line-119"></a> <span class='hs-keyword'>in</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-conid'>KeyPair</span> <span class='hs-varid'>params</span> <span class='hs-varid'>pub</span> <span class='hs-varid'>priv</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs2</span><span class='hs-layout'>)</span>
<a name="line-120"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span>
<a name="line-121"></a> <span class='hs-conid'>Left</span> <span class='hs-str'>"fromASN1: DSA.KeyPair: invalid format (version=0)"</span>
<a name="line-122"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-str'>"fromASN1: DSA.KeyPair: unknown format"</span>
<a name="line-123"></a> <span class='hs-varid'>fromASN1</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-str'>"fromASN1: DSA.KeyPair: unexpected format"</span>
<a name="line-124"></a>
<a name="line-125"></a><a name="toPublicKey"></a><span class='hs-comment'>-- | Public key of a DSA Key pair</span>
<a name="line-126"></a><span class='hs-definition'>toPublicKey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeyPair</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>PublicKey</span>
<a name="line-127"></a><span class='hs-definition'>toPublicKey</span> <span class='hs-layout'>(</span><span class='hs-conid'>KeyPair</span> <span class='hs-varid'>params</span> <span class='hs-varid'>pub</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PublicKey</span> <span class='hs-varid'>params</span> <span class='hs-varid'>pub</span>
<a name="line-128"></a>
<a name="line-129"></a><a name="toPrivateKey"></a><span class='hs-comment'>-- | Private key of a DSA Key pair</span>
<a name="line-130"></a><span class='hs-definition'>toPrivateKey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>KeyPair</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>PrivateKey</span>
<a name="line-131"></a><span class='hs-definition'>toPrivateKey</span> <span class='hs-layout'>(</span><span class='hs-conid'>KeyPair</span> <span class='hs-varid'>params</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>priv</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PrivateKey</span> <span class='hs-varid'>params</span> <span class='hs-varid'>priv</span>
</pre></body>
</html>
|