PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
md5.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define MD5_DIGEST_LENGTH   16
 
#define MD5_BLOCK_SIZE   64
 
#define MD5_PASSWD_CHARSET   "0123456789abcdef"
 
#define MD5_PASSWD_LEN   35
 

Functions

bool pg_md5_hash (const void *buff, size_t len, char *hexsum, const char **errstr)
 
bool pg_md5_binary (const void *buff, size_t len, void *outbuf, const char **errstr)
 
bool pg_md5_encrypt (const char *passwd, const char *salt, size_t salt_len, char *buf, const char **errstr)
 

Macro Definition Documentation

◆ MD5_BLOCK_SIZE

#define MD5_BLOCK_SIZE   64

Definition at line 22 of file md5.h.

◆ MD5_DIGEST_LENGTH

#define MD5_DIGEST_LENGTH   16

Definition at line 20 of file md5.h.

◆ MD5_PASSWD_CHARSET

#define MD5_PASSWD_CHARSET   "0123456789abcdef"

Definition at line 25 of file md5.h.

◆ MD5_PASSWD_LEN

#define MD5_PASSWD_LEN   35

Definition at line 26 of file md5.h.

Function Documentation

◆ pg_md5_binary()

bool pg_md5_binary ( const void *  buff,
size_t  len,
void *  outbuf,
const char **  errstr 
)

Definition at line 108 of file md5_common.c.

109{
111
112 *errstr = NULL;
114 if (ctx == NULL)
115 {
116 *errstr = pg_cryptohash_error(NULL); /* returns OOM */
117 return false;
118 }
119
120 if (pg_cryptohash_init(ctx) < 0 ||
121 pg_cryptohash_update(ctx, buff, len) < 0 ||
122 pg_cryptohash_final(ctx, outbuf, MD5_DIGEST_LENGTH) < 0)
123 {
124 *errstr = pg_cryptohash_error(ctx);
126 return false;
127 }
128
130 return true;
131}
const char * pg_cryptohash_error(pg_cryptohash_ctx *ctx)
Definition: cryptohash.c:254
int pg_cryptohash_update(pg_cryptohash_ctx *ctx, const uint8 *data, size_t len)
Definition: cryptohash.c:136
pg_cryptohash_ctx * pg_cryptohash_create(pg_cryptohash_type type)
Definition: cryptohash.c:74
int pg_cryptohash_init(pg_cryptohash_ctx *ctx)
Definition: cryptohash.c:100
void pg_cryptohash_free(pg_cryptohash_ctx *ctx)
Definition: cryptohash.c:238
int pg_cryptohash_final(pg_cryptohash_ctx *ctx, uint8 *dest, size_t len)
Definition: cryptohash.c:172
@ PG_MD5
Definition: cryptohash.h:21
#define MD5_DIGEST_LENGTH
Definition: md5.h:20
const void size_t len

References len, MD5_DIGEST_LENGTH, pg_cryptohash_create(), pg_cryptohash_error(), pg_cryptohash_final(), pg_cryptohash_free(), pg_cryptohash_init(), pg_cryptohash_update(), and PG_MD5.

Referenced by PerformRadiusTransaction().

◆ pg_md5_encrypt()

bool pg_md5_encrypt ( const char *  passwd,
const char *  salt,
size_t  salt_len,
char *  buf,
const char **  errstr 
)

Definition at line 145 of file md5_common.c.

147{
148 size_t passwd_len = strlen(passwd);
149
150 /* +1 here is just to avoid risk of unportable malloc(0) */
151 char *crypt_buf = malloc(passwd_len + salt_len + 1);
152 bool ret;
153
154 if (!crypt_buf)
155 {
156 *errstr = _("out of memory");
157 return false;
158 }
159
160 /*
161 * Place salt at the end because it may be known by users trying to crack
162 * the MD5 output.
163 */
164 memcpy(crypt_buf, passwd, passwd_len);
165 memcpy(crypt_buf + passwd_len, salt, salt_len);
166
167 strcpy(buf, "md5");
168 ret = pg_md5_hash(crypt_buf, passwd_len + salt_len, buf + 3, errstr);
169
170 free(crypt_buf);
171
172 return ret;
173}
#define _(x)
Definition: elog.c:91
#define free(a)
Definition: header.h:65
#define malloc(a)
Definition: header.h:50
bool pg_md5_hash(const void *buff, size_t len, char *hexsum, const char **errstr)
Definition: md5_common.c:74
static char * buf
Definition: pg_test_fsync.c:72

References _, buf, free, malloc, and pg_md5_hash().

Referenced by encrypt_password(), md5_crypt_verify(), pg_password_sendauth(), plain_crypt_verify(), PQencryptPassword(), and PQencryptPasswordConn().

◆ pg_md5_hash()

bool pg_md5_hash ( const void *  buff,
size_t  len,
char *  hexsum,
const char **  errstr 
)

Definition at line 74 of file md5_common.c.

75{
78
79 *errstr = NULL;
81 if (ctx == NULL)
82 {
83 *errstr = pg_cryptohash_error(NULL); /* returns OOM */
84 return false;
85 }
86
87 if (pg_cryptohash_init(ctx) < 0 ||
88 pg_cryptohash_update(ctx, buff, len) < 0 ||
89 pg_cryptohash_final(ctx, sum, sizeof(sum)) < 0)
90 {
91 *errstr = pg_cryptohash_error(ctx);
93 return false;
94 }
95
96 bytesToHex(sum, hexsum);
98 return true;
99}
uint8_t uint8
Definition: c.h:500
static void bytesToHex(uint8 b[16], char *s)
Definition: md5_common.c:28

References bytesToHex(), len, MD5_DIGEST_LENGTH, pg_cryptohash_create(), pg_cryptohash_error(), pg_cryptohash_final(), pg_cryptohash_free(), pg_cryptohash_init(), pg_cryptohash_update(), and PG_MD5.

Referenced by md5_bytea(), md5_text(), and pg_md5_encrypt().