On Tue, Sep 24, 2013 at 11:20:55PM +0100, Richard Neill wrote:
> I'm sorry about that: I think I need to correct my proposed
> correction!  I think I've been writing too much C recently, and so I
> foolishly mis-read that as returning pswhash, rather than returning
> the truth of the comparison.
> 
> What I meant to write, for clarity, was:
> 
> SELECT (pswhash = crypt('entered password', pswhash)) AS pswmatch FROM ... ;
> 
> which would make it obvious that we're returning the boolean named pswmatch.
> 
> >
> >>[Also, should the default example perhaps use gen_salt('bf'), as opposed to
> >>gen_salt('md5') ?]
> >
> >This, however, might be a good idea. People should of course always
> >read the documentation, but having the examples including the "best
> >practice" would probably be a good idea.
> 
> Incidentally, there are 2 other things that confused me in this section.
> 
> 1. Table F-18. Supported algorithms for crypt()  has a column
> labelled "max password length".  It would perhaps also be useful to
> know the size of column needed to store the crypted password (my
> original crypt using md5 easily fits in a varchar(70), whereas using
> bf needs the column to be varchar(100).)
> 
> 
> 2. Table F-20. Hash algorithm speeds
> 
> What's the difference here between "crypt-md5" and "md5" ?
> 
> If I've rightly read this, the algorithm named "md5" in the crypt()
> documentation is named "crypt-md5" here, whereas Table F20's "md5"
> algorithm seems to refer to something else - probably the "normal"
> version of md5.
> 
> If so, it would be clearer to write that the last 2 lines ("md5" and
> "sha1") are for comparison only, and refer to the speed of doing an
> ordinary md5/sha1 sum, rather than the md5-variant of crypt().
> 
> 
> Anyway, thanks again for your help - Postgres is a wonderful system,
> which I've found to be repeatedly useful.

Based on your report, I have developed the attached doc patch which
clarifies when MD5 hash is being referenced, and when MD5 crypt is.  I
have also added your other suggestions.

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/doc/src/sgml/pgcrypto.sgml b/doc/src/sgml/pgcrypto.sgml
new file mode 100644
index a0eead7..976c7db
*** a/doc/src/sgml/pgcrypto.sgml
--- b/doc/src/sgml/pgcrypto.sgml
*************** hmac(data bytea, key text, type text) re
*** 95,102 ****
    </para>
  
    <para>
!    The algorithms in <function>crypt()</> differ from usual hashing algorithms
!    like MD5 or SHA1 in the following respects:
    </para>
  
    <orderedlist>
--- 95,102 ----
    </para>
  
    <para>
!    The algorithms in <function>crypt()</> differ from the usual 
!    MD5 or SHA1 hashing algorithms in the following respects:
    </para>
  
    <orderedlist>
*************** hmac(data bytea, key text, type text) re
*** 142,147 ****
--- 142,148 ----
        <entry>Max Password Length</entry>
        <entry>Adaptive?</entry>
        <entry>Salt Bits</entry>
+       <entry>Output length</entry>
        <entry>Description</entry>
       </row>
      </thead>
*************** hmac(data bytea, key text, type text) re
*** 151,156 ****
--- 152,158 ----
        <entry>72</entry>
        <entry>yes</entry>
        <entry>128</entry>
+       <entry>60</entry>
        <entry>Blowfish-based, variant 2a</entry>
       </row>
       <row>
*************** hmac(data bytea, key text, type text) re
*** 158,163 ****
--- 160,166 ----
        <entry>unlimited</entry>
        <entry>no</entry>
        <entry>48</entry>
+       <entry>34</entry>
        <entry>MD5-based crypt</entry>
       </row>
       <row>
*************** hmac(data bytea, key text, type text) re
*** 165,170 ****
--- 168,174 ----
        <entry>8</entry>
        <entry>yes</entry>
        <entry>24</entry>
+       <entry>20</entry>
        <entry>Extended DES</entry>
       </row>
       <row>
*************** hmac(data bytea, key text, type text) re
*** 172,177 ****
--- 176,182 ----
        <entry>8</entry>
        <entry>no</entry>
        <entry>12</entry>
+       <entry>13</entry>
        <entry>Original UNIX crypt</entry>
       </row>
      </tbody>
*************** UPDATE ... SET pswhash = crypt('new pass
*** 205,211 ****
     <para>
      Example of authentication:
  <programlisting>
! SELECT pswhash = crypt('entered password', pswhash) FROM ... ;
  </programlisting>
      This returns <literal>true</> if the entered password is correct.
     </para>
--- 210,216 ----
     <para>
      Example of authentication:
  <programlisting>
! SELECT (pswhash = crypt('entered password', pswhash)) AS pswmatch FROM ... ;
  </programlisting>
      This returns <literal>true</> if the entered password is correct.
     </para>
*************** gen_salt(type text [, iter_count integer
*** 353,359 ****
         <entry>12 years</entry>
        </row>
        <row>
!        <entry><literal>md5</></entry>
         <entry>2345086</entry>
         <entry>1 day</entry>
         <entry>3 years</entry>
--- 358,364 ----
         <entry>12 years</entry>
        </row>
        <row>
!        <entry><literal>md5 hash</></entry>
         <entry>2345086</entry>
         <entry>1 day</entry>
         <entry>3 years</entry>
*************** gen_salt(type text [, iter_count integer
*** 380,386 ****
      </listitem>
      <listitem>
       <para>
!       <literal>md5</> numbers are from mdcrack 1.2.
       </para>
      </listitem>
      <listitem>
--- 385,391 ----
      </listitem>
      <listitem>
       <para>
!       <literal>md5 hash</> numbers are from mdcrack 1.2.
       </para>
      </listitem>
      <listitem>
*************** gen_random_bytes(count integer) returns
*** 1343,1349 ****
        <entry>OpenBSD sys/crypto</entry>
       </row>
       <row>
!       <entry>MD5 and SHA1</entry>
        <entry>WIDE Project</entry>
        <entry>KAME kame/sys/crypto</entry>
       </row>
--- 1348,1354 ----
        <entry>OpenBSD sys/crypto</entry>
       </row>
       <row>
!       <entry>MD5 hash and SHA1</entry>
        <entry>WIDE Project</entry>
        <entry>KAME kame/sys/crypto</entry>
       </row>
-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to