Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 2269bb274471fd2722517c2c0b740d7f > files > 284

rpm-devel-4.0.4-19mdk.i586.rpm

<!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> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </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 &amp;&amp; *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 &amp;&amp; *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 &amp;&amp; *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 &amp;&amp; *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 &gt; mbits ? lbits : mbits);
00325     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nbytes = ((nbits + 7) &gt;&gt; 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) &gt;&gt; 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 &gt; 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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00338 printf(<span class="stringliteral">"\t %s "</span>, pre), mp32println(mpn-&gt;size, mpn-&gt;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 &gt; 0) {
00348         i = <a class="code" href="rpmpgp_8h.html#a148">pgpLen</a>(p, &amp;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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &amp;&amp; _digp-&gt;<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-&gt;<a class="code" href="structpgpDigParams__s.html#m5">time</a>, p+1, <span class="keyword">sizeof</span>(_digp-&gt;<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(&amp;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 &amp;&amp; _digp-&gt;<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-&gt;<a class="code" href="structpgpDigParams__s.html#m11">signid</a>, p+1, <span class="keyword">sizeof</span>(_digp-&gt;<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 &lt; &amp;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 &gt;= 1) <span class="keywordflow">break</span>;
00454             <span class="comment">/*@-mods@*/</span>
00455             <span class="keywordflow">if</span> (_dig &amp;&amp;
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(&amp;_dig-&gt;<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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00462 printf(<span class="stringliteral">"\t  m**d = "</span>),  mp32println(_dig-&gt;<a class="code" href="structpgpDig__s.html#m18">c</a>.size, _dig-&gt;<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 &gt;= 2) <span class="keywordflow">break</span>;
00472             <span class="comment">/*@-mods@*/</span>
00473             <span class="keywordflow">if</span> (_dig &amp;&amp;
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, &amp;_dig-&gt;<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, &amp;_dig-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structpgpPktSigV3__s.html#m3">time</a>, <span class="keyword">sizeof</span>(v-&gt;<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(&amp;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-&gt;<a class="code" href="structpgpPktSigV3__s.html#m4">signid</a>, <span class="keyword">sizeof</span>(v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m4">signid</a>));
00527         plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>, <span class="keyword">sizeof</span>(v-&gt;<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-&gt;<a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>, <span class="keyword">sizeof</span>(v-&gt;<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 &amp;&amp; _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> == 0) {
00533             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m0">version</a>;
00534             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m9">hashlen</a> = v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a>;
00535             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m8">sigtype</a> = v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m2">sigtype</a>;
00536             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m1">hash</a> = memcpy(<a class="code" href="rpmmalloc_8c.html#a1">xmalloc</a>(v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a>), &amp;v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m2">sigtype</a>, v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m1">hashlen</a>);
00537             memcpy(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m5">time</a>, v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m3">time</a>, <span class="keyword">sizeof</span>(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m5">time</a>));
00538             memcpy(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m11">signid</a>, v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m4">signid</a>, <span class="keyword">sizeof</span>(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m11">signid</a>));
00539             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m5">pubkey_algo</a>;
00540             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m7">hash_algo</a> = v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m6">hash_algo</a>;
00541             memcpy(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m10">signhash16</a>, v-&gt;<a class="code" href="structpgpPktSigV3__s.html#m7">signhash16</a>, <span class="keyword">sizeof</span>(_digp-&gt;<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-&gt;<a class="code" href="structpgpPktSigV3__s.html#m5">pubkey_algo</a>, v-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structpgpPktSigV4__s.html#m1">sigtype</a>);
00555         <a class="code" href="rpmpgp_8c.html#a24">pgpPrtNL</a>();
00556 
00557         p = &amp;v-&gt;<a class="code" href="structpgpPktSigV4__s.html#m4">hashlen</a>[0];
00558         plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-&gt;<a class="code" href="structpgpPktSigV4__s.html#m4">hashlen</a>, <span class="keyword">sizeof</span>(v-&gt;<a class="code" href="structpgpPktSigV4__s.html#m4">hashlen</a>));
00559         p += <span class="keyword">sizeof</span>(v-&gt;<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> &amp;&amp; <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 &amp;&amp; _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> == 0) {
00565             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m9">hashlen</a> = plen;
00566             _digp-&gt;<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> &amp;&amp; <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 &amp;&amp; _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> == 0) {
00586             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-&gt;<a class="code" href="structpgpPktSigV4__s.html#m0">version</a>;
00587             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m8">sigtype</a> = v-&gt;<a class="code" href="structpgpPktSigV4__s.html#m1">sigtype</a>;
00588             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-&gt;<a class="code" href="structpgpPktSigV4__s.html#m2">pubkey_algo</a>;
00589             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m7">hash_algo</a> = v-&gt;<a class="code" href="structpgpPktSigV4__s.html#m3">hash_algo</a>;
00590             memcpy(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m10">signhash16</a>, p, <span class="keyword">sizeof</span>(_digp-&gt;<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-&gt;<a class="code" href="structpgpPktSigV4__s.html#m2">pubkey_algo</a>, v-&gt;<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 &lt; &amp;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 &gt;= 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(&amp;_dig-&gt;<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-&gt;<a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.n.modl;
00670                         uint32  nsize = _dig-&gt;<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-&gt;<a class="code" href="structpgpDigParams__s.html#m11">signid</a>, keyid, <span class="keyword">sizeof</span>(_digp-&gt;<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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00682 printf(<span class="stringliteral">"\t     n = "</span>),  mp32println(_dig-&gt;<a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.n.size, _dig-&gt;<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(&amp;_dig-&gt;<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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00687 printf(<span class="stringliteral">"\t     e = "</span>),  mp32println(_dig-&gt;<a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>.e.size, _dig-&gt;<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 &gt;= 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(&amp;_dig-&gt;<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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00703 printf(<span class="stringliteral">"\t     p = "</span>),  mp32println(_dig-&gt;<a class="code" href="structpgpDig__s.html#m9">p</a>.size, _dig-&gt;<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(&amp;_dig-&gt;<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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00708 printf(<span class="stringliteral">"\t     q = "</span>),  mp32println(_dig-&gt;<a class="code" href="structpgpDig__s.html#m10">q</a>.size, _dig-&gt;<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(&amp;_dig-&gt;<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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00713 printf(<span class="stringliteral">"\t     g = "</span>),  mp32println(_dig-&gt;<a class="code" href="structpgpDig__s.html#m11">g</a>.size, _dig-&gt;<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(&amp;_dig-&gt;<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> &amp;&amp; <a class="code" href="rpmpgp_8c.html#a2">_print</a>)
00718 printf(<span class="stringliteral">"\t     y = "</span>),  mp32println(_dig-&gt;<a class="code" href="structpgpDig__s.html#m12">y</a>.size, _dig-&gt;<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 &gt;= 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] &amp; 0xf)) &lt;&lt; ((p[11] &gt;&gt; 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 &lt; &amp;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-&gt;<a class="code" href="structpgpPktKeyV3__s.html#m3">pubkey_algo</a>);
00828         t = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-&gt;<a class="code" href="structpgpPktKeyV3__s.html#m1">time</a>, <span class="keyword">sizeof</span>(v-&gt;<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(&amp;t), (<span class="keywordtype">unsigned</span>)t);
00831         plen = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-&gt;<a class="code" href="structpgpPktKeyV3__s.html#m2">valid</a>, <span class="keyword">sizeof</span>(v-&gt;<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 &amp;&amp; _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m3">tag</a> == tag) {
00838             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-&gt;<a class="code" href="structpgpPktKeyV3__s.html#m0">version</a>;
00839             memcpy(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m5">time</a>, v-&gt;<a class="code" href="structpgpPktKeyV3__s.html#m1">time</a>, <span class="keyword">sizeof</span>(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m5">time</a>));
00840             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-&gt;<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-&gt;<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-&gt;<a class="code" href="structpgpPktKeyV4__s.html#m2">pubkey_algo</a>);
00852         t = <a class="code" href="rpmpgp_8h.html#a147">pgpGrab</a>(v-&gt;<a class="code" href="structpgpPktKeyV4__s.html#m1">time</a>, <span class="keyword">sizeof</span>(v-&gt;<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(&amp;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 &amp;&amp; _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m3">tag</a> == tag) {
00859             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m4">version</a> = v-&gt;<a class="code" href="structpgpPktKeyV4__s.html#m0">version</a>;
00860             memcpy(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m5">time</a>, v-&gt;<a class="code" href="structpgpPktKeyV4__s.html#m1">time</a>, <span class="keyword">sizeof</span>(_digp-&gt;<a class="code" href="structpgpDigParams__s.html#m5">time</a>));
00861             _digp-&gt;<a class="code" href="structpgpDigParams__s.html#m6">pubkey_algo</a> = v-&gt;<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-&gt;<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-&gt;<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-&gt;<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 &gt; 0) {
00902         <span class="keywordtype">int</span> j;
00903         <span class="keywordflow">if</span> (*h &gt;= <span class="charliteral">' '</span> &amp;&amp; *h &lt;= <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 &amp; 0x80))
00932         <span class="keywordflow">return</span> -1;
00933 
00934     <span class="keywordflow">if</span> (val &amp; 0x40) {
00935         tag = (val &amp; 0x3f);
00936         plen = <a class="code" href="rpmpgp_8h.html#a148">pgpLen</a>(pkt+1, &amp;hlen);
00937     } <span class="keywordflow">else</span> {
00938         tag = (val &gt;&gt; 2) &amp; 0xf;
00939         plen = (1 &lt;&lt; (val &amp; 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-&gt;<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-&gt;<a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m0">userid</a>);
01001         dig-&gt;<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-&gt;<a class="code" href="structpgpDig__s.html#m1">pubkey</a>.<a class="code" href="structpgpDigParams__s.html#m0">userid</a>);
01002         dig-&gt;<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-&gt;<a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m1">hash</a>);
01003         dig-&gt;<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-&gt;<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 &lt; 4; i++) {
01006             dig-&gt;<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-&gt;<a class="code" href="structpgpDig__s.html#m0">signature</a>.<a class="code" href="structpgpDigParams__s.html#m2">params</a>[i]);
01007             dig-&gt;<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-&gt;<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-&gt;<a class="code" href="structpgpDig__s.html#m6">md5ctx</a> != NULL)
01013             (void) <a class="code" href="group__rpmio.html#a18">rpmDigestFinal</a>(dig-&gt;<a class="code" href="structpgpDig__s.html#m6">md5ctx</a>, NULL, NULL, 0);
01014         <span class="comment">/*@=branchstate@*/</span>
01015         dig-&gt;<a class="code" href="structpgpDig__s.html#m6">md5ctx</a> = NULL;
01016         dig-&gt;<a class="code" href="structpgpDig__s.html#m7">md5</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-&gt;<a class="code" href="structpgpDig__s.html#m7">md5</a>);
01017 
01018         <span class="comment">/*@-branchstate@*/</span>
01019         <span class="keywordflow">if</span> (dig-&gt;<a class="code" href="structpgpDig__s.html#m3">sha1ctx</a> != NULL)
01020             (void) <a class="code" href="group__rpmio.html#a18">rpmDigestFinal</a>(dig-&gt;<a class="code" href="structpgpDig__s.html#m3">sha1ctx</a>, NULL, NULL, 0);
01021         <span class="comment">/*@=branchstate@*/</span>
01022         dig-&gt;<a class="code" href="structpgpDig__s.html#m3">sha1ctx</a> = NULL;
01023         dig-&gt;<a class="code" href="structpgpDig__s.html#m4">sha1</a> = <a class="code" href="poptint_8h.html#a14">_free</a>(dig-&gt;<a class="code" href="structpgpDig__s.html#m4">sha1</a>);
01024 
01025         mp32nfree(&amp;dig-&gt;<a class="code" href="structpgpDig__s.html#m13">hm</a>);
01026         mp32nfree(&amp;dig-&gt;<a class="code" href="structpgpDig__s.html#m14">r</a>);
01027         mp32nfree(&amp;dig-&gt;<a class="code" href="structpgpDig__s.html#m15">s</a>);
01028 
01029         (void) rsapkFree(&amp;dig-&gt;<a class="code" href="structpgpDig__s.html#m16">rsa_pk</a>);
01030         mp32nfree(&amp;dig-&gt;<a class="code" href="structpgpDig__s.html#m17">m</a>);
01031         mp32nfree(&amp;dig-&gt;<a class="code" href="structpgpDig__s.html#m18">c</a>);
01032         mp32nfree(&amp;dig-&gt;<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 &amp;&amp; (val &amp; 0x80)) {
01049         <a class="code" href="rpmpgp_8h.html#a4">pgpTag</a> tag = (val &amp; 0x40) ? (val &amp; 0x3f) : ((val &gt;&gt; 2) &amp; 0xf);
01050         _digp = (tag == <a class="code" href="rpmpgp_8h.html#a169a38">PGPTAG_SIGNATURE</a>) ? &amp;_dig-&gt;<a class="code" href="structpgpDig__s.html#m0">signature</a> : &amp;_dig-&gt;<a class="code" href="structpgpDig__s.html#m1">pubkey</a>;
01051         _digp-&gt;<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 &lt; (pkts + plen); p += len) {
01057         len = <a class="code" href="rpmpgp_8c.html#a39">pgpPrtPkt</a>(p);
01058         <span class="keywordflow">if</span> (len &lt;= 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, &amp;b, &amp;blen);
01082     <span class="keywordflow">if</span> (rc || b == NULL || blen &lt;= 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 &amp;&amp; *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 &lt; 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 &gt;= 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> **)&amp;crcdec, &amp;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> **)&amp;dec, &amp;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 &gt; <a class="code" href="rpmpgp_8h.html#a176a134">PGPARMOR_NONE</a> &amp;&amp; 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>