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

Go to the source code of this file.

Typedefs

typedef struct pg_cryptohash_ctx pg_cryptohash_ctx
 

Enumerations

enum  pg_cryptohash_type {
  PG_MD5 = 0 , PG_SHA1 , PG_SHA224 , PG_SHA256 ,
  PG_SHA384 , PG_SHA512
}
 

Functions

pg_cryptohash_ctxpg_cryptohash_create (pg_cryptohash_type type)
 
int pg_cryptohash_init (pg_cryptohash_ctx *ctx)
 
int pg_cryptohash_update (pg_cryptohash_ctx *ctx, const uint8 *data, size_t len)
 
int pg_cryptohash_final (pg_cryptohash_ctx *ctx, uint8 *dest, size_t len)
 
void pg_cryptohash_free (pg_cryptohash_ctx *ctx)
 
const char * pg_cryptohash_error (pg_cryptohash_ctx *ctx)
 

Typedef Documentation

◆ pg_cryptohash_ctx

Definition at line 30 of file cryptohash.h.

Enumeration Type Documentation

◆ pg_cryptohash_type

Enumerator
PG_MD5 
PG_SHA1 
PG_SHA224 
PG_SHA256 
PG_SHA384 
PG_SHA512 

Definition at line 19 of file cryptohash.h.

20{
21 PG_MD5 = 0,
22 PG_SHA1,
pg_cryptohash_type
Definition: cryptohash.h:20
@ PG_SHA512
Definition: cryptohash.h:26
@ PG_SHA224
Definition: cryptohash.h:23
@ PG_SHA384
Definition: cryptohash.h:25
@ PG_SHA1
Definition: cryptohash.h:22
@ PG_SHA256
Definition: cryptohash.h:24
@ PG_MD5
Definition: cryptohash.h:21

Function Documentation

◆ pg_cryptohash_create()

pg_cryptohash_ctx * pg_cryptohash_create ( pg_cryptohash_type  type)

Definition at line 74 of file cryptohash.c.

75{
77
78 /*
79 * Note that this always allocates enough space for the largest hash. A
80 * smaller allocation would be enough for md5, sha224 and sha256, but the
81 * small extra amount of memory does not make it worth complicating this
82 * code.
83 */
84 ctx = ALLOC(sizeof(pg_cryptohash_ctx));
85 if (ctx == NULL)
86 return NULL;
87
88 memset(ctx, 0, sizeof(pg_cryptohash_ctx));
89 ctx->type = type;
91 return ctx;
92}
@ PG_CRYPTOHASH_ERROR_NONE
Definition: cryptohash.c:46
#define ALLOC(size)
Definition: cryptohash.c:36
pg_cryptohash_errno error
Definition: cryptohash.c:54
pg_cryptohash_type type
Definition: cryptohash.c:53
const char * type

References ALLOC, CurrentResourceOwner, ereport, errcode(), errmsg(), pg_cryptohash_ctx::error, ERROR, pg_cryptohash_ctx::errreason, pg_cryptohash_ctx::evpctx, explicit_bzero(), FREE, PG_CRYPTOHASH_ERROR_NONE, ResourceOwnerEnlarge(), ResourceOwnerRememberCryptoHash(), pg_cryptohash_ctx::resowner, type, and pg_cryptohash_ctx::type.

Referenced by cryptohash_internal(), InitializeBackupManifest(), json_parse_manifest_incremental_init(), pg_checksum_init(), pg_hmac_create(), pg_hmac_init(), pg_md5_binary(), pg_md5_hash(), scram_H(), scram_mock_salt(), uuid_generate_internal(), and verify_manifest_checksum().

◆ pg_cryptohash_error()

const char * pg_cryptohash_error ( pg_cryptohash_ctx ctx)

Definition at line 254 of file cryptohash.c.

255{
256 /*
257 * This implementation would never fail because of an out-of-memory error,
258 * except when creating the context.
259 */
260 if (ctx == NULL)
261 return _("out of memory");
262
263 switch (ctx->error)
264 {
266 return _("success");
268 return _("destination buffer too small");
269 }
270
271 Assert(false);
272 return _("success");
273}
@ PG_CRYPTOHASH_ERROR_DEST_LEN
Definition: cryptohash.c:47
#define _(x)
Definition: elog.c:91
Assert(PointerIsAligned(start, uint64))

References _, Assert(), pg_cryptohash_ctx::error, pg_cryptohash_ctx::errreason, PG_CRYPTOHASH_ERROR_DEST_LEN, PG_CRYPTOHASH_ERROR_NONE, and PG_CRYPTOHASH_ERROR_OPENSSL.

Referenced by AppendStringToManifest(), cryptohash_internal(), InitializeBackupManifest(), pg_hmac_final(), pg_hmac_init(), pg_hmac_update(), pg_md5_binary(), pg_md5_hash(), scram_H(), SendBackupManifest(), and uuid_generate_internal().

◆ pg_cryptohash_final()

int pg_cryptohash_final ( pg_cryptohash_ctx ctx,
uint8 dest,
size_t  len 
)

Definition at line 172 of file cryptohash.c.

173{
174 if (ctx == NULL)
175 return -1;
176
177 switch (ctx->type)
178 {
179 case PG_MD5:
181 {
183 return -1;
184 }
185 pg_md5_final(&ctx->data.md5, dest);
186 break;
187 case PG_SHA1:
189 {
191 return -1;
192 }
193 pg_sha1_final(&ctx->data.sha1, dest);
194 break;
195 case PG_SHA224:
197 {
199 return -1;
200 }
202 break;
203 case PG_SHA256:
205 {
207 return -1;
208 }
210 break;
211 case PG_SHA384:
213 {
215 return -1;
216 }
218 break;
219 case PG_SHA512:
221 {
223 return -1;
224 }
226 break;
227 }
228
229 return 0;
230}
void pg_md5_final(pg_md5_ctx *ctx, uint8 *dest)
Definition: md5.c:432
#define MD5_DIGEST_LENGTH
Definition: md5.h:20
const void size_t len
void pg_sha1_final(pg_sha1_ctx *ctx, uint8 *dest)
Definition: sha1.c:365
#define SHA1_DIGEST_LENGTH
Definition: sha1.h:17
void pg_sha512_final(pg_sha512_ctx *context, uint8 *digest)
Definition: sha2.c:905
void pg_sha256_final(pg_sha256_ctx *context, uint8 *digest)
Definition: sha2.c:577
void pg_sha224_final(pg_sha224_ctx *context, uint8 *digest)
Definition: sha2.c:994
void pg_sha384_final(pg_sha384_ctx *context, uint8 *digest)
Definition: sha2.c:950
#define PG_SHA256_DIGEST_LENGTH
Definition: sha2.h:23
#define PG_SHA384_DIGEST_LENGTH
Definition: sha2.h:26
#define PG_SHA512_DIGEST_LENGTH
Definition: sha2.h:29
#define PG_SHA224_DIGEST_LENGTH
Definition: sha2.h:20
pg_md5_ctx md5
Definition: cryptohash.c:58
pg_sha384_ctx sha384
Definition: cryptohash.c:62
pg_sha1_ctx sha1
Definition: cryptohash.c:59
pg_sha256_ctx sha256
Definition: cryptohash.c:61
pg_sha512_ctx sha512
Definition: cryptohash.c:63
pg_sha224_ctx sha224
Definition: cryptohash.c:60
union pg_cryptohash_ctx::@39 data

References pg_cryptohash_ctx::data, generate_unaccent_rules::dest, pg_cryptohash_ctx::error, pg_cryptohash_ctx::errreason, pg_cryptohash_ctx::evpctx, len, pg_cryptohash_ctx::md5, MD5_DIGEST_LENGTH, PG_CRYPTOHASH_ERROR_DEST_LEN, PG_CRYPTOHASH_ERROR_OPENSSL, PG_MD5, pg_md5_final(), PG_SHA1, pg_sha1_final(), PG_SHA224, PG_SHA224_DIGEST_LENGTH, pg_sha224_final(), PG_SHA256, PG_SHA256_DIGEST_LENGTH, pg_sha256_final(), PG_SHA384, PG_SHA384_DIGEST_LENGTH, pg_sha384_final(), PG_SHA512, PG_SHA512_DIGEST_LENGTH, pg_sha512_final(), pg_cryptohash_ctx::sha1, SHA1_DIGEST_LENGTH, pg_cryptohash_ctx::sha224, pg_cryptohash_ctx::sha256, pg_cryptohash_ctx::sha384, pg_cryptohash_ctx::sha512, SSLerrmessage(), and pg_cryptohash_ctx::type.

Referenced by cryptohash_internal(), pg_checksum_final(), pg_hmac_final(), pg_hmac_init(), pg_md5_binary(), pg_md5_hash(), scram_H(), scram_mock_salt(), SendBackupManifest(), uuid_generate_internal(), and verify_manifest_checksum().

◆ pg_cryptohash_free()

◆ pg_cryptohash_init()

int pg_cryptohash_init ( pg_cryptohash_ctx ctx)

Definition at line 100 of file cryptohash.c.

101{
102 if (ctx == NULL)
103 return -1;
104
105 switch (ctx->type)
106 {
107 case PG_MD5:
108 pg_md5_init(&ctx->data.md5);
109 break;
110 case PG_SHA1:
111 pg_sha1_init(&ctx->data.sha1);
112 break;
113 case PG_SHA224:
115 break;
116 case PG_SHA256:
118 break;
119 case PG_SHA384:
121 break;
122 case PG_SHA512:
124 break;
125 }
126
127 return 0;
128}
void pg_md5_init(pg_md5_ctx *ctx)
Definition: md5.c:382
void pg_sha1_init(pg_sha1_ctx *ctx)
Definition: sha1.c:316
void pg_sha384_init(pg_sha384_ctx *context)
Definition: sha2.c:934
void pg_sha256_init(pg_sha256_ctx *context)
Definition: sha2.c:279
void pg_sha512_init(pg_sha512_ctx *context)
Definition: sha2.c:605
void pg_sha224_init(pg_sha224_ctx *context)
Definition: sha2.c:978

References pg_cryptohash_ctx::data, pg_cryptohash_ctx::error, pg_cryptohash_ctx::errreason, pg_cryptohash_ctx::evpctx, pg_cryptohash_ctx::md5, PG_CRYPTOHASH_ERROR_OPENSSL, PG_MD5, pg_md5_init(), PG_SHA1, pg_sha1_init(), PG_SHA224, pg_sha224_init(), PG_SHA256, pg_sha256_init(), PG_SHA384, pg_sha384_init(), PG_SHA512, pg_sha512_init(), pg_cryptohash_ctx::sha1, pg_cryptohash_ctx::sha224, pg_cryptohash_ctx::sha256, pg_cryptohash_ctx::sha384, pg_cryptohash_ctx::sha512, SSLerrmessage(), and pg_cryptohash_ctx::type.

Referenced by cryptohash_internal(), InitializeBackupManifest(), json_parse_manifest_incremental_init(), pg_checksum_init(), pg_hmac_final(), pg_hmac_init(), pg_md5_binary(), pg_md5_hash(), scram_H(), scram_mock_salt(), uuid_generate_internal(), and verify_manifest_checksum().

◆ pg_cryptohash_update()

int pg_cryptohash_update ( pg_cryptohash_ctx ctx,
const uint8 data,
size_t  len 
)

Definition at line 136 of file cryptohash.c.

137{
138 if (ctx == NULL)
139 return -1;
140
141 switch (ctx->type)
142 {
143 case PG_MD5:
144 pg_md5_update(&ctx->data.md5, data, len);
145 break;
146 case PG_SHA1:
148 break;
149 case PG_SHA224:
151 break;
152 case PG_SHA256:
154 break;
155 case PG_SHA384:
157 break;
158 case PG_SHA512:
160 break;
161 }
162
163 return 0;
164}
void pg_md5_update(pg_md5_ctx *ctx, const uint8 *data, size_t len)
Definition: md5.c:400
const void * data
void pg_sha1_update(pg_sha1_ctx *ctx, const uint8 *data, size_t len)
Definition: sha1.c:332
void pg_sha512_update(pg_sha512_ctx *context, const uint8 *data, size_t len)
Definition: sha2.c:802
void pg_sha224_update(pg_sha224_ctx *context, const uint8 *data, size_t len)
Definition: sha2.c:988
void pg_sha384_update(pg_sha384_ctx *context, const uint8 *data, size_t len)
Definition: sha2.c:944
void pg_sha256_update(pg_sha256_ctx *context, const uint8 *data, size_t len)
Definition: sha2.c:476

References pg_cryptohash_ctx::data, data, pg_cryptohash_ctx::error, pg_cryptohash_ctx::errreason, pg_cryptohash_ctx::evpctx, len, pg_cryptohash_ctx::md5, PG_CRYPTOHASH_ERROR_OPENSSL, PG_MD5, pg_md5_update(), PG_SHA1, pg_sha1_update(), PG_SHA224, pg_sha224_update(), PG_SHA256, pg_sha256_update(), PG_SHA384, pg_sha384_update(), PG_SHA512, pg_sha512_update(), pg_cryptohash_ctx::sha1, pg_cryptohash_ctx::sha224, pg_cryptohash_ctx::sha256, pg_cryptohash_ctx::sha384, pg_cryptohash_ctx::sha512, SSLerrmessage(), and pg_cryptohash_ctx::type.

Referenced by AppendStringToManifest(), cryptohash_internal(), json_parse_manifest_incremental_chunk(), pg_checksum_update(), pg_hmac_final(), pg_hmac_init(), pg_hmac_update(), pg_md5_binary(), pg_md5_hash(), scram_H(), scram_mock_salt(), uuid_generate_internal(), and verify_manifest_checksum().