<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>rpmio/rpmpgp.c Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.2.17 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>rpmio/rpmpgp.c</h1><a href="rpmpgp_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 00006 <span class="preprocessor">#include "<a class="code" href="system_8h.html">system.h</a>"</span> 00007 <span class="preprocessor">#include "<a class="code" href="rpmio__internal_8h.html">rpmio_internal.h</a>"</span> 00008 <span class="preprocessor">#include "<a class="code" href="debug_8h.html">debug.h</a>"</span> 00009 00010 <span class="comment">/*@unchecked@*/</span> <a name="l00011"></a><a class="code" href="rpmpgp_8c.html#a1">00011</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a1">_debug</a> = 0; 00012 00013 <span class="comment">/*@unchecked@*/</span> <a name="l00014"></a><a class="code" href="rpmpgp_8c.html#a2">00014</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a2">_print</a> = 0; 00015 00016 <span class="comment">/*@unchecked@*/</span> <a name="l00017"></a><a class="code" href="rpmpgp_8c.html#a3">00017</a> <span class="comment">/*@null@*/</span> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structpgpDig__s.html">pgpDig_s</a> * _dig = NULL; 00018 00019 <span class="comment">/*@unchecked@*/</span> <a name="l00020"></a><a class="code" href="rpmpgp_8c.html#a4">00020</a> <span class="comment">/*@null@*/</span> <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structpgpDigParams__s.html">pgpDigParams_s</a> * _digp = NULL; 00021 00022 <span class="preprocessor">#ifdef DYING</span> 00023 <span class="preprocessor"></span><span class="comment">/* This is the unarmored RPM-GPG-KEY public key. */</span> 00024 <span class="keyword">const</span> <span class="keywordtype">char</span> * redhatPubKeyDSA = <span class="stringliteral">"\</span> 00025 <span class="stringliteral">mQGiBDfqVDgRBADBKr3Bl6PO8BQ0H8sJoD6p9U7Yyl7pjtZqioviPwXP+DCWd4u8\n\</span> 00026 <span class="stringliteral">HQzcxAZ57m8ssA1LK1Fx93coJhDzM130+p5BG9mYSWShLabR3N1KXdXQYYcowTOM\n\</span> 00027 <span class="stringliteral">GxdwYRGr1Spw8QydLhjVfU1VSl4xt6bupPbWJbyjkg5Z3P7BlUOUJmrx3wCgobNV\n\</span> 00028 <span class="stringliteral">EDGaWYJcch5z5B1of/41G8kEAKii6q7Gu/vhXXnLS6m15oNnPVybyngiw/23dKjS\n\</span> 00029 <span class="stringliteral">ZVG7rKANEK2mxg1VB+vc/uUc4k49UxJJfCZg1gu1sPFV3GSa+Y/7jsiLktQvCiLP\n\</span> 00030 <span class="stringliteral">lncQt1dV+ENmHR5BdIDPWDzKBVbgWnSDnqQ6KrZ7T6AlZ74VMpjGxxkWU6vV2xsW\n\</span> 00031 <span class="stringliteral">XCLPA/9P/vtImA8CZN3jxGgtK5GGtDNJ/cMhhuv5tnfwFg4b/VGo2Jr8mhLUqoIb\n\</span> 00032 <span class="stringliteral">E6zeGAmZbUpdckDco8D5fiFmqTf5+++pCEpJLJkkzel/32N2w4qzPrcRMCiBURES\n\</span> 00033 <span class="stringliteral">PjCLd4Y5rPoU8E4kOHc/4BuHN903tiCsCPloCrWsQZ7UdxfQ5LQiUmVkIEhhdCwg\n\</span> 00034 <span class="stringliteral">SW5jIDxzZWN1cml0eUByZWRoYXQuY29tPohVBBMRAgAVBQI36lQ4AwsKAwMVAwID\n\</span> 00035 <span class="stringliteral">FgIBAheAAAoJECGRgM3bQqYOsBQAnRVtg7B25Hm11PHcpa8FpeddKiq2AJ9aO8sB\n\</span> 00036 <span class="stringliteral">XmLDmPOEFI75mpTrKYHF6rkCDQQ36lRyEAgAokgI2xJ+3bZsk8jRA8ORIX8DH05U\n\</span> 00037 <span class="stringliteral">lMH27qFYzLbT6npXwXYIOtVn0K2/iMDj+oEB1Aa2au4OnddYaLWp06v3d+XyS0t+\n\</span> 00038 <span class="stringliteral">5ab2ZfIQzdh7wCwxqRkzR+/H5TLYbMG+hvtTdylfqIX0WEfoOXMtWEGSVwyUsnM3\n\</span> 00039 <span class="stringliteral">Jy3LOi48rQQSCKtCAUdV20FoIGWhwnb/gHU1BnmES6UdQujFBE6EANqPhp0coYoI\n\</span> 00040 <span class="stringliteral">hHJ2oIO8ujQItvvNaU88j/s/izQv5e7MXOgVSjKe/WX3s2JtB/tW7utpy12wh1J+\n\</span> 00041 <span class="stringliteral">JsFdbLV/t8CozUTpJgx5mVA3RKlxjTA+On+1IEUWioB+iVfT7Ov/0kcAzwADBQf9\n\</span> 00042 <span class="stringliteral">E4SKCWRand8K0XloMYgmipxMhJNnWDMLkokvbMNTUoNpSfRoQJ9EheXDxwMpTPwK\n\</span> 00043 <span class="stringliteral">ti/PYrrL2J11P2ed0x7zm8v3gLrY0cue1iSba+8glY+p31ZPOr5ogaJw7ZARgoS8\n\</span> 00044 <span class="stringliteral">BwjyRymXQp+8Dete0TELKOL2/itDOPGHW07SsVWOR6cmX4VlRRcWB5KejaNvdrE5\n\</span> 00045 <span class="stringliteral">4XFtOd04NMgWI63uqZc4zkRa+kwEZtmbz3tHSdRCCE+Y7YVP6IUf/w6YPQFQriWY\n\</span> 00046 <span class="stringliteral">FiA6fD10eB+BlIUqIw80VgjsBKmCwvKkn4jg8kibXgj4/TzQSx77uYokw1EqQ2wk\n\</span> 00047 <span class="stringliteral">OZoaEtcubsNMquuLCMWijYhGBBgRAgAGBQI36lRyAAoJECGRgM3bQqYOhyYAnj7h\n\</span> 00048 <span class="stringliteral">VDY/FJAGqmtZpwVp9IlitW5tAJ4xQApr/jNFZCTksnI+4O1765F7tA==\n\</span> 00049 <span class="stringliteral">"</span>; 00050 00051 <span class="comment">/* This is the unarmored RPM-PGP-KEY public key. */</span> 00052 <span class="keyword">const</span> <span class="keywordtype">char</span> * redhatPubKeyRSA = <span class="stringliteral">"\</span> 00053 <span class="stringliteral">mQCNAzEpXjUAAAEEAKG4/V9oUSiDc9wIge6Bmg6erDGCLzmFyioAho8kDIJSrcmi\n\</span> 00054 <span class="stringliteral">F9qTdPq+fj726pgW1iSb0Y7syZn9Y2lgQm5HkPODfNi8eWyTFSxbr8ygosLRClTP\n\</span> 00055 <span class="stringliteral">xqHVhtInGrfZNLoSpv1LdWOme0yOpOQJnghdOMzKXpgf5g84vaUg6PHLopv5AAUR\n\</span> 00056 <span class="stringliteral">tCpSZWQgSGF0IFNvZnR3YXJlLCBJbmMuIDxyZWRoYXRAcmVkaGF0LmNvbT6JAJUD\n\</span> 00057 <span class="stringliteral">BRAyA5tUoyDApfg4JKEBAUzSA/9QdcVsu955vVyZDk8uvOXWV0X3voT9B3aYMFvj\n\</span> 00058 <span class="stringliteral">UNHUD6F1VFruwQHVKbGJEq1o5MOA6OXKR3vJZStXEMF47TWXJfQaflgl8ywZTH5W\n\</span> 00059 <span class="stringliteral">+eMlKau6Nr0labUV3lmsAE4Vsgu8NCkzIrp2wNVbeW2ZAXtrKswV+refLquUhp7l\n\</span> 00060 <span class="stringliteral">wMpH9IkAdQMFEDGttkRNdXhbO1TgGQEBAGoC/j6C22PqXIyqZc6fG6J6Jl/T5kFG\n\</span> 00061 <span class="stringliteral">xH1pKIzua5WCDDugAgnuOJgywa4pegT4UqwEZiMTAlwT6dmG1CXgKB+5V7lnCjDc\n\</span> 00062 <span class="stringliteral">JZLni0iztoe08ig6fJrjNGXljf7KYXzgwBftQokAlQMFEDMQzo2MRVM9rfPulQEB\n\</span> 00063 <span class="stringliteral">pLoD/1/MWv3u0Paiu14XRvDrBaJ7BmG2/48bA5vKOzpvvoNRO95YS7ZEtqErXA7Y\n\</span> 00064 <span class="stringliteral">DRO8+C8f6PAILMk7kCk4lNMscS/ZRzu5+J8cv4ejsFvxgJBBU3Zgp8AWdWOpvZ0I\n\</span> 00065 <span class="stringliteral">wW//HoDUGhOxlEtymljIMFBkj4SysHWhCBUfA9Xy86kouTJQiQCVAwUQMxDOQ50a\n\</span> 00066 <span class="stringliteral">feTWLUSJAQFnYQQAkt9nhMTeioREB1DvJt+vsFyOj//o3ThqK5ySEP3dgj62iaQp\n\</span> 00067 <span class="stringliteral">JrBmAe5XZPw25C/TXAf+x27H8h2QbKgq49VtsElFexc6wO+uq85fAPDdyE+2XyNE\n\</span> 00068 <span class="stringliteral">njGZkY/TP2F/jTB0sAwJO+xFCHmSYkcBjzxK/2LMD+O7rwp2UCUhhl9QhhqJAJUD\n\</span> 00069 <span class="stringliteral">BRAx5na6pSDo8cuim/kBARmjA/4lDVnV2h9KiNabp9oE38wmGgu5m5XgUHW8L6du\n\</span> 00070 <span class="stringliteral">iQDnwO5IgXN2vDpKGxbgtwv6iYYmGd8IRQ66uJvOsxSv3OR7J7LkCHuI2b/s0AZn\n\</span> 00071 <span class="stringliteral">c79DZaJ2ChUCZlbNQBMeEdrFWif9NopY+d5+2tby1onu9XOFMMvomxL3NhctElYR\n\</span> 00072 <span class="stringliteral">HC8Xw4kAlQMFEDHmdTtURTdEKY1MpQEBEtEEAMZbp1ZFrjiHkj2aLFC1S8dGRbSH\n\</span> 00073 <span class="stringliteral">GUdnLP9qLPFgmWekp9E0o8ZztALGVdqPfPF3N/JJ+AL4IMrfojd7+eZKw36Mdvtg\n\</span> 00074 <span class="stringliteral">dPI+Oz4sxHDbDynZ2qspD9Om5yYuxuz/Xq+9nO2IlsAnEYw3ag3cxat0kvxpOPRe\n\</span> 00075 <span class="stringliteral">Yy+vFpgfDNizr3MgiQBVAwUQMXNMXCjtrosVMemRAQEDnwH7BsJrnnh91nI54LAK\n\</span> 00076 <span class="stringliteral">Gcq3pr8ld0PAtWJmNRGQvUlpEMXUSnu59j2P1ogPNjL3PqKdVxk5Jqgcr8TPQMf3\n\</span> 00077 <span class="stringliteral">V4fqXokAlQMFEDFy+8YiEmsRQ3LyzQEB+TwD/03QDslXLg5F3zj4zf0yI6ikT0be\n\</span> 00078 <span class="stringliteral">5OhZv2pnkb80qgdHzFRxBOYmSoueRKdQJASd8F9ue4b3bmf/Y7ikiY0DblvxcXB2\n\</span> 00079 <span class="stringliteral">sz1Pu8i2Zn9u8SKuxNIoVvM8/STRVkgPfvL5QjAWMHT9Wvg81XcI2yXJzrt/2f2g\n\</span> 00080 <span class="stringliteral">mNpWIvVOOT85rVPIiQCVAwUQMVPRlBlzviMjNHElAQG1nwP/fpVX6nKRWJCSFeB7\n\</span> 00081 <span class="stringliteral">leZ4lb+y1uMsMVv0n7agjJVw13SXaA267y7VWCBlnhsCemxEugqEIkI4lu/1mgtw\n\</span> 00082 <span class="stringliteral">WPWSE0BOIVjj0AA8zp2T0H3ZCCMbiFAFJ1P2Gq2rKr8QrOb/08oH1lEzyz0j/jKh\n\</span> 00083 <span class="stringliteral">qiXAxdlB1wojQB6yLbHvTIe3rZGJAHUDBRAxKetfzauiKSJ6LJEBAed/AvsEiGgj\n\</span> 00084 <span class="stringliteral">TQzhsZcUuRNrQpV0cDGH9Mpril7P7K7yFIzju8biB+Cu6nEknSOHlMLl8usObVlk\n\</span> 00085 <span class="stringliteral">d8Wf14soHC7SjItiGSKtI8JhauzBJPl6fDDeyHGsJKo9f9adKeBMCipCFOuJAJUD\n\</span> 00086 <span class="stringliteral">BRAxKeqWRHFTaIK/x+0BAY6eA/4m5X4gs1UwOUIRnljo9a0cVs6ITL554J9vSCYH\n\</span> 00087 <span class="stringliteral">Zzd87kFwdf5W1Vd82HIkRzcr6cp33E3IDkRzaQCMVw2me7HePP7+4Ry2q3EeZMbm\n\</span> 00088 <span class="stringliteral">NE++VzkxjikzpRb2+F5nGB2UdsElkgbXinswebiuOwOrocLbz6JFdDsJPcT5gVfi\n\</span> 00089 <span class="stringliteral">z15FuA==\n\</span> 00090 <span class="stringliteral">"</span>; 00091 <span class="preprocessor">#endif </span><span class="comment">/* DYING */</span> 00092 <a name="l00093"></a><a class="code" href="rpmpgp_8c.html#a5">00093</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpSigTypeTbl[] = { 00094 { <a class="code" href="rpmpgp_8h.html#a170a59">PGPSIGTYPE_BINARY</a>, <span class="stringliteral">"Binary document signature"</span> }, 00095 { <a class="code" href="rpmpgp_8h.html#a170a60">PGPSIGTYPE_TEXT</a>, <span class="stringliteral">"Text document signature"</span> }, 00096 { <a class="code" href="rpmpgp_8h.html#a170a61">PGPSIGTYPE_STANDALONE</a>, <span class="stringliteral">"Standalone signature"</span> }, 00097 { <a class="code" href="rpmpgp_8h.html#a170a62">PGPSIGTYPE_GENERIC_CERT</a>, <span class="stringliteral">"Generic certification of a User ID and Public Key"</span> }, 00098 { <a class="code" href="rpmpgp_8h.html#a170a63">PGPSIGTYPE_PERSONA_CERT</a>, <span class="stringliteral">"Persona certification of a User ID and Public Key"</span> }, 00099 { <a class="code" href="rpmpgp_8h.html#a170a64">PGPSIGTYPE_CASUAL_CERT</a>, <span class="stringliteral">"Casual certification of a User ID and Public Key"</span> }, 00100 { <a class="code" href="rpmpgp_8h.html#a170a65">PGPSIGTYPE_POSITIVE_CERT</a>, <span class="stringliteral">"Positive certification of a User ID and Public Key"</span> }, 00101 { <a class="code" href="rpmpgp_8h.html#a170a66">PGPSIGTYPE_SUBKEY_BINDING</a>,<span class="stringliteral">"Subkey Binding Signature"</span> }, 00102 { <a class="code" href="rpmpgp_8h.html#a170a67">PGPSIGTYPE_SIGNED_KEY</a>, <span class="stringliteral">"Signature directly on a key"</span> }, 00103 { <a class="code" href="rpmpgp_8h.html#a170a68">PGPSIGTYPE_KEY_REVOKE</a>, <span class="stringliteral">"Key revocation signature"</span> }, 00104 { <a class="code" href="rpmpgp_8h.html#a170a69">PGPSIGTYPE_SUBKEY_REVOKE</a>, <span class="stringliteral">"Subkey revocation signature"</span> }, 00105 { <a class="code" href="rpmpgp_8h.html#a170a70">PGPSIGTYPE_CERT_REVOKE</a>, <span class="stringliteral">"Certification revocation signature"</span> }, 00106 { <a class="code" href="rpmpgp_8h.html#a170a71">PGPSIGTYPE_TIMESTAMP</a>, <span class="stringliteral">"Timestamp signature"</span> }, 00107 { -1, <span class="stringliteral">"Unknown signature type"</span> }, 00108 }; 00109 <a name="l00110"></a><a class="code" href="rpmpgp_8c.html#a6">00110</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpPubkeyTbl[] = { 00111 { <a class="code" href="rpmpgp_8h.html#a171a72">PGPPUBKEYALGO_RSA</a>, <span class="stringliteral">"RSA"</span> }, 00112 { <a class="code" href="rpmpgp_8h.html#a171a73">PGPPUBKEYALGO_RSA_ENCRYPT</a>,<span class="stringliteral">"RSA(Encrypt-Only)"</span> }, 00113 { <a class="code" href="rpmpgp_8h.html#a171a74">PGPPUBKEYALGO_RSA_SIGN</a>, <span class="stringliteral">"RSA(Sign-Only)"</span> }, 00114 { <a class="code" href="rpmpgp_8h.html#a171a75">PGPPUBKEYALGO_ELGAMAL_ENCRYPT</a>,<span class="stringliteral">"Elgamal(Encrypt-Only)"</span> }, 00115 { <a class="code" href="rpmpgp_8h.html#a171a76">PGPPUBKEYALGO_DSA</a>, <span class="stringliteral">"DSA"</span> }, 00116 { <a class="code" href="rpmpgp_8h.html#a171a77">PGPPUBKEYALGO_EC</a>, <span class="stringliteral">"Elliptic Curve"</span> }, 00117 { <a class="code" href="rpmpgp_8h.html#a171a78">PGPPUBKEYALGO_ECDSA</a>, <span class="stringliteral">"ECDSA"</span> }, 00118 { <a class="code" href="rpmpgp_8h.html#a171a79">PGPPUBKEYALGO_ELGAMAL</a>, <span class="stringliteral">"Elgamal"</span> }, 00119 { <a class="code" href="rpmpgp_8h.html#a171a80">PGPPUBKEYALGO_DH</a>, <span class="stringliteral">"Diffie-Hellman (X9.42)"</span> }, 00120 { -1, <span class="stringliteral">"Unknown public key algorithm"</span> }, 00121 }; 00122 <a name="l00123"></a><a class="code" href="rpmpgp_8c.html#a7">00123</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpSymkeyTbl[] = { 00124 { <a class="code" href="rpmpgp_8h.html#a172a81">PGPSYMKEYALGO_PLAINTEXT</a>, <span class="stringliteral">"Plaintext"</span> }, 00125 { <a class="code" href="rpmpgp_8h.html#a172a82">PGPSYMKEYALGO_IDEA</a>, <span class="stringliteral">"IDEA"</span> }, 00126 { <a class="code" href="rpmpgp_8h.html#a172a83">PGPSYMKEYALGO_TRIPLE_DES</a>, <span class="stringliteral">"3DES"</span> }, 00127 { <a class="code" href="rpmpgp_8h.html#a172a84">PGPSYMKEYALGO_CAST5</a>, <span class="stringliteral">"CAST5"</span> }, 00128 { <a class="code" href="rpmpgp_8h.html#a172a85">PGPSYMKEYALGO_BLOWFISH</a>, <span class="stringliteral">"BLOWFISH"</span> }, 00129 { <a class="code" href="rpmpgp_8h.html#a172a86">PGPSYMKEYALGO_SAFER</a>, <span class="stringliteral">"SAFER"</span> }, 00130 { <a class="code" href="rpmpgp_8h.html#a172a87">PGPSYMKEYALGO_DES_SK</a>, <span class="stringliteral">"DES/SK"</span> }, 00131 { <a class="code" href="rpmpgp_8h.html#a172a88">PGPSYMKEYALGO_AES_128</a>, <span class="stringliteral">"AES(128-bit key)"</span> }, 00132 { <a class="code" href="rpmpgp_8h.html#a172a89">PGPSYMKEYALGO_AES_192</a>, <span class="stringliteral">"AES(192-bit key)"</span> }, 00133 { <a class="code" href="rpmpgp_8h.html#a172a90">PGPSYMKEYALGO_AES_256</a>, <span class="stringliteral">"AES(256-bit key)"</span> }, 00134 { <a class="code" href="rpmpgp_8h.html#a172a91">PGPSYMKEYALGO_TWOFISH</a>, <span class="stringliteral">"TWOFISH"</span> }, 00135 { -1, <span class="stringliteral">"Unknown symmetric key algorithm"</span> }, 00136 }; 00137 <a name="l00138"></a><a class="code" href="rpmpgp_8c.html#a8">00138</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpCompressionTbl[] = { 00139 { <a class="code" href="rpmpgp_8h.html#a173a92">PGPCOMPRESSALGO_NONE</a>, <span class="stringliteral">"Uncompressed"</span> }, 00140 { <a class="code" href="rpmpgp_8h.html#a173a93">PGPCOMPRESSALGO_ZIP</a>, <span class="stringliteral">"ZIP"</span> }, 00141 { <a class="code" href="rpmpgp_8h.html#a173a94">PGPCOMPRESSALGO_ZLIB</a>, <span class="stringliteral">"ZLIB"</span> }, 00142 { -1, <span class="stringliteral">"Unknown compression algorithm"</span> }, 00143 }; 00144 <a name="l00145"></a><a class="code" href="rpmpgp_8c.html#a9">00145</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpHashTbl[] = { 00146 { <a class="code" href="rpmpgp_8h.html#a174a95">PGPHASHALGO_MD5</a>, <span class="stringliteral">"MD5"</span> }, 00147 { <a class="code" href="rpmpgp_8h.html#a174a96">PGPHASHALGO_SHA1</a>, <span class="stringliteral">"SHA1"</span> }, 00148 { <a class="code" href="rpmpgp_8h.html#a174a97">PGPHASHALGO_RIPEMD160</a>, <span class="stringliteral">"RIPEMD160"</span> }, 00149 { <a class="code" href="rpmpgp_8h.html#a174a98">PGPHASHALGO_MD2</a>, <span class="stringliteral">"MD2"</span> }, 00150 { <a class="code" href="rpmpgp_8h.html#a174a99">PGPHASHALGO_TIGER192</a>, <span class="stringliteral">"TIGER192"</span> }, 00151 { <a class="code" href="rpmpgp_8h.html#a174a100">PGPHASHALGO_HAVAL_5_160</a>, <span class="stringliteral">"HAVAL-5-160"</span> }, 00152 { -1, <span class="stringliteral">"Unknown hash algorithm"</span> }, 00153 }; 00154 00155 <span class="comment">/*@-exportlocal -exportheadervar@*/</span> 00156 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00157"></a><a class="code" href="rpmpgp_8c.html#a10">00157</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpKeyServerPrefsTbl[] = { 00158 { 0x80, <span class="stringliteral">"No-modify"</span> }, 00159 { -1, <span class="stringliteral">"Unknown key server preference"</span> }, 00160 }; 00161 <span class="comment">/*@=exportlocal =exportheadervar@*/</span> 00162 <a name="l00163"></a><a class="code" href="rpmpgp_8c.html#a11">00163</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpSubTypeTbl[] = { 00164 { <a class="code" href="rpmpgp_8h.html#a175a101">PGPSUBTYPE_SIG_CREATE_TIME</a>,<span class="stringliteral">"signature creation time"</span> }, 00165 { <a class="code" href="rpmpgp_8h.html#a175a102">PGPSUBTYPE_SIG_EXPIRE_TIME</a>,<span class="stringliteral">"signature expiration time"</span> }, 00166 { <a class="code" href="rpmpgp_8h.html#a175a103">PGPSUBTYPE_EXPORTABLE_CERT</a>,<span class="stringliteral">"exportable certification"</span> }, 00167 { <a class="code" href="rpmpgp_8h.html#a175a104">PGPSUBTYPE_TRUST_SIG</a>, <span class="stringliteral">"trust signature"</span> }, 00168 { <a class="code" href="rpmpgp_8h.html#a175a105">PGPSUBTYPE_REGEX</a>, <span class="stringliteral">"regular expression"</span> }, 00169 { <a class="code" href="rpmpgp_8h.html#a175a106">PGPSUBTYPE_REVOCABLE</a>, <span class="stringliteral">"revocable"</span> }, 00170 { <a class="code" href="rpmpgp_8h.html#a175a107">PGPSUBTYPE_KEY_EXPIRE_TIME</a>,<span class="stringliteral">"key expiration time"</span> }, 00171 { <a class="code" href="rpmpgp_8h.html#a175a108">PGPSUBTYPE_BACKWARD_COMPAT</a>,<span class="stringliteral">"placeholder for backward compatibility"</span> }, 00172 { <a class="code" href="rpmpgp_8h.html#a175a109">PGPSUBTYPE_PREFER_SYMKEY</a>, <span class="stringliteral">"preferred symmetric algorithms"</span> }, 00173 { <a class="code" href="rpmpgp_8h.html#a175a110">PGPSUBTYPE_REVOKE_KEY</a>, <span class="stringliteral">"revocation key"</span> }, 00174 { <a class="code" href="rpmpgp_8h.html#a175a111">PGPSUBTYPE_ISSUER_KEYID</a>, <span class="stringliteral">"issuer key ID"</span> }, 00175 { <a class="code" href="rpmpgp_8h.html#a175a112">PGPSUBTYPE_NOTATION</a>, <span class="stringliteral">"notation data"</span> }, 00176 { <a class="code" href="rpmpgp_8h.html#a175a113">PGPSUBTYPE_PREFER_HASH</a>, <span class="stringliteral">"preferred hash algorithms"</span> }, 00177 { <a class="code" href="rpmpgp_8h.html#a175a114">PGPSUBTYPE_PREFER_COMPRESS</a>,<span class="stringliteral">"preferred compression algorithms"</span> }, 00178 { <a class="code" href="rpmpgp_8h.html#a175a115">PGPSUBTYPE_KEYSERVER_PREFERS</a>,<span class="stringliteral">"key server preferences"</span> }, 00179 { <a class="code" href="rpmpgp_8h.html#a175a116">PGPSUBTYPE_PREFER_KEYSERVER</a>,<span class="stringliteral">"preferred key server"</span> }, 00180 { <a class="code" href="rpmpgp_8h.html#a175a117">PGPSUBTYPE_PRIMARY_USERID</a>,<span class="stringliteral">"primary user id"</span> }, 00181 { <a class="code" href="rpmpgp_8h.html#a175a118">PGPSUBTYPE_POLICY_URL</a>, <span class="stringliteral">"policy URL"</span> }, 00182 { <a class="code" href="rpmpgp_8h.html#a175a119">PGPSUBTYPE_KEY_FLAGS</a>, <span class="stringliteral">"key flags"</span> }, 00183 { <a class="code" href="rpmpgp_8h.html#a175a120">PGPSUBTYPE_SIGNER_USERID</a>, <span class="stringliteral">"signer's user id"</span> }, 00184 { <a class="code" href="rpmpgp_8h.html#a175a121">PGPSUBTYPE_REVOKE_REASON</a>, <span class="stringliteral">"reason for revocation"</span> }, 00185 { <a class="code" href="rpmpgp_8h.html#a175a122">PGPSUBTYPE_INTERNAL_100</a>, <span class="stringliteral">"internal subpkt type 100"</span> }, 00186 { <a class="code" href="rpmpgp_8h.html#a175a123">PGPSUBTYPE_INTERNAL_101</a>, <span class="stringliteral">"internal subpkt type 101"</span> }, 00187 { <a class="code" href="rpmpgp_8h.html#a175a124">PGPSUBTYPE_INTERNAL_102</a>, <span class="stringliteral">"internal subpkt type 102"</span> }, 00188 { <a class="code" href="rpmpgp_8h.html#a175a125">PGPSUBTYPE_INTERNAL_103</a>, <span class="stringliteral">"internal subpkt type 103"</span> }, 00189 { <a class="code" href="rpmpgp_8h.html#a175a126">PGPSUBTYPE_INTERNAL_104</a>, <span class="stringliteral">"internal subpkt type 104"</span> }, 00190 { <a class="code" href="rpmpgp_8h.html#a175a127">PGPSUBTYPE_INTERNAL_105</a>, <span class="stringliteral">"internal subpkt type 105"</span> }, 00191 { <a class="code" href="rpmpgp_8h.html#a175a128">PGPSUBTYPE_INTERNAL_106</a>, <span class="stringliteral">"internal subpkt type 106"</span> }, 00192 { <a class="code" href="rpmpgp_8h.html#a175a129">PGPSUBTYPE_INTERNAL_107</a>, <span class="stringliteral">"internal subpkt type 107"</span> }, 00193 { <a class="code" href="rpmpgp_8h.html#a175a130">PGPSUBTYPE_INTERNAL_108</a>, <span class="stringliteral">"internal subpkt type 108"</span> }, 00194 { <a class="code" href="rpmpgp_8h.html#a175a131">PGPSUBTYPE_INTERNAL_109</a>, <span class="stringliteral">"internal subpkt type 109"</span> }, 00195 { <a class="code" href="rpmpgp_8h.html#a175a132">PGPSUBTYPE_INTERNAL_110</a>, <span class="stringliteral">"internal subpkt type 110"</span> }, 00196 { -1, <span class="stringliteral">"Unknown signature subkey type"</span> }, 00197 }; 00198 <a name="l00199"></a><a class="code" href="rpmpgp_8c.html#a12">00199</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpTagTbl[] = { 00200 { <a class="code" href="rpmpgp_8h.html#a169a37">PGPTAG_PUBLIC_SESSION_KEY</a>,<span class="stringliteral">"Public-Key Encrypted Session Key"</span> }, 00201 { <a class="code" href="rpmpgp_8h.html#a169a38">PGPTAG_SIGNATURE</a>, <span class="stringliteral">"Signature"</span> }, 00202 { <a class="code" href="rpmpgp_8h.html#a169a39">PGPTAG_SYMMETRIC_SESSION_KEY</a>,<span class="stringliteral">"Symmetric-Key Encrypted Session Key"</span> }, 00203 { <a class="code" href="rpmpgp_8h.html#a169a40">PGPTAG_ONEPASS_SIGNATURE</a>, <span class="stringliteral">"One-Pass Signature"</span> }, 00204 { <a class="code" href="rpmpgp_8h.html#a169a41">PGPTAG_SECRET_KEY</a>, <span class="stringliteral">"Secret Key"</span> }, 00205 { <a class="code" href="rpmpgp_8h.html#a169a42">PGPTAG_PUBLIC_KEY</a>, <span class="stringliteral">"Public Key"</span> }, 00206 { <a class="code" href="rpmpgp_8h.html#a169a43">PGPTAG_SECRET_SUBKEY</a>, <span class="stringliteral">"Secret Subkey"</span> }, 00207 { <a class="code" href="rpmpgp_8h.html#a169a44">PGPTAG_COMPRESSED_DATA</a>, <span class="stringliteral">"Compressed Data"</span> }, 00208 { <a class="code" href="rpmpgp_8h.html#a169a45">PGPTAG_SYMMETRIC_DATA</a>, <span class="stringliteral">"Symmetrically Encrypted Data"</span> }, 00209 { <a class="code" href="rpmpgp_8h.html#a169a46">PGPTAG_MARKER</a>, <span class="stringliteral">"Marker"</span> }, 00210 { <a class="code" href="rpmpgp_8h.html#a169a47">PGPTAG_LITERAL_DATA</a>, <span class="stringliteral">"Literal Data"</span> }, 00211 { <a class="code" href="rpmpgp_8h.html#a169a48">PGPTAG_TRUST</a>, <span class="stringliteral">"Trust"</span> }, 00212 { <a class="code" href="rpmpgp_8h.html#a169a49">PGPTAG_USER_ID</a>, <span class="stringliteral">"User ID"</span> }, 00213 { <a class="code" href="rpmpgp_8h.html#a169a50">PGPTAG_PUBLIC_SUBKEY</a>, <span class="stringliteral">"Public Subkey"</span> }, 00214 { <a class="code" href="rpmpgp_8h.html#a169a51">PGPTAG_COMMENT_OLD</a>, <span class="stringliteral">"Comment (from OpenPGP draft)"</span> }, 00215 { <a class="code" href="rpmpgp_8h.html#a169a52">PGPTAG_PHOTOID</a>, <span class="stringliteral">"PGP's photo ID"</span> }, 00216 { <a class="code" href="rpmpgp_8h.html#a169a53">PGPTAG_ENCRYPTED_MDC</a>, <span class="stringliteral">"Integrity protected encrypted data"</span> }, 00217 { <a class="code" href="rpmpgp_8h.html#a169a54">PGPTAG_MDC</a>, <span class="stringliteral">"Manipulaion detection code packet"</span> }, 00218 { <a class="code" href="rpmpgp_8h.html#a169a55">PGPTAG_PRIVATE_60</a>, <span class="stringliteral">"Private #60"</span> }, 00219 { <a class="code" href="rpmpgp_8h.html#a169a56">PGPTAG_COMMENT</a>, <span class="stringliteral">"Comment"</span> }, 00220 { <a class="code" href="rpmpgp_8h.html#a169a57">PGPTAG_PRIVATE_62</a>, <span class="stringliteral">"Private #62"</span> }, 00221 { <a class="code" href="rpmpgp_8h.html#a169a58">PGPTAG_CONTROL</a>, <span class="stringliteral">"Control (GPG)"</span> }, 00222 { -1, <span class="stringliteral">"Unknown packet tag"</span> }, 00223 }; 00224 <a name="l00225"></a><a class="code" href="rpmpgp_8c.html#a13">00225</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpArmorTbl[] = { 00226 { <a class="code" href="rpmpgp_8h.html#a176a135">PGPARMOR_MESSAGE</a>, <span class="stringliteral">"MESSAGE"</span> }, 00227 { <a class="code" href="rpmpgp_8h.html#a176a136">PGPARMOR_PUBKEY</a>, <span class="stringliteral">"PUBLIC KEY BLOCK"</span> }, 00228 { <a class="code" href="rpmpgp_8h.html#a176a137">PGPARMOR_SIGNATURE</a>, <span class="stringliteral">"SIGNATURE"</span> }, 00229 { <a class="code" href="rpmpgp_8h.html#a176a138">PGPARMOR_SIGNED_MESSAGE</a>, <span class="stringliteral">"SIGNED MESSAGE"</span> }, 00230 { <a class="code" href="rpmpgp_8h.html#a176a139">PGPARMOR_FILE</a>, <span class="stringliteral">"ARMORED FILE"</span> }, 00231 { <a class="code" href="rpmpgp_8h.html#a176a140">PGPARMOR_PRIVKEY</a>, <span class="stringliteral">"PRIVATE KEY BLOCK"</span> }, 00232 { <a class="code" href="rpmpgp_8h.html#a176a141">PGPARMOR_SECKEY</a>, <span class="stringliteral">"SECRET KEY BLOCK"</span> }, 00233 { -1, <span class="stringliteral">"Unknown armor block"</span> } 00234 }; 00235 <a name="l00236"></a><a class="code" href="rpmpgp_8c.html#a14">00236</a> <span class="keyword">struct </span><a class="code" href="structpgpValTbl__s.html">pgpValTbl_s</a> pgpArmorKeyTbl[] = { 00237 { <a class="code" href="rpmpgp_8h.html#a177a142">PGPARMORKEY_VERSION</a>, <span class="stringliteral">"Version: "</span> }, 00238 { <a class="code" href="rpmpgp_8h.html#a177a143">PGPARMORKEY_COMMENT</a>, <span class="stringliteral">"Comment: "</span> }, 00239 { <a class="code" href="rpmpgp_8h.html#a177a144">PGPARMORKEY_MESSAGEID</a>, <span class="stringliteral">"MessageID: "</span> }, 00240 { <a class="code" href="rpmpgp_8h.html#a177a145">PGPARMORKEY_HASH</a>, <span class="stringliteral">"Hash: "</span> }, 00241 { <a class="code" href="rpmpgp_8h.html#a177a146">PGPARMORKEY_CHARSET</a>, <span class="stringliteral">"Charset: "</span> }, 00242 { -1, <span class="stringliteral">"Unknown armor key"</span> } 00243 }; 00244 00250 <span class="comment">/*@unused@*/</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="comment">/*@null@*/</span> <span class="keywordtype">void</span> * <a name="l00251"></a><a class="code" href="rpmpgp_8c.html#a23">00251</a> <a class="code" href="poptint_8h.html#a14">_free</a>(<span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span> <span class="comment">/*@out@*/</span> <span class="keyword">const</span> <span class="keywordtype">void</span> * p) 00252 <span class="comment">/*@modifies p @*/</span> 00253 { 00254 <span class="keywordflow">if</span> (p != NULL) free((<span class="keywordtype">void</span> *)p); 00255 <span class="keywordflow">return</span> NULL; 00256 } 00257 <a name="l00258"></a><a class="code" href="rpmpgp_8c.html#a24">00258</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(<span class="keywordtype">void</span>) 00259 <span class="comment">/*@globals fileSystem @*/</span> 00260 <span class="comment">/*@modifies fileSystem @*/</span> 00261 { 00262 <span class="keywordflow">if</span> (!<a class="code" href="rpmpgp_8c.html#a2">_print</a>) <span class="keywordflow">return</span>; 00263 fprintf(stderr, <span class="stringliteral">"\n"</span>); 00264 } 00265 <a name="l00266"></a><a class="code" href="rpmpgp_8c.html#a25">00266</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rpmpgp_8c.html#a25">pgpPrtInt</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pre, <span class="keywordtype">int</span> i) 00267 <span class="comment">/*@globals fileSystem @*/</span> 00268 <span class="comment">/*@modifies fileSystem @*/</span> 00269 { 00270 <span class="keywordflow">if</span> (!<a class="code" href="rpmpgp_8c.html#a2">_print</a>) <span class="keywordflow">return</span>; 00271 <span class="keywordflow">if</span> (pre && *pre) 00272 fprintf(stderr, <span class="stringliteral">"%s"</span>, pre); 00273 fprintf(stderr, <span class="stringliteral">" %d"</span>, i); 00274 } 00275 <a name="l00276"></a><a class="code" href="rpmpgp_8c.html#a26">00276</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pre, <span class="keyword">const</span> <span class="keywordtype">char</span> *s) 00277 <span class="comment">/*@globals fileSystem @*/</span> 00278 <span class="comment">/*@modifies fileSystem @*/</span> 00279 { 00280 <span class="keywordflow">if</span> (!<a class="code" href="rpmpgp_8c.html#a2">_print</a>) <span class="keywordflow">return</span>; 00281 <span class="keywordflow">if</span> (pre && *pre) 00282 fprintf(stderr, <span class="stringliteral">"%s"</span>, pre); 00283 fprintf(stderr, <span class="stringliteral">" %s"</span>, s); 00284 } 00285 <a name="l00286"></a><a class="code" href="rpmpgp_8c.html#a27">00286</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pre, <span class="keyword">const</span> byte *p, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plen) 00287 <span class="comment">/*@globals fileSystem @*/</span> 00288 <span class="comment">/*@modifies fileSystem @*/</span> 00289 { 00290 <span class="keywordflow">if</span> (!<a class="code" href="rpmpgp_8c.html#a2">_print</a>) <span class="keywordflow">return</span>; 00291 <span class="keywordflow">if</span> (pre && *pre) 00292 fprintf(stderr, <span class="stringliteral">"%s"</span>, pre); 00293 fprintf(stderr, <span class="stringliteral">" %s"</span>, <a class="code" href="rpmpgp_8h.html#a152">pgpHexStr</a>(p, plen)); 00294 } 00295 <a name="l00296"></a><a class="code" href="rpmpgp_8c.html#a28">00296</a> <span class="keywordtype">void</span> <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * pre, <a class="code" href="rpmpgp_8h.html#a3">pgpValTbl</a> vs, byte val) 00297 <span class="comment">/*@globals fileSystem @*/</span> 00298 <span class="comment">/*@modifies fileSystem @*/</span> 00299 { 00300 <span class="keywordflow">if</span> (!<a class="code" href="rpmpgp_8c.html#a2">_print</a>) <span class="keywordflow">return</span>; 00301 <span class="keywordflow">if</span> (pre && *pre) 00302 fprintf(stderr, <span class="stringliteral">"%s"</span>, pre); 00303 fprintf(stderr, <span class="stringliteral">"%s(%u)"</span>, <a class="code" href="rpmpgp_8h.html#a154">pgpValStr</a>(vs, val), (<span class="keywordtype">unsigned</span>)val); 00304 } 00305 00308 <span class="comment">/*@unused@*/</span> <span class="keyword">static</span> <span class="comment">/*@observer@*/</span> <a name="l00309"></a><a class="code" href="rpmpgp_8c.html#a29">00309</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(<span class="keyword">const</span> byte *p) 00310 <span class="comment">/*@*/</span> 00311 { 00312 <span class="keyword">static</span> <span class="keywordtype">char</span> prbuf[2048]; 00313 <span class="keywordtype">char</span> *t = prbuf; 00314 t = <a class="code" href="rpmpgp_8h.html#a151">pgpHexCvt</a>(t, p+2, <a class="code" href="rpmpgp_8h.html#a150">pgpMpiLen</a>(p)-2); 00315 <span class="keywordflow">return</span> prbuf; 00316 } 00317 <a name="l00318"></a><a class="code" href="rpmpgp_8c.html#a30">00318</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="rpmpgp_8c.html#a30">pgpHexSet</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * pre, <span class="keywordtype">int</span> lbits, 00319 <span class="comment">/*@out@*/</span> mp32number * mpn, <span class="keyword">const</span> byte * p) 00320 <span class="comment">/*@globals fileSystem @*/</span> 00321 <span class="comment">/*@modifies *mpn, fileSystem @*/</span> 00322 { 00323 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mbits = <a class="code" href="rpmpgp_8h.html#a149">pgpMpiBits</a>(p); 00324 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbits = (lbits > mbits ? lbits : mbits); 00325 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbytes = ((nbits + 7) >> 3); 00326 <span class="keywordtype">char</span> * t = <a class="code" href="rpmmalloc_8c.html#a1">xmalloc</a>(2*nbytes+1); 00327 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ix = 2 * ((nbits - mbits) >> 3); 00328 00329 <span class="keywordflow">if</span> (_debug) 00330 fprintf(stderr, <span class="stringliteral">"*** mbits %u nbits %u nbytes %u t %p[%d] ix %u\n"</span>, mbits, nbits, nbytes, t, (2*nbytes+1), ix); 00331 <span class="keywordflow">if</span> (ix > 0) memset(t, (<span class="keywordtype">int</span>)<span class="charliteral">'0'</span>, ix); 00332 strcpy(t+ix, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00333 <span class="keywordflow">if</span> (_debug) 00334 fprintf(stderr, <span class="stringliteral">"*** %s %s\n"</span>, pre, t); 00335 mp32nsethex(mpn, t); 00336 t = <a class="code" href="poptint_8h.html#a14">_free</a>(t); 00337 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00338 printf(<span class="stringliteral">"\t %s "</span>, pre), mp32println(mpn->size, mpn->data); 00339 } 00340 <a name="l00341"></a><a class="code" href="rpmpgp_8c.html#a31">00341</a> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a31">pgpPrtSubType</a>(<span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00342 { 00343 <span class="keyword">const</span> byte *p = h; 00344 <span class="keywordtype">unsigned</span> plen; 00345 <span class="keywordtype">int</span> i; 00346 00347 <span class="keywordflow">while</span> (hlen > 0) { 00348 i = <a class="code" href="rpmpgp_8h.html#a148">pgpLen</a>(p, &plen); 00349 p += i; 00350 hlen -= i; 00351 00352 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpSubTypeTbl, p[0]); 00353 <span class="keywordflow">switch</span> (*p) { 00354 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a109">PGPSUBTYPE_PREFER_SYMKEY</a>: <span class="comment">/* preferred symmetric algorithms */</span> 00355 <span class="keywordflow">for</span> (i = 1; i < plen; i++) 00356 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpSymkeyTbl, p[i]); 00357 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00358 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a113">PGPSUBTYPE_PREFER_HASH</a>: <span class="comment">/* preferred hash algorithms */</span> 00359 <span class="keywordflow">for</span> (i = 1; i < plen; i++) 00360 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpHashTbl, p[i]); 00361 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00362 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a114">PGPSUBTYPE_PREFER_COMPRESS</a>:<span class="comment">/* preferred compression algorithms */</span> 00363 <span class="keywordflow">for</span> (i = 1; i < plen; i++) 00364 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpCompressionTbl, p[i]); 00365 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00366 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a115">PGPSUBTYPE_KEYSERVER_PREFERS</a>:<span class="comment">/* key server preferences */</span> 00367 <span class="keywordflow">for</span> (i = 1; i < plen; i++) 00368 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpKeyServerPrefsTbl, p[i]); 00369 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00370 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a101">PGPSUBTYPE_SIG_CREATE_TIME</a>: 00371 <span class="comment">/*@-mods -mayaliasunique @*/</span> 00372 <span class="keywordflow">if</span> (_digp && _digp-><a class="code" href="structpgpDigParams__s.html#m3">tag</a> == <a class="code" href="rpmpgp_8h.html#a169a42">PGPTAG_PUBLIC_KEY</a>) { 00373 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>, p+1, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>)); 00374 } 00375 <span class="comment">/*@=mods =mayaliasunique @*/</span> 00376 <span class="comment">/*@fallthrough@*/</span> 00377 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a102">PGPSUBTYPE_SIG_EXPIRE_TIME</a>: 00378 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a107">PGPSUBTYPE_KEY_EXPIRE_TIME</a>: 00379 <span class="keywordflow">if</span> ((plen - 1) == 4) { 00380 time_t t = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(p+1, plen-1); 00381 <span class="keywordflow">if</span> (_print) 00382 fprintf(stderr, <span class="stringliteral">" %-24.24s(0x%08x)"</span>, ctime(&t), (<span class="keywordtype">unsigned</span>)t); 00383 } <span class="keywordflow">else</span> 00384 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">""</span>, p+1, plen-1); 00385 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00386 00387 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a111">PGPSUBTYPE_ISSUER_KEYID</a>: <span class="comment">/* issuer key ID */</span> 00388 <span class="comment">/*@-mods -mayaliasunique @*/</span> 00389 <span class="keywordflow">if</span> (_digp && _digp-><a class="code" href="structpgpDigParams__s.html#m3">tag</a> == <a class="code" href="rpmpgp_8h.html#a169a42">PGPTAG_PUBLIC_KEY</a>) { 00390 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m11">signid</a>, p+1, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m11">signid</a>)); 00391 } 00392 <span class="comment">/*@=mods =mayaliasunique @*/</span> 00393 <span class="comment">/*@fallthrough@*/</span> 00394 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a103">PGPSUBTYPE_EXPORTABLE_CERT</a>: 00395 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a104">PGPSUBTYPE_TRUST_SIG</a>: 00396 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a105">PGPSUBTYPE_REGEX</a>: 00397 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a106">PGPSUBTYPE_REVOCABLE</a>: 00398 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a108">PGPSUBTYPE_BACKWARD_COMPAT</a>: 00399 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a110">PGPSUBTYPE_REVOKE_KEY</a>: 00400 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a112">PGPSUBTYPE_NOTATION</a>: 00401 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a116">PGPSUBTYPE_PREFER_KEYSERVER</a>: 00402 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a117">PGPSUBTYPE_PRIMARY_USERID</a>: 00403 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a118">PGPSUBTYPE_POLICY_URL</a>: 00404 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a119">PGPSUBTYPE_KEY_FLAGS</a>: 00405 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a120">PGPSUBTYPE_SIGNER_USERID</a>: 00406 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a121">PGPSUBTYPE_REVOKE_REASON</a>: 00407 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a122">PGPSUBTYPE_INTERNAL_100</a>: 00408 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a123">PGPSUBTYPE_INTERNAL_101</a>: 00409 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a124">PGPSUBTYPE_INTERNAL_102</a>: 00410 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a125">PGPSUBTYPE_INTERNAL_103</a>: 00411 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a126">PGPSUBTYPE_INTERNAL_104</a>: 00412 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a127">PGPSUBTYPE_INTERNAL_105</a>: 00413 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a128">PGPSUBTYPE_INTERNAL_106</a>: 00414 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a129">PGPSUBTYPE_INTERNAL_107</a>: 00415 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a130">PGPSUBTYPE_INTERNAL_108</a>: 00416 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a131">PGPSUBTYPE_INTERNAL_109</a>: 00417 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a175a132">PGPSUBTYPE_INTERNAL_110</a>: 00418 <span class="keywordflow">default</span>: 00419 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">""</span>, p+1, plen-1); 00420 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00421 } 00422 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00423 p += plen; 00424 hlen -= plen; 00425 } 00426 <span class="keywordflow">return</span> 0; 00427 } 00428 00429 <span class="comment">/*@-varuse =readonlytrans @*/</span> 00430 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00431"></a><a class="code" href="rpmpgp_8c.html#a15">00431</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a15">pgpSigRSA</a>[] = { 00432 <span class="stringliteral">" m**d ="</span>, 00433 NULL, 00434 }; 00435 00436 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00437"></a><a class="code" href="rpmpgp_8c.html#a16">00437</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a16">pgpSigDSA</a>[] = { 00438 <span class="stringliteral">" r ="</span>, 00439 <span class="stringliteral">" s ="</span>, 00440 NULL, 00441 }; 00442 <span class="comment">/*@=varuse =readonlytrans @*/</span> 00443 <a name="l00444"></a><a class="code" href="rpmpgp_8c.html#a32">00444</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a32">pgpPrtSigParams</a>(<span class="comment">/*@unused@*/</span> <a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag, byte pubkey_algo, byte sigtype, 00445 <span class="keyword">const</span> byte *p, <span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00446 <span class="comment">/*@globals fileSystem @*/</span> 00447 <span class="comment">/*@modifies fileSystem @*/</span> 00448 { 00449 <span class="keywordtype">int</span> i; 00450 00451 <span class="keywordflow">for</span> (i = 0; p < &h[hlen]; i++, p += <a class="code" href="rpmpgp_8h.html#a150">pgpMpiLen</a>(p)) { 00452 <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a72">PGPPUBKEYALGO_RSA</a>) { 00453 <span class="keywordflow">if</span> (i >= 1) <span class="keywordflow">break</span>; 00454 <span class="comment">/*@-mods@*/</span> 00455 <span class="keywordflow">if</span> (_dig && 00456 (sigtype == <a class="code" href="rpmpgp_8h.html#a170a59">PGPSIGTYPE_BINARY</a> || sigtype == <a class="code" href="rpmpgp_8h.html#a170a60">PGPSIGTYPE_TEXT</a>)) 00457 { 00458 <span class="keywordflow">switch</span> (i) { 00459 <span class="keywordflow">case</span> 0: <span class="comment">/* m**d */</span> 00460 mp32nsethex(&_dig-><a class="code" href="structpgpDig__s.html#m18">c</a>, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00461 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00462 printf(<span class="stringliteral">"\t m**d = "</span>), mp32println(_dig-><a class="code" href="structpgpDig__s.html#m18">c</a>.size, _dig-><a class="code" href="structpgpDig__s.html#m18">c</a>.data); 00463 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00464 <span class="keywordflow">default</span>: 00465 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00466 } 00467 } 00468 <span class="comment">/*@=mods@*/</span> 00469 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a15">pgpSigRSA</a>[i]); 00470 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a76">PGPPUBKEYALGO_DSA</a>) { 00471 <span class="keywordflow">if</span> (i >= 2) <span class="keywordflow">break</span>; 00472 <span class="comment">/*@-mods@*/</span> 00473 <span class="keywordflow">if</span> (_dig && 00474 (sigtype == <a class="code" href="rpmpgp_8h.html#a170a59">PGPSIGTYPE_BINARY</a> || sigtype == <a class="code" href="rpmpgp_8h.html#a170a60">PGPSIGTYPE_TEXT</a>)) 00475 { 00476 <span class="keywordflow">switch</span> (i) { 00477 <span class="keywordflow">case</span> 0: <span class="comment">/* r */</span> 00478 <a class="code" href="rpmpgp_8c.html#a30">pgpHexSet</a>(<a class="code" href="rpmpgp_8c.html#a16">pgpSigDSA</a>[i], 160, &_dig-><a class="code" href="structpgpDig__s.html#m14">r</a>, p); 00479 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00480 <span class="keywordflow">case</span> 1: <span class="comment">/* s */</span> 00481 <a class="code" href="rpmpgp_8c.html#a30">pgpHexSet</a>(<a class="code" href="rpmpgp_8c.html#a16">pgpSigDSA</a>[i], 160, &_dig-><a class="code" href="structpgpDig__s.html#m15">s</a>, p); 00482 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00483 <span class="keywordflow">default</span>: 00484 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00485 } 00486 } 00487 <span class="comment">/*@=mods@*/</span> 00488 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a16">pgpSigDSA</a>[i]); 00489 } <span class="keywordflow">else</span> { 00490 <span class="keywordflow">if</span> (_print) 00491 fprintf(stderr, <span class="stringliteral">"%7d"</span>, i); 00492 } 00493 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8h.html#a153">pgpMpiStr</a>(p)); 00494 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00495 } 00496 00497 <span class="keywordflow">return</span> 0; 00498 } 00499 <a name="l00500"></a><a class="code" href="rpmpgp_8c.html#a33">00500</a> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a33">pgpPrtSig</a>(<a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag, <span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00501 { 00502 byte version = h[0]; 00503 byte * p; 00504 <span class="keywordtype">unsigned</span> plen; 00505 <span class="keywordtype">int</span> rc; 00506 00507 <span class="keywordflow">switch</span> (version) { 00508 <span class="keywordflow">case</span> 3: 00509 { <a class="code" href="structpgpPktSigV3__s.html">pgpPktSigV3</a> v = (pgpPktSigV3)h; 00510 time_t t; 00511 00512 <span class="keywordflow">if</span> (v-><a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a> != 5) { 00513 fprintf(stderr, <span class="stringliteral">" hashlen(%u) != 5\n"</span>, (<span class="keywordtype">unsigned</span>)v-><a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a>); 00514 <span class="keywordflow">return</span> 1; 00515 } 00516 00517 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">"V3 "</span>, pgpTagTbl, tag); 00518 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpPubkeyTbl, v-><a class="code" href="structpgpPktSigV3__s.html#m5">pubkey_algo</a>); 00519 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpHashTbl, v-><a class="code" href="structpgpPktSigV3__s.html#m6">hash_algo</a>); 00520 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpSigTypeTbl, v-><a class="code" href="structpgpPktSigV3__s.html#m2">sigtype</a>); 00521 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00522 t = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-><a class="code" href="structpgpPktSigV3__s.html#m3">time</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktSigV3__s.html#m3">time</a>)); 00523 <span class="keywordflow">if</span> (_print) 00524 fprintf(stderr, <span class="stringliteral">" %-24.24s(0x%08x)"</span>, ctime(&t), (<span class="keywordtype">unsigned</span>)t); 00525 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00526 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">" signer keyid"</span>, v-><a class="code" href="structpgpPktSigV3__s.html#m4">signid</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktSigV3__s.html#m4">signid</a>)); 00527 plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-><a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>)); 00528 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">" signhash16"</span>, v-><a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>)); 00529 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00530 00531 <span class="comment">/*@-mods@*/</span> 00532 <span class="keywordflow">if</span> (_digp && _digp-><a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> == 0) { 00533 _digp-><a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-><a class="code" href="structpgpPktSigV3__s.html#m0">version</a>; 00534 _digp-><a class="code" href="structpgpDigParams__s.html#m9">hashlen</a> = v-><a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a>; 00535 _digp-><a class="code" href="structpgpDigParams__s.html#m8">sigtype</a> = v-><a class="code" href="structpgpPktSigV3__s.html#m2">sigtype</a>; 00536 _digp-><a class="code" href="structpgpDigParams__s.html#m1">hash</a> = memcpy(<a class="code" href="rpmmalloc_8c.html#a1">xmalloc</a>(v-><a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a>), &v-><a class="code" href="structpgpPktSigV3__s.html#m2">sigtype</a>, v-><a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a>); 00537 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>, v-><a class="code" href="structpgpPktSigV3__s.html#m3">time</a>, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>)); 00538 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m11">signid</a>, v-><a class="code" href="structpgpPktSigV3__s.html#m4">signid</a>, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m11">signid</a>)); 00539 _digp-><a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-><a class="code" href="structpgpPktSigV3__s.html#m5">pubkey_algo</a>; 00540 _digp-><a class="code" href="structpgpDigParams__s.html#m7">hash_algo</a> = v-><a class="code" href="structpgpPktSigV3__s.html#m6">hash_algo</a>; 00541 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m10">signhash16</a>, v-><a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m10">signhash16</a>)); 00542 } 00543 <span class="comment">/*@=mods@*/</span> 00544 00545 p = ((byte *)v) + <span class="keyword">sizeof</span>(*v); 00546 rc = <a class="code" href="rpmpgp_8c.html#a32">pgpPrtSigParams</a>(tag, v-><a class="code" href="structpgpPktSigV3__s.html#m5">pubkey_algo</a>, v-><a class="code" href="structpgpPktSigV3__s.html#m2">sigtype</a>, p, h, hlen); 00547 } <span class="keywordflow">break</span>; 00548 <span class="keywordflow">case</span> 4: 00549 { <a class="code" href="structpgpPktSigV4__s.html">pgpPktSigV4</a> v = (pgpPktSigV4)h; 00550 00551 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">"V4 "</span>, pgpTagTbl, tag); 00552 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpPubkeyTbl, v-><a class="code" href="structpgpPktSigV4__s.html#m2">pubkey_algo</a>); 00553 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpHashTbl, v-><a class="code" href="structpgpPktSigV4__s.html#m3">hash_algo</a>); 00554 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpSigTypeTbl, v-><a class="code" href="structpgpPktSigV4__s.html#m1">sigtype</a>); 00555 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00556 00557 p = &v-><a class="code" href="structpgpPktSigV4__s.html#m4">hashlen</a>[0]; 00558 plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-><a class="code" href="structpgpPktSigV4__s.html#m4">hashlen</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktSigV4__s.html#m4">hashlen</a>)); 00559 p += <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktSigV4__s.html#m4">hashlen</a>); 00560 00561 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00562 fprintf(stderr, <span class="stringliteral">" hash[%u] -- %s\n"</span>, plen, <a class="code" href="rpmpgp_8h.html#a152">pgpHexStr</a>(p, plen)); 00563 <span class="comment">/*@-mods@*/</span> 00564 <span class="keywordflow">if</span> (_digp && _digp-><a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> == 0) { 00565 _digp-><a class="code" href="structpgpDigParams__s.html#m9">hashlen</a> = plen; 00566 _digp-><a class="code" href="structpgpDigParams__s.html#m1">hash</a> = memcpy(<a class="code" href="rpmmalloc_8c.html#a1">xmalloc</a>(plen), p, plen); 00567 } 00568 <span class="comment">/*@=mods@*/</span> 00569 (void) <a class="code" href="rpmpgp_8c.html#a31">pgpPrtSubType</a>(p, plen); 00570 p += plen; 00571 00572 plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(p,2); 00573 p += 2; 00574 00575 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00576 fprintf(stderr, <span class="stringliteral">" unhash[%u] -- %s\n"</span>, plen, <a class="code" href="rpmpgp_8h.html#a152">pgpHexStr</a>(p, plen)); 00577 (void) <a class="code" href="rpmpgp_8c.html#a31">pgpPrtSubType</a>(p, plen); 00578 p += plen; 00579 00580 plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(p,2); 00581 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">" signhash16"</span>, p, 2); 00582 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00583 00584 <span class="comment">/*@-mods@*/</span> 00585 <span class="keywordflow">if</span> (_digp && _digp-><a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> == 0) { 00586 _digp-><a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-><a class="code" href="structpgpPktSigV4__s.html#m0">version</a>; 00587 _digp-><a class="code" href="structpgpDigParams__s.html#m8">sigtype</a> = v-><a class="code" href="structpgpPktSigV4__s.html#m1">sigtype</a>; 00588 _digp-><a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-><a class="code" href="structpgpPktSigV4__s.html#m2">pubkey_algo</a>; 00589 _digp-><a class="code" href="structpgpDigParams__s.html#m7">hash_algo</a> = v-><a class="code" href="structpgpPktSigV4__s.html#m3">hash_algo</a>; 00590 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m10">signhash16</a>, p, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m10">signhash16</a>)); 00591 } 00592 <span class="comment">/*@=mods@*/</span> 00593 00594 p += 2; 00595 00596 rc = <a class="code" href="rpmpgp_8c.html#a32">pgpPrtSigParams</a>(tag, v-><a class="code" href="structpgpPktSigV4__s.html#m2">pubkey_algo</a>, v-><a class="code" href="structpgpPktSigV4__s.html#m1">sigtype</a>, p, h, hlen); 00597 } <span class="keywordflow">break</span>; 00598 <span class="keywordflow">default</span>: 00599 rc = 1; 00600 <span class="keywordflow">break</span>; 00601 } 00602 <span class="keywordflow">return</span> rc; 00603 } 00604 00605 <span class="comment">/*@-varuse =readonlytrans @*/</span> 00606 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00607"></a><a class="code" href="rpmpgp_8c.html#a17">00607</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a17">pgpPublicRSA</a>[] = { 00608 <span class="stringliteral">" n ="</span>, 00609 <span class="stringliteral">" e ="</span>, 00610 NULL, 00611 }; 00612 00613 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00614"></a><a class="code" href="rpmpgp_8c.html#a18">00614</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a18">pgpSecretRSA</a>[] = { 00615 <span class="stringliteral">" d ="</span>, 00616 <span class="stringliteral">" p ="</span>, 00617 <span class="stringliteral">" q ="</span>, 00618 <span class="stringliteral">" u ="</span>, 00619 NULL, 00620 }; 00621 00622 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00623"></a><a class="code" href="rpmpgp_8c.html#a19">00623</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a19">pgpPublicDSA</a>[] = { 00624 <span class="stringliteral">" p ="</span>, 00625 <span class="stringliteral">" q ="</span>, 00626 <span class="stringliteral">" g ="</span>, 00627 <span class="stringliteral">" y ="</span>, 00628 NULL, 00629 }; 00630 00631 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00632"></a><a class="code" href="rpmpgp_8c.html#a20">00632</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a20">pgpSecretDSA</a>[] = { 00633 <span class="stringliteral">" x ="</span>, 00634 NULL, 00635 }; 00636 00637 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00638"></a><a class="code" href="rpmpgp_8c.html#a21">00638</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a21">pgpPublicELGAMAL</a>[] = { 00639 <span class="stringliteral">" p ="</span>, 00640 <span class="stringliteral">" g ="</span>, 00641 <span class="stringliteral">" y ="</span>, 00642 NULL, 00643 }; 00644 00645 <span class="comment">/*@observer@*/</span> <span class="comment">/*@unchecked@*/</span> <a name="l00646"></a><a class="code" href="rpmpgp_8c.html#a22">00646</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="rpmpgp_8c.html#a22">pgpSecretELGAMAL</a>[] = { 00647 <span class="stringliteral">" x ="</span>, 00648 NULL, 00649 }; 00650 <span class="comment">/*@=varuse =readonlytrans @*/</span> 00651 <a name="l00652"></a><a class="code" href="rpmpgp_8c.html#a34">00652</a> <span class="keyword">static</span> <span class="keyword">const</span> byte * <a class="code" href="rpmpgp_8c.html#a34">pgpPrtPubkeyParams</a>(byte pubkey_algo, 00653 <span class="comment">/*@returned@*/</span> <span class="keyword">const</span> byte *p, <span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00654 <span class="comment">/*@globals fileSystem @*/</span> 00655 <span class="comment">/*@modifies fileSystem @*/</span> 00656 { 00657 <span class="keywordtype">int</span> i; 00658 00659 <span class="keywordflow">for</span> (i = 0; p < &h[hlen]; i++, p += <a class="code" href="rpmpgp_8h.html#a150">pgpMpiLen</a>(p)) { 00660 <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a72">PGPPUBKEYALGO_RSA</a>) { 00661 <span class="keywordflow">if</span> (i >= 2) <span class="keywordflow">break</span>; 00662 <span class="comment">/*@-mods@*/</span> 00663 <span class="keywordflow">if</span> (_dig) { 00664 <span class="keywordflow">switch</span> (i) { 00665 <span class="keywordflow">case</span> 0: <span class="comment">/* n */</span> 00666 mp32bsethex(&_dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.n, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00667 <span class="comment">/* Get the keyid */</span> 00668 <span class="keywordflow">if</span> (_digp) { 00669 uint32* np = _dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.n.modl; 00670 uint32 nsize = _dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.n.size; 00671 uint32 keyid[2]; 00672 <span class="preprocessor"> #if WORDS_BIGENDIAN</span> 00673 <span class="preprocessor"></span> keyid[0] = np[nsize-2]; 00674 keyid[1] = np[nsize-1]; 00675 <span class="preprocessor"> #else</span> 00676 <span class="preprocessor"></span> keyid[0] = swapu32(np[nsize-2]); 00677 keyid[1] = swapu32(np[nsize-1]); 00678 <span class="preprocessor"> #endif</span> 00679 <span class="preprocessor"></span> memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m11">signid</a>, keyid, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m11">signid</a>)); 00680 } 00681 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00682 printf(<span class="stringliteral">"\t n = "</span>), mp32println(_dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.n.size, _dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.n.modl); 00683 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00684 <span class="keywordflow">case</span> 1: <span class="comment">/* e */</span> 00685 mp32nsethex(&_dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.e, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00686 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00687 printf(<span class="stringliteral">"\t e = "</span>), mp32println(_dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.e.size, _dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.e.data); 00688 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00689 <span class="keywordflow">default</span>: 00690 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00691 } 00692 } 00693 <span class="comment">/*@=mods@*/</span> 00694 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a17">pgpPublicRSA</a>[i]); 00695 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a76">PGPPUBKEYALGO_DSA</a>) { 00696 <span class="keywordflow">if</span> (i >= 4) <span class="keywordflow">break</span>; 00697 <span class="comment">/*@-mods@*/</span> 00698 <span class="keywordflow">if</span> (_dig) { 00699 <span class="keywordflow">switch</span> (i) { 00700 <span class="keywordflow">case</span> 0: <span class="comment">/* p */</span> 00701 mp32bsethex(&_dig-><a class="code" href="structpgpDig__s.html#m9">p</a>, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00702 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00703 printf(<span class="stringliteral">"\t p = "</span>), mp32println(_dig-><a class="code" href="structpgpDig__s.html#m9">p</a>.size, _dig-><a class="code" href="structpgpDig__s.html#m9">p</a>.modl); 00704 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00705 <span class="keywordflow">case</span> 1: <span class="comment">/* q */</span> 00706 mp32bsethex(&_dig-><a class="code" href="structpgpDig__s.html#m10">q</a>, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00707 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00708 printf(<span class="stringliteral">"\t q = "</span>), mp32println(_dig-><a class="code" href="structpgpDig__s.html#m10">q</a>.size, _dig-><a class="code" href="structpgpDig__s.html#m10">q</a>.modl); 00709 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00710 <span class="keywordflow">case</span> 2: <span class="comment">/* g */</span> 00711 mp32nsethex(&_dig-><a class="code" href="structpgpDig__s.html#m11">g</a>, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00712 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00713 printf(<span class="stringliteral">"\t g = "</span>), mp32println(_dig-><a class="code" href="structpgpDig__s.html#m11">g</a>.size, _dig-><a class="code" href="structpgpDig__s.html#m11">g</a>.data); 00714 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00715 <span class="keywordflow">case</span> 3: <span class="comment">/* y */</span> 00716 mp32nsethex(&_dig-><a class="code" href="structpgpDig__s.html#m12">y</a>, <a class="code" href="rpmpgp_8c.html#a29">pgpMpiHex</a>(p)); 00717 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a1">_debug</a> && <a class="code" href="rpmpgp_8c.html#a2">_print</a>) 00718 printf(<span class="stringliteral">"\t y = "</span>), mp32println(_dig-><a class="code" href="structpgpDig__s.html#m12">y</a>.size, _dig-><a class="code" href="structpgpDig__s.html#m12">y</a>.data); 00719 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00720 <span class="keywordflow">default</span>: 00721 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 00722 } 00723 } 00724 <span class="comment">/*@=mods@*/</span> 00725 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a19">pgpPublicDSA</a>[i]); 00726 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a75">PGPPUBKEYALGO_ELGAMAL_ENCRYPT</a>) { 00727 <span class="keywordflow">if</span> (i >= 3) <span class="keywordflow">break</span>; 00728 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a21">pgpPublicELGAMAL</a>[i]); 00729 } <span class="keywordflow">else</span> { 00730 <span class="keywordflow">if</span> (_print) 00731 fprintf(stderr, <span class="stringliteral">"%7d"</span>, i); 00732 } 00733 <span class="comment">/*@=mods@*/</span> 00734 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8h.html#a153">pgpMpiStr</a>(p)); 00735 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00736 } 00737 00738 <span class="keywordflow">return</span> p; 00739 } 00740 <a name="l00741"></a><a class="code" href="rpmpgp_8c.html#a35">00741</a> <span class="keyword">static</span> <span class="keyword">const</span> byte * <a class="code" href="rpmpgp_8c.html#a35">pgpPrtSeckeyParams</a>(<span class="comment">/*@unused@*/</span> byte pubkey_algo, 00742 <span class="comment">/*@returned@*/</span> <span class="keyword">const</span> byte *p, <span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00743 <span class="comment">/*@globals fileSystem @*/</span> 00744 <span class="comment">/*@modifies fileSystem @*/</span> 00745 { 00746 <span class="keywordtype">int</span> i; 00747 00748 <span class="keywordflow">switch</span> (*p) { 00749 <span class="keywordflow">case</span> 0: 00750 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpSymkeyTbl, *p); 00751 <span class="keywordflow">break</span>; 00752 <span class="keywordflow">case</span> 255: 00753 p++; 00754 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpSymkeyTbl, *p); 00755 <span class="keywordflow">switch</span> (p[1]) { 00756 <span class="keywordflow">case</span> 0x00: 00757 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" simple "</span>, pgpHashTbl, p[2]); 00758 p += 2; 00759 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>; 00760 <span class="keywordflow">case</span> 0x01: 00761 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" salted "</span>, pgpHashTbl, p[2]); 00762 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">""</span>, p+3, 8); 00763 p += 10; 00764 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>; 00765 <span class="keywordflow">case</span> 0x03: 00766 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" iterated/salted "</span>, pgpHashTbl, p[2]); 00767 <span class="comment">/*@-shiftnegative@*/</span> <span class="comment">/* FIX: unsigned cast */</span> 00768 i = (16 + (p[11] & 0xf)) << ((p[11] >> 4) + 6); 00769 <span class="comment">/*@=shiftnegative@*/</span> 00770 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">""</span>, p+3, 8); 00771 <a class="code" href="rpmpgp_8c.html#a25">pgpPrtInt</a>(<span class="stringliteral">" iter"</span>, i); 00772 p += 11; 00773 <span class="comment">/*@innerbreak@*/</span> <span class="keywordflow">break</span>; 00774 } 00775 <span class="keywordflow">break</span>; 00776 <span class="keywordflow">default</span>: 00777 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpSymkeyTbl, *p); 00778 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">" IV"</span>, p+1, 8); 00779 p += 8; 00780 <span class="keywordflow">break</span>; 00781 } 00782 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00783 00784 p++; 00785 00786 <span class="preprocessor">#ifdef NOTYET </span><span class="comment">/* XXX encrypted MPI's need to be handled. */</span> 00787 <span class="keywordflow">for</span> (i = 0; p < &h[hlen]; i++, p += <a class="code" href="rpmpgp_8h.html#a150">pgpMpiLen</a>(p)) { 00788 <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a72">PGPPUBKEYALGO_RSA</a>) { 00789 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a18">pgpSecretRSA</a>[i] == NULL) <span class="keywordflow">break</span>; 00790 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a18">pgpSecretRSA</a>[i]); 00791 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a76">PGPPUBKEYALGO_DSA</a>) { 00792 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a20">pgpSecretDSA</a>[i] == NULL) <span class="keywordflow">break</span>; 00793 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a20">pgpSecretDSA</a>[i]); 00794 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pubkey_algo == <a class="code" href="rpmpgp_8h.html#a171a75">PGPPUBKEYALGO_ELGAMAL_ENCRYPT</a>) { 00795 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8c.html#a22">pgpSecretELGAMAL</a>[i] == NULL) <span class="keywordflow">break</span>; 00796 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8c.html#a22">pgpSecretELGAMAL</a>[i]); 00797 } <span class="keywordflow">else</span> { 00798 <span class="keywordflow">if</span> (_print) 00799 fprintf(stderr, <span class="stringliteral">"%7d"</span>, i); 00800 } 00801 <a class="code" href="rpmpgp_8c.html#a26">pgpPrtStr</a>(<span class="stringliteral">""</span>, <a class="code" href="rpmpgp_8h.html#a153">pgpMpiStr</a>(p)); 00802 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00803 } 00804 <span class="preprocessor">#else</span> 00805 <span class="preprocessor"></span> <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">" secret"</span>, p, (hlen - (p - h) - 2)); 00806 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00807 p += (hlen - (p - h) - 2); 00808 <span class="preprocessor">#endif</span> 00809 <span class="preprocessor"></span> <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">" checksum"</span>, p, 2); 00810 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00811 00812 <span class="keywordflow">return</span> p; 00813 } 00814 <a name="l00815"></a><a class="code" href="rpmpgp_8c.html#a36">00815</a> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a36">pgpPrtKey</a>(<a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag, <span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00816 { 00817 byte version = *h; 00818 <span class="keyword">const</span> byte * p; 00819 <span class="keywordtype">unsigned</span> plen; 00820 time_t t; 00821 <span class="keywordtype">int</span> rc; 00822 00823 <span class="keywordflow">switch</span> (version) { 00824 <span class="keywordflow">case</span> 3: 00825 { <a class="code" href="structpgpPktKeyV3__s.html">pgpPktKeyV3</a> v = (pgpPktKeyV3)h; 00826 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">"V3 "</span>, pgpTagTbl, tag); 00827 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpPubkeyTbl, v-><a class="code" href="structpgpPktKeyV3__s.html#m3">pubkey_algo</a>); 00828 t = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-><a class="code" href="structpgpPktKeyV3__s.html#m1">time</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktKeyV3__s.html#m1">time</a>)); 00829 <span class="keywordflow">if</span> (_print) 00830 fprintf(stderr, <span class="stringliteral">" %-24.24s(0x%08x)"</span>, ctime(&t), (<span class="keywordtype">unsigned</span>)t); 00831 plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-><a class="code" href="structpgpPktKeyV3__s.html#m2">valid</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktKeyV3__s.html#m2">valid</a>)); 00832 <span class="keywordflow">if</span> (plen != 0) 00833 fprintf(stderr, <span class="stringliteral">" valid %u days"</span>, plen); 00834 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00835 00836 <span class="comment">/*@-mods@*/</span> 00837 <span class="keywordflow">if</span> (_digp && _digp-><a class="code" href="structpgpDigParams__s.html#m3">tag</a> == tag) { 00838 _digp-><a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-><a class="code" href="structpgpPktKeyV3__s.html#m0">version</a>; 00839 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>, v-><a class="code" href="structpgpPktKeyV3__s.html#m1">time</a>, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>)); 00840 _digp-><a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-><a class="code" href="structpgpPktKeyV3__s.html#m3">pubkey_algo</a>; 00841 } 00842 <span class="comment">/*@=mods@*/</span> 00843 00844 p = ((byte *)v) + <span class="keyword">sizeof</span>(*v); 00845 p = <a class="code" href="rpmpgp_8c.html#a34">pgpPrtPubkeyParams</a>(v-><a class="code" href="structpgpPktKeyV3__s.html#m3">pubkey_algo</a>, p, h, hlen); 00846 rc = 0; 00847 } <span class="keywordflow">break</span>; 00848 <span class="keywordflow">case</span> 4: 00849 { <a class="code" href="structpgpPktKeyV4__s.html">pgpPktKeyV4</a> v = (pgpPktKeyV4)h; 00850 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">"V4 "</span>, pgpTagTbl, tag); 00851 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">" "</span>, pgpPubkeyTbl, v-><a class="code" href="structpgpPktKeyV4__s.html#m2">pubkey_algo</a>); 00852 t = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-><a class="code" href="structpgpPktKeyV4__s.html#m1">time</a>, <span class="keyword">sizeof</span>(v-><a class="code" href="structpgpPktKeyV4__s.html#m1">time</a>)); 00853 <span class="keywordflow">if</span> (_print) 00854 fprintf(stderr, <span class="stringliteral">" %-24.24s(0x%08x)"</span>, ctime(&t), (<span class="keywordtype">unsigned</span>)t); 00855 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00856 00857 <span class="comment">/*@-mods@*/</span> 00858 <span class="keywordflow">if</span> (_digp && _digp-><a class="code" href="structpgpDigParams__s.html#m3">tag</a> == tag) { 00859 _digp-><a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-><a class="code" href="structpgpPktKeyV4__s.html#m0">version</a>; 00860 memcpy(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>, v-><a class="code" href="structpgpPktKeyV4__s.html#m1">time</a>, <span class="keyword">sizeof</span>(_digp-><a class="code" href="structpgpDigParams__s.html#m5">time</a>)); 00861 _digp-><a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-><a class="code" href="structpgpPktKeyV4__s.html#m2">pubkey_algo</a>; 00862 } 00863 <span class="comment">/*@=mods@*/</span> 00864 00865 p = ((byte *)v) + <span class="keyword">sizeof</span>(*v); 00866 p = <a class="code" href="rpmpgp_8c.html#a34">pgpPrtPubkeyParams</a>(v-><a class="code" href="structpgpPktKeyV4__s.html#m2">pubkey_algo</a>, p, h, hlen); 00867 <span class="keywordflow">if</span> (!(tag == <a class="code" href="rpmpgp_8h.html#a169a42">PGPTAG_PUBLIC_KEY</a> || tag == <a class="code" href="rpmpgp_8h.html#a169a50">PGPTAG_PUBLIC_SUBKEY</a>)) 00868 p = <a class="code" href="rpmpgp_8c.html#a35">pgpPrtSeckeyParams</a>(v-><a class="code" href="structpgpPktKeyV4__s.html#m2">pubkey_algo</a>, p, h, hlen); 00869 rc = 0; 00870 } <span class="keywordflow">break</span>; 00871 <span class="keywordflow">default</span>: 00872 rc = 1; 00873 <span class="keywordflow">break</span>; 00874 } 00875 <span class="keywordflow">return</span> rc; 00876 } 00877 <a name="l00878"></a><a class="code" href="rpmpgp_8c.html#a37">00878</a> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a37">pgpPrtUserID</a>(<a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag, <span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00879 { 00880 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">""</span>, pgpTagTbl, tag); 00881 <span class="keywordflow">if</span> (_print) 00882 fprintf(stderr, <span class="stringliteral">" \"%.*s\""</span>, (<span class="keywordtype">int</span>)hlen, (<span class="keyword">const</span> <span class="keywordtype">char</span> *)h); 00883 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00884 <span class="comment">/*@-mods@*/</span> 00885 <span class="keywordflow">if</span> (_digp) { 00886 <span class="keywordtype">char</span> * t; 00887 _digp-><a class="code" href="structpgpDigParams__s.html#m0">userid</a> = t = memcpy(<a class="code" href="rpmmalloc_8c.html#a1">xmalloc</a>(hlen+1), h, hlen); 00888 t[hlen] = <span class="charliteral">'\0'</span>; 00889 } 00890 <span class="comment">/*@=mods@*/</span> 00891 <span class="keywordflow">return</span> 0; 00892 } 00893 <a name="l00894"></a><a class="code" href="rpmpgp_8c.html#a38">00894</a> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a38">pgpPrtComment</a>(<a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag, <span class="keyword">const</span> byte *h, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen) 00895 { 00896 <span class="keywordtype">int</span> i = hlen; 00897 00898 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">""</span>, pgpTagTbl, tag); 00899 <span class="keywordflow">if</span> (_print) 00900 fprintf(stderr, <span class="stringliteral">" "</span>); 00901 <span class="keywordflow">while</span> (i > 0) { 00902 <span class="keywordtype">int</span> j; 00903 <span class="keywordflow">if</span> (*h >= <span class="charliteral">' '</span> && *h <= <span class="charliteral">'z'</span>) { 00904 <span class="keywordflow">if</span> (_print) 00905 fprintf(stderr, <span class="stringliteral">"%s"</span>, (<span class="keyword">const</span> <span class="keywordtype">char</span> *)h); 00906 j = strlen(h); 00907 <span class="keywordflow">while</span> (h[j] == <span class="charliteral">'\0'</span>) 00908 j++; 00909 } <span class="keywordflow">else</span> { 00910 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">""</span>, h, i); 00911 j = i; 00912 } 00913 i -= j; 00914 h += j; 00915 } 00916 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00917 <span class="keywordflow">return</span> 0; 00918 } 00919 <a name="l00920"></a><a class="code" href="rpmpgp_8c.html#a39">00920</a> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a39">pgpPrtPkt</a>(<span class="keyword">const</span> byte *pkt) 00921 { 00922 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> val = *pkt; 00923 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pktlen; 00924 <a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag; 00925 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plen; 00926 <span class="keyword">const</span> byte *h; 00927 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hlen = 0; 00928 <span class="keywordtype">int</span> rc = 0; 00929 00930 <span class="comment">/* XXX can't deal with these. */</span> 00931 <span class="keywordflow">if</span> (!(val & 0x80)) 00932 <span class="keywordflow">return</span> -1; 00933 00934 <span class="keywordflow">if</span> (val & 0x40) { 00935 tag = (val & 0x3f); 00936 plen = <a class="code" href="rpmpgp_8h.html#a148">pgpLen</a>(pkt+1, &hlen); 00937 } <span class="keywordflow">else</span> { 00938 tag = (val >> 2) & 0xf; 00939 plen = (1 << (val & 0x3)); 00940 hlen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(pkt+1, plen); 00941 } 00942 00943 pktlen = 1 + plen + hlen; 00944 h = pkt + 1 + plen; 00945 <span class="keywordflow">switch</span> (tag) { 00946 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a38">PGPTAG_SIGNATURE</a>: 00947 rc = <a class="code" href="rpmpgp_8c.html#a33">pgpPrtSig</a>(tag, h, hlen); 00948 <span class="keywordflow">break</span>; 00949 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a42">PGPTAG_PUBLIC_KEY</a>: 00950 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a50">PGPTAG_PUBLIC_SUBKEY</a>: 00951 rc = <a class="code" href="rpmpgp_8c.html#a36">pgpPrtKey</a>(tag, h, hlen); 00952 <span class="keywordflow">break</span>; 00953 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a41">PGPTAG_SECRET_KEY</a>: 00954 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a43">PGPTAG_SECRET_SUBKEY</a>: 00955 rc = <a class="code" href="rpmpgp_8c.html#a36">pgpPrtKey</a>(tag, h, hlen); 00956 <span class="keywordflow">break</span>; 00957 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a49">PGPTAG_USER_ID</a>: 00958 rc = <a class="code" href="rpmpgp_8c.html#a37">pgpPrtUserID</a>(tag, h, hlen); 00959 <span class="keywordflow">break</span>; 00960 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a56">PGPTAG_COMMENT</a>: 00961 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a51">PGPTAG_COMMENT_OLD</a>: 00962 rc = <a class="code" href="rpmpgp_8c.html#a38">pgpPrtComment</a>(tag, h, hlen); 00963 <span class="keywordflow">break</span>; 00964 00965 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a36">PGPTAG_RESERVED</a>: 00966 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a37">PGPTAG_PUBLIC_SESSION_KEY</a>: 00967 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a39">PGPTAG_SYMMETRIC_SESSION_KEY</a>: 00968 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a44">PGPTAG_COMPRESSED_DATA</a>: 00969 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a45">PGPTAG_SYMMETRIC_DATA</a>: 00970 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a46">PGPTAG_MARKER</a>: 00971 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a47">PGPTAG_LITERAL_DATA</a>: 00972 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a48">PGPTAG_TRUST</a>: 00973 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a52">PGPTAG_PHOTOID</a>: 00974 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a53">PGPTAG_ENCRYPTED_MDC</a>: 00975 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a54">PGPTAG_MDC</a>: 00976 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a55">PGPTAG_PRIVATE_60</a>: 00977 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a57">PGPTAG_PRIVATE_62</a>: 00978 <span class="keywordflow">case</span> <a class="code" href="rpmpgp_8h.html#a169a58">PGPTAG_CONTROL</a>: 00979 <span class="keywordflow">default</span>: 00980 <a class="code" href="rpmpgp_8c.html#a28">pgpPrtVal</a>(<span class="stringliteral">""</span>, pgpTagTbl, tag); 00981 <a class="code" href="rpmpgp_8c.html#a27">pgpPrtHex</a>(<span class="stringliteral">""</span>, h, hlen); 00982 <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>(); 00983 <span class="keywordflow">break</span>; 00984 } 00985 00986 <span class="keywordflow">return</span> (rc ? -1 : pktlen); 00987 } 00988 <a name="l00989"></a><a class="code" href="rpmpgp_8c.html#a40">00989</a> <span class="keyword">struct </span><a class="code" href="structpgpDig__s.html">pgpDig_s</a> * pgpNewDig(void) 00990 { 00991 <span class="keyword">struct </span><a class="code" href="structpgpDig__s.html">pgpDig_s</a> * dig = <a class="code" href="rpmmalloc_8c.html#a2">xcalloc</a>(1, <span class="keyword">sizeof</span>(*dig)); 00992 <span class="keywordflow">return</span> dig; 00993 } 00994 <a name="l00995"></a><a class="code" href="rpmpgp_8c.html#a41">00995</a> <span class="keyword">struct </span><a class="code" href="structpgpDig__s.html">pgpDig_s</a> * pgpFreeDig(<span class="comment">/*@only@*/</span> <span class="comment">/*@null@*/</span> struct pgpDig_s * dig) 00996 <span class="comment">/*@modifies dig @*/</span> 00997 { 00998 <span class="keywordflow">if</span> (dig != NULL) { 00999 <span class="keywordtype">int</span> i; 01000 dig-><a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m0">userid</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m0">userid</a>); 01001 dig-><a class="code" href="structpgpDig__s.html#m1">pubkey</a>.<a class="code" href="structpgpDigParams__s.html#m0">userid</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m1">pubkey</a>.<a class="code" href="structpgpDigParams__s.html#m0">userid</a>); 01002 dig-><a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m1">hash</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m1">hash</a>); 01003 dig-><a class="code" href="structpgpDig__s.html#m1">pubkey</a>.<a class="code" href="structpgpDigParams__s.html#m1">hash</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m1">pubkey</a>.<a class="code" href="structpgpDigParams__s.html#m1">hash</a>); 01004 <span class="comment">/*@-unqualifiedtrans@*/</span> <span class="comment">/* FIX: double indirection */</span> 01005 <span class="keywordflow">for</span> (i = 0; i < 4; i++) { 01006 dig-><a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m2">params</a>[i] = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m2">params</a>[i]); 01007 dig-><a class="code" href="structpgpDig__s.html#m1">pubkey</a>.<a class="code" href="structpgpDigParams__s.html#m2">params</a>[i] = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m1">pubkey</a>.<a class="code" href="structpgpDigParams__s.html#m2">params</a>[i]); 01008 } 01009 <span class="comment">/*@=unqualifiedtrans@*/</span> 01010 01011 <span class="comment">/*@-branchstate@*/</span> 01012 <span class="keywordflow">if</span> (dig-><a class="code" href="structpgpDig__s.html#m6">md5ctx</a> != NULL) 01013 (void) <a class="code" href="group__rpmio.html#a18">rpmDigestFinal</a>(dig-><a class="code" href="structpgpDig__s.html#m6">md5ctx</a>, NULL, NULL, 0); 01014 <span class="comment">/*@=branchstate@*/</span> 01015 dig-><a class="code" href="structpgpDig__s.html#m6">md5ctx</a> = NULL; 01016 dig-><a class="code" href="structpgpDig__s.html#m7">md5</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m7">md5</a>); 01017 01018 <span class="comment">/*@-branchstate@*/</span> 01019 <span class="keywordflow">if</span> (dig-><a class="code" href="structpgpDig__s.html#m3">sha1ctx</a> != NULL) 01020 (void) <a class="code" href="group__rpmio.html#a18">rpmDigestFinal</a>(dig-><a class="code" href="structpgpDig__s.html#m3">sha1ctx</a>, NULL, NULL, 0); 01021 <span class="comment">/*@=branchstate@*/</span> 01022 dig-><a class="code" href="structpgpDig__s.html#m3">sha1ctx</a> = NULL; 01023 dig-><a class="code" href="structpgpDig__s.html#m4">sha1</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-><a class="code" href="structpgpDig__s.html#m4">sha1</a>); 01024 01025 mp32nfree(&dig-><a class="code" href="structpgpDig__s.html#m13">hm</a>); 01026 mp32nfree(&dig-><a class="code" href="structpgpDig__s.html#m14">r</a>); 01027 mp32nfree(&dig-><a class="code" href="structpgpDig__s.html#m15">s</a>); 01028 01029 (void) rsapkFree(&dig-><a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>); 01030 mp32nfree(&dig-><a class="code" href="structpgpDig__s.html#m17">m</a>); 01031 mp32nfree(&dig-><a class="code" href="structpgpDig__s.html#m18">c</a>); 01032 mp32nfree(&dig-><a class="code" href="structpgpDig__s.html#m19">rsahm</a>); 01033 dig = <a class="code" href="poptint_8h.html#a14">_free</a>(dig); 01034 } 01035 <span class="keywordflow">return</span> dig; 01036 } 01037 <a name="l01038"></a><a class="code" href="rpmpgp_8c.html#a42">01038</a> <span class="keywordtype">int</span> <a class="code" href="rpmpgp_8c.html#a42">pgpPrtPkts</a>(<span class="keyword">const</span> byte * pkts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> plen, 01039 <span class="keyword">struct</span> pgpDig_s * dig, <span class="keywordtype">int</span> printing) 01040 { 01041 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> val = *pkts; 01042 <span class="keyword">const</span> byte *p; 01043 <span class="keywordtype">int</span> len; 01044 01045 <span class="comment">/*@-mods@*/</span> 01046 <a class="code" href="rpmpgp_8c.html#a2">_print</a> = printing; 01047 _dig = dig; 01048 <span class="keywordflow">if</span> (dig != NULL && (val & 0x80)) { 01049 <a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag = (val & 0x40) ? (val & 0x3f) : ((val >> 2) & 0xf); 01050 _digp = (tag == <a class="code" href="rpmpgp_8h.html#a169a38">PGPTAG_SIGNATURE</a>) ? &_dig-><a class="code" href="structpgpDig__s.html#m0">signature</a> : &_dig-><a class="code" href="structpgpDig__s.html#m1">pubkey</a>; 01051 _digp-><a class="code" href="structpgpDigParams__s.html#m3">tag</a> = tag; 01052 } <span class="keywordflow">else</span> 01053 _digp = NULL; 01054 <span class="comment">/*@=mods@*/</span> 01055 01056 <span class="keywordflow">for</span> (p = pkts; p < (pkts + plen); p += len) { 01057 len = <a class="code" href="rpmpgp_8c.html#a39">pgpPrtPkt</a>(p); 01058 <span class="keywordflow">if</span> (len <= 0) 01059 <span class="keywordflow">return</span> len; 01060 } 01061 <span class="keywordflow">return</span> 0; 01062 } 01063 <a name="l01064"></a><a class="code" href="rpmpgp_8c.html#a43">01064</a> <a class="code" href="rpmpgp_8h.html#a32">pgpArmor</a> <a class="code" href="rpmpgp_8c.html#a43">pgpReadPkts</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * fn, <span class="keyword">const</span> byte ** pkt, size_t * pktlen) 01065 { 01066 <span class="keyword">const</span> byte * b = NULL; 01067 ssize_t blen; 01068 <span class="keyword">const</span> <span class="keywordtype">char</span> * enc = NULL; 01069 <span class="keyword">const</span> <span class="keywordtype">char</span> * crcenc = NULL; 01070 byte * dec; 01071 byte * crcdec; 01072 size_t declen; 01073 size_t crclen; 01074 uint32 crcpkt, crc; 01075 <span class="keyword">const</span> <span class="keywordtype">char</span> * armortype = NULL; 01076 <span class="keywordtype">char</span> * t, * te; 01077 <span class="keywordtype">int</span> pstate = 0; 01078 <a class="code" href="rpmpgp_8h.html#a32">pgpArmor</a> ec = <a class="code" href="rpmpgp_8h.html#a176a133">PGPARMOR_ERROR</a>; <span class="comment">/* XXX assume failure */</span> 01079 <span class="keywordtype">int</span> rc; 01080 01081 rc = <a class="code" href="rpmio_8c.html#a88">rpmioSlurp</a>(fn, &b, &blen); 01082 <span class="keywordflow">if</span> (rc || b == NULL || blen <= 0) { 01083 <span class="keywordflow">goto</span> exit; 01084 } 01085 01086 <span class="keywordflow">if</span> (<a class="code" href="rpmpgp_8h.html#a167">pgpIsPkt</a>(b)) { 01087 <span class="preprocessor">#ifdef NOTYET </span><span class="comment">/* XXX ASCII Pubkeys only, please. */</span> 01088 ec = 0; <span class="comment">/* XXX fish out pkt type. */</span> 01089 <span class="preprocessor">#endif</span> 01090 <span class="preprocessor"></span> <span class="keywordflow">goto</span> exit; 01091 } 01092 01093 <span class="preprocessor">#define TOKEQ(_s, _tok) (!strncmp((_s), (_tok), sizeof(_tok)-1))</span> 01094 <span class="preprocessor"></span> 01095 <span class="keywordflow">for</span> (t = (<span class="keywordtype">char</span> *)b; t && *t; t = te) { 01096 <span class="keywordflow">if</span> ((te = strchr(t, <span class="charliteral">'\n'</span>)) == NULL) 01097 te = t + strlen(t); 01098 <span class="keywordflow">else</span> 01099 te++; 01100 01101 <span class="keywordflow">switch</span> (pstate) { 01102 <span class="keywordflow">case</span> 0: 01103 armortype = NULL; 01104 <span class="keywordflow">if</span> (!TOKEQ(t, <span class="stringliteral">"-----BEGIN PGP "</span>)) 01105 <span class="keywordflow">continue</span>; 01106 t += <span class="keyword">sizeof</span>(<span class="stringliteral">"-----BEGIN PGP "</span>)-1; 01107 01108 rc = <a class="code" href="rpmpgp_8h.html#a155">pgpValTok</a>(pgpArmorTbl, t, te); 01109 <span class="keywordflow">if</span> (rc < 0) 01110 <span class="keywordflow">goto</span> exit; 01111 <span class="keywordflow">if</span> (rc != <a class="code" href="rpmpgp_8h.html#a176a136">PGPARMOR_PUBKEY</a>) <span class="comment">/* XXX ASCII Pubkeys only, please. */</span> 01112 <span class="keywordflow">continue</span>; 01113 armortype = t; 01114 01115 t = te - (<span class="keyword">sizeof</span>(<span class="stringliteral">"-----\n"</span>)-1); 01116 <span class="keywordflow">if</span> (!TOKEQ(t, <span class="stringliteral">"-----\n"</span>)) 01117 <span class="keywordflow">continue</span>; 01118 *t = <span class="charliteral">'\0'</span>; 01119 pstate++; 01120 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 01121 <span class="keywordflow">case</span> 1: 01122 enc = NULL; 01123 rc = <a class="code" href="rpmpgp_8h.html#a155">pgpValTok</a>(pgpArmorKeyTbl, t, te); 01124 <span class="keywordflow">if</span> (rc >= 0) 01125 <span class="keywordflow">continue</span>; 01126 <span class="keywordflow">if</span> (*t != <span class="charliteral">'\n'</span>) { 01127 pstate = 0; 01128 <span class="keywordflow">continue</span>; 01129 } 01130 enc = te; <span class="comment">/* Start of encoded packets */</span> 01131 pstate++; 01132 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 01133 <span class="keywordflow">case</span> 2: 01134 crcenc = NULL; 01135 <span class="keywordflow">if</span> (*t != <span class="charliteral">'='</span>) 01136 <span class="keywordflow">continue</span>; 01137 *t++ = <span class="charliteral">'\0'</span>; <span class="comment">/* Terminate encoded packets */</span> 01138 crcenc = t; <span class="comment">/* Start of encoded crc */</span> 01139 pstate++; 01140 <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 01141 <span class="keywordflow">case</span> 3: 01142 pstate = 0; 01143 <span class="keywordflow">if</span> (!TOKEQ(t, <span class="stringliteral">"-----END PGP "</span>)) 01144 <span class="keywordflow">goto</span> exit; 01145 *t = <span class="charliteral">'\0'</span>; <span class="comment">/* Terminate encoded crc */</span> 01146 t += <span class="keyword">sizeof</span>(<span class="stringliteral">"-----END PGP "</span>)-1; 01147 01148 <span class="keywordflow">if</span> (armortype == NULL) <span class="comment">/* XXX can't happen */</span> 01149 <span class="keywordflow">continue</span>; 01150 rc = strncmp(t, armortype, strlen(armortype)); 01151 <span class="keywordflow">if</span> (rc) 01152 <span class="keywordflow">continue</span>; 01153 01154 t = te - (<span class="keyword">sizeof</span>(<span class="stringliteral">"-----\n"</span>)-1); 01155 <span class="keywordflow">if</span> (!TOKEQ(t, <span class="stringliteral">"-----\n"</span>)) 01156 <span class="keywordflow">goto</span> exit; 01157 01158 <span class="keywordflow">if</span> (b64decode(crcenc, (<span class="keywordtype">void</span> **)&crcdec, &crclen) != 0) 01159 <span class="keywordflow">continue</span>; 01160 crcpkt = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(crcdec, crclen); 01161 crcdec = <a class="code" href="poptint_8h.html#a14">_free</a>(crcdec); 01162 <span class="keywordflow">if</span> (b64decode(enc, (<span class="keywordtype">void</span> **)&dec, &declen) != 0) 01163 <span class="keywordflow">goto</span> exit; 01164 crc = <a class="code" href="rpmpgp_8h.html#a168">pgpCRC</a>(dec, declen); 01165 <span class="keywordflow">if</span> (crcpkt != crc) 01166 <span class="keywordflow">goto</span> exit; 01167 b = <a class="code" href="poptint_8h.html#a14">_free</a>(b); 01168 b = dec; 01169 blen = declen; 01170 ec = <a class="code" href="rpmpgp_8h.html#a176a136">PGPARMOR_PUBKEY</a>; <span class="comment">/* XXX ASCII Pubkeys only, please. */</span> 01171 <span class="keywordflow">goto</span> exit; 01172 <span class="comment">/*@notreached@*/</span> <span class="comment">/*@switchbreak@*/</span> <span class="keywordflow">break</span>; 01173 } 01174 } 01175 ec = <a class="code" href="rpmpgp_8h.html#a176a134">PGPARMOR_NONE</a>; 01176 01177 exit: 01178 <span class="keywordflow">if</span> (ec > <a class="code" href="rpmpgp_8h.html#a176a134">PGPARMOR_NONE</a> && pkt) 01179 *pkt = b; 01180 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (b != NULL) 01181 b = <a class="code" href="poptint_8h.html#a14">_free</a>(b); 01182 <span class="keywordflow">if</span> (pktlen) 01183 *pktlen = blen; 01184 <span class="keywordflow">return</span> ec; 01185 } </pre></div><hr><address style="align: right;"><small>Generated on Thu Sep 12 22:15:02 2002 for rpm by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.17 </small></address> </body> </html>