#include "postgres.h"#include "mb/pg_wchar.h"#include "utils/builtins.h"#include "mbuf.h"#include "px.h"#include "pgp.h"
Go to the source code of this file.
Data Structures | |
| struct | debug_expect |
Defines | |
| #define | EX_MSG(arg) |
| #define | EX_CHECK(arg) |
Functions | |
| Datum | pgp_sym_encrypt_text (PG_FUNCTION_ARGS) |
| Datum | pgp_sym_encrypt_bytea (PG_FUNCTION_ARGS) |
| Datum | pgp_sym_decrypt_text (PG_FUNCTION_ARGS) |
| Datum | pgp_sym_decrypt_bytea (PG_FUNCTION_ARGS) |
| Datum | pgp_pub_encrypt_text (PG_FUNCTION_ARGS) |
| Datum | pgp_pub_encrypt_bytea (PG_FUNCTION_ARGS) |
| Datum | pgp_pub_decrypt_text (PG_FUNCTION_ARGS) |
| Datum | pgp_pub_decrypt_bytea (PG_FUNCTION_ARGS) |
| Datum | pgp_key_id_w (PG_FUNCTION_ARGS) |
| Datum | pg_armor (PG_FUNCTION_ARGS) |
| Datum | pg_dearmor (PG_FUNCTION_ARGS) |
| PG_FUNCTION_INFO_V1 (pgp_sym_encrypt_bytea) | |
| PG_FUNCTION_INFO_V1 (pgp_sym_encrypt_text) | |
| PG_FUNCTION_INFO_V1 (pgp_sym_decrypt_bytea) | |
| PG_FUNCTION_INFO_V1 (pgp_sym_decrypt_text) | |
| PG_FUNCTION_INFO_V1 (pgp_pub_encrypt_bytea) | |
| PG_FUNCTION_INFO_V1 (pgp_pub_encrypt_text) | |
| PG_FUNCTION_INFO_V1 (pgp_pub_decrypt_bytea) | |
| PG_FUNCTION_INFO_V1 (pgp_pub_decrypt_text) | |
| PG_FUNCTION_INFO_V1 (pgp_key_id_w) | |
| PG_FUNCTION_INFO_V1 (pg_armor) | |
| PG_FUNCTION_INFO_V1 (pg_dearmor) | |
| static void | add_block_entropy (PX_MD *md, text *data) |
| static void | add_entropy (text *data1, text *data2, text *data3) |
| static text * | convert_charset (text *src, int cset_from, int cset_to) |
| static text * | convert_from_utf8 (text *src) |
| static text * | convert_to_utf8 (text *src) |
| static void | clear_and_pfree (text *p) |
| static void | fill_expect (struct debug_expect *ex, int text_mode) |
| static void | check_expect (PGP_Context *ctx, struct debug_expect *ex) |
| static void | show_debug (const char *msg) |
| static int | set_arg (PGP_Context *ctx, char *key, char *val, struct debug_expect *ex) |
| static char * | getword (char *p, char **res_p, int *res_len) |
| static char * | downcase_convert (const uint8 *s, int len) |
| static int | parse_args (PGP_Context *ctx, uint8 *args, int arg_len, struct debug_expect *ex) |
| static MBuf * | create_mbuf_from_vardata (text *data) |
| static void | init_work (PGP_Context **ctx_p, int is_text, text *args, struct debug_expect *ex) |
| static bytea * | encrypt_internal (int is_pubenc, int is_text, text *data, text *key, text *args) |
| static bytea * | decrypt_internal (int is_pubenc, int need_text, text *data, text *key, text *keypsw, text *args) |
| #define EX_CHECK | ( | arg | ) |
Definition at line 211 of file pgp-pgsql.c.
Referenced by check_expect().
| #define EX_MSG | ( | arg | ) |
ereport(NOTICE, (errmsg( \ "pgp_decrypt: unexpected %s: expected %d got %d", \ CppAsString(arg), ex->arg, ctx->arg)))
Definition at line 206 of file pgp-pgsql.c.
Definition at line 80 of file pgp-pgsql.c.
References px_add_entropy(), px_md_finish, px_md_reset, px_md_update, VARDATA, VARHDRSZ, and VARSIZE.
Referenced by add_entropy().
{
uint8 sha1[20];
px_md_reset(md);
px_md_update(md, (uint8 *) VARDATA(data), VARSIZE(data) - VARHDRSZ);
px_md_finish(md, sha1);
px_add_entropy(sha1, 20);
memset(sha1, 0, 20);
}
Definition at line 98 of file pgp-pgsql.c.
References add_block_entropy(), px_find_digest(), px_get_random_bytes(), and px_md_free.
Referenced by decrypt_internal(), and encrypt_internal().
{
PX_MD *md;
uint8 rnd[3];
if (!data1 && !data2 && !data3)
return;
if (px_get_random_bytes(rnd, 3) < 0)
return;
if (px_find_digest("sha1", &md) < 0)
return;
/*
* Try to make the feeding unpredictable.
*
* Prefer data over keys, as it's rather likely that key is same in
* several calls.
*/
/* chance: 7/8 */
if (data1 && rnd[0] >= 32)
add_block_entropy(md, data1);
/* chance: 5/8 */
if (data2 && rnd[1] >= 160)
add_block_entropy(md, data2);
/* chance: 5/8 */
if (data3 && rnd[2] >= 160)
add_block_entropy(md, data3);
px_md_free(md);
memset(rnd, 0, sizeof(rnd));
}
| static void check_expect | ( | PGP_Context * | ctx, | |
| struct debug_expect * | ex | |||
| ) | [static] |
Definition at line 216 of file pgp-pgsql.c.
References EX_CHECK, and PGP_Context::use_sess_key.
Referenced by decrypt_internal().
| static void clear_and_pfree | ( | text * | p | ) | [static] |
Definition at line 168 of file pgp-pgsql.c.
References pfree(), and VARSIZE.
Referenced by decrypt_internal(), and encrypt_internal().
Definition at line 139 of file pgp-pgsql.c.
References cstring_to_text(), pfree(), pg_do_encoding_conversion(), VARDATA, and VARSIZE.
Referenced by convert_from_utf8(), and convert_to_utf8().
{
int src_len = VARSIZE(src) - VARHDRSZ;
unsigned char *dst;
unsigned char *csrc = (unsigned char *) VARDATA(src);
text *res;
dst = pg_do_encoding_conversion(csrc, src_len, cset_from, cset_to);
if (dst == csrc)
return src;
res = cstring_to_text((char *) dst);
pfree(dst);
return res;
}
Definition at line 156 of file pgp-pgsql.c.
References convert_charset(), GetDatabaseEncoding(), and PG_UTF8.
Referenced by decrypt_internal().
{
return convert_charset(src, PG_UTF8, GetDatabaseEncoding());
}
Definition at line 162 of file pgp-pgsql.c.
References convert_charset(), GetDatabaseEncoding(), and PG_UTF8.
Referenced by encrypt_internal().
{
return convert_charset(src, GetDatabaseEncoding(), PG_UTF8);
}
Definition at line 401 of file pgp-pgsql.c.
References mbuf_create_from_data(), VARDATA, VARHDRSZ, and VARSIZE.
Referenced by decrypt_internal(), encrypt_internal(), and pgp_key_id_w().
{
return mbuf_create_from_data((uint8 *) VARDATA(data),
VARSIZE(data) - VARHDRSZ);
}
| static bytea* decrypt_internal | ( | int | is_pubenc, | |
| int | need_text, | |||
| text * | data, | |||
| text * | key, | |||
| text * | keypsw, | |||
| text * | args | |||
| ) | [static] |
Definition at line 526 of file pgp-pgsql.c.
References add_entropy(), check_expect(), clear_and_pfree(), convert_from_utf8(), create_mbuf_from_vardata(), ereport, errcode(), errmsg(), ERROR, debug_expect::expect, init_work(), mbuf_append(), mbuf_create(), mbuf_create_from_data(), mbuf_free(), mbuf_steal_data(), NULL, pgp_decrypt(), pgp_free(), pgp_get_unicode_mode(), pgp_set_pubkey(), pgp_set_symkey(), px_set_debug_handler(), px_strerror(), SET_VARSIZE, VARDATA, VARHDRSZ, and VARSIZE.
Referenced by pgp_pub_decrypt_bytea(), pgp_pub_decrypt_text(), pgp_sym_decrypt_bytea(), and pgp_sym_decrypt_text().
{
int err;
MBuf *src = NULL,
*dst = NULL;
uint8 tmp[VARHDRSZ];
uint8 *restmp;
bytea *res;
int res_len;
PGP_Context *ctx = NULL;
struct debug_expect ex;
int got_unicode = 0;
init_work(&ctx, need_text, args, &ex);
src = mbuf_create_from_data((uint8 *) VARDATA(data),
VARSIZE(data) - VARHDRSZ);
dst = mbuf_create(VARSIZE(data) + 2048);
/*
* reserve room for header
*/
mbuf_append(dst, tmp, VARHDRSZ);
/*
* set key
*/
if (is_pubenc)
{
uint8 *psw = NULL;
int psw_len = 0;
MBuf *kbuf;
if (keypsw)
{
psw = (uint8 *) VARDATA(keypsw);
psw_len = VARSIZE(keypsw) - VARHDRSZ;
}
kbuf = create_mbuf_from_vardata(key);
err = pgp_set_pubkey(ctx, kbuf, psw, psw_len, 1);
mbuf_free(kbuf);
}
else
err = pgp_set_symkey(ctx, (uint8 *) VARDATA(key),
VARSIZE(key) - VARHDRSZ);
/*
* decrypt
*/
if (err >= 0)
err = pgp_decrypt(ctx, src, dst);
/*
* failed?
*/
if (err < 0)
goto out;
if (ex.expect)
check_expect(ctx, &ex);
/* remember the setting */
got_unicode = pgp_get_unicode_mode(ctx);
out:
if (src)
mbuf_free(src);
if (ctx)
pgp_free(ctx);
if (err)
{
px_set_debug_handler(NULL);
if (dst)
mbuf_free(dst);
ereport(ERROR,
(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
errmsg("%s", px_strerror(err))));
}
res_len = mbuf_steal_data(dst, &restmp);
mbuf_free(dst);
/* res_len includes VARHDRSZ */
res = (bytea *) restmp;
SET_VARSIZE(res, res_len);
if (need_text && got_unicode)
{
text *utf = convert_from_utf8(res);
if (utf != res)
{
clear_and_pfree(res);
res = utf;
}
}
px_set_debug_handler(NULL);
/*
* add successful decryptions also into RNG
*/
add_entropy(res, key, keypsw);
return res;
}
| static char* downcase_convert | ( | const uint8 * | s, | |
| int | len | |||
| ) | [static] |
Definition at line 345 of file pgp-pgsql.c.
Referenced by parse_args().
| static bytea* encrypt_internal | ( | int | is_pubenc, | |
| int | is_text, | |||
| text * | data, | |||
| text * | key, | |||
| text * | args | |||
| ) | [static] |
Definition at line 433 of file pgp-pgsql.c.
References add_entropy(), clear_and_pfree(), convert_to_utf8(), create_mbuf_from_vardata(), debug_expect::debug, ereport, errcode(), errmsg(), ERROR, init_work(), mbuf_append(), mbuf_create(), mbuf_free(), mbuf_steal_data(), NULL, pgp_encrypt(), pgp_free(), pgp_get_unicode_mode(), pgp_set_pubkey(), pgp_set_symkey(), px_set_debug_handler(), px_strerror(), SET_VARSIZE, VARDATA, VARHDRSZ, and VARSIZE.
Referenced by pgp_pub_encrypt_bytea(), pgp_pub_encrypt_text(), pgp_sym_encrypt_bytea(), and pgp_sym_encrypt_text().
{
MBuf *src,
*dst;
uint8 tmp[VARHDRSZ];
uint8 *restmp;
bytea *res;
int res_len;
PGP_Context *ctx;
int err;
struct debug_expect ex;
text *tmp_data = NULL;
/*
* Add data and key info RNG.
*/
add_entropy(data, key, NULL);
init_work(&ctx, is_text, args, &ex);
if (is_text && pgp_get_unicode_mode(ctx))
{
tmp_data = convert_to_utf8(data);
if (tmp_data == data)
tmp_data = NULL;
else
data = tmp_data;
}
src = create_mbuf_from_vardata(data);
dst = mbuf_create(VARSIZE(data) + 128);
/*
* reserve room for header
*/
mbuf_append(dst, tmp, VARHDRSZ);
/*
* set key
*/
if (is_pubenc)
{
MBuf *kbuf = create_mbuf_from_vardata(key);
err = pgp_set_pubkey(ctx, kbuf,
NULL, 0, 0);
mbuf_free(kbuf);
}
else
err = pgp_set_symkey(ctx, (uint8 *) VARDATA(key),
VARSIZE(key) - VARHDRSZ);
/*
* encrypt
*/
if (err >= 0)
err = pgp_encrypt(ctx, src, dst);
/*
* check for error
*/
if (err)
{
if (ex.debug)
px_set_debug_handler(NULL);
if (tmp_data)
clear_and_pfree(tmp_data);
pgp_free(ctx);
mbuf_free(src);
mbuf_free(dst);
ereport(ERROR,
(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
errmsg("%s", px_strerror(err))));
}
/* res_len includes VARHDRSZ */
res_len = mbuf_steal_data(dst, &restmp);
res = (bytea *) restmp;
SET_VARSIZE(res, res_len);
if (tmp_data)
clear_and_pfree(tmp_data);
pgp_free(ctx);
mbuf_free(src);
mbuf_free(dst);
px_set_debug_handler(NULL);
return res;
}
| static void fill_expect | ( | struct debug_expect * | ex, | |
| int | text_mode | |||
| ) | [static] |
Definition at line 192 of file pgp-pgsql.c.
References debug_expect::cipher_algo, debug_expect::compress_algo, debug_expect::debug, debug_expect::disable_mdc, debug_expect::expect, debug_expect::s2k_cipher_algo, debug_expect::s2k_digest_algo, debug_expect::s2k_mode, debug_expect::unicode_mode, and debug_expect::use_sess_key.
Referenced by init_work().
{
ex->debug = 0;
ex->expect = 0;
ex->cipher_algo = -1;
ex->s2k_mode = -1;
ex->s2k_cipher_algo = -1;
ex->s2k_digest_algo = -1;
ex->compress_algo = -1;
ex->use_sess_key = -1;
ex->disable_mdc = -1;
ex->unicode_mode = -1;
}
| static char* getword | ( | char * | p, | |
| char ** | res_p, | |||
| int * | res_len | |||
| ) | [static] |
Definition at line 316 of file pgp-pgsql.c.
Referenced by parse_args().
{
/* whitespace at start */
while (*p && (*p == ' ' || *p == '\t' || *p == '\n'))
p++;
/* word data */
*res_p = p;
if (*p == '=' || *p == ',')
p++;
else
while (*p && !(*p == ' ' || *p == '\t' || *p == '\n'
|| *p == '=' || *p == ','))
p++;
/* word end */
*res_len = p - *res_p;
/* whitespace at end */
while (*p && (*p == ' ' || *p == '\t' || *p == '\n'))
p++;
return p;
}
| static void init_work | ( | PGP_Context ** | ctx_p, | |
| int | is_text, | |||
| text * | args, | |||
| struct debug_expect * | ex | |||
| ) | [static] |
Definition at line 408 of file pgp-pgsql.c.
References debug_expect::debug, ereport, errcode(), errmsg(), ERROR, fill_expect(), NULL, parse_args(), pgp_init(), pgp_set_text_mode(), px_set_debug_handler(), px_strerror(), show_debug(), VARDATA, VARHDRSZ, and VARSIZE.
Referenced by decrypt_internal(), and encrypt_internal().
{
int err = pgp_init(ctx_p);
fill_expect(ex, is_text);
if (err == 0 && args != NULL)
err = parse_args(*ctx_p, (uint8 *) VARDATA(args),
VARSIZE(args) - VARHDRSZ, ex);
if (err)
{
ereport(ERROR,
(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
errmsg("%s", px_strerror(err))));
}
if (ex->debug)
px_set_debug_handler(show_debug);
pgp_set_text_mode(*ctx_p, is_text);
}
| static int parse_args | ( | PGP_Context * | ctx, | |
| uint8 * | args, | |||
| int | arg_len, | |||
| struct debug_expect * | ex | |||
| ) | [static] |
Definition at line 363 of file pgp-pgsql.c.
References downcase_convert(), getword(), pfree(), set_arg(), and val.
Referenced by init_work().
{
char *str = downcase_convert(args, arg_len);
char *key,
*val;
int key_len,
val_len;
int res = 0;
char *p = str;
while (*p)
{
res = PXE_ARGUMENT_ERROR;
p = getword(p, &key, &key_len);
if (*p++ != '=')
break;
p = getword(p, &val, &val_len);
if (*p == '\0')
;
else if (*p++ != ',')
break;
if (*key == 0 || *val == 0 || val_len == 0)
break;
key[key_len] = 0;
val[val_len] = 0;
res = set_arg(ctx, key, val, ex);
if (res < 0)
break;
}
pfree(str);
return res;
}
| Datum pg_armor | ( | PG_FUNCTION_ARGS | ) |
Definition at line 836 of file pgp-pgsql.c.
References ereport, errcode(), errmsg(), ERROR, palloc(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_RETURN_TEXT_P, pgp_armor_enc_len(), pgp_armor_encode(), SET_VARSIZE, VARDATA, VARHDRSZ, and VARSIZE.
{
bytea *data;
text *res;
int data_len,
res_len,
guess_len;
data = PG_GETARG_BYTEA_P(0);
data_len = VARSIZE(data) - VARHDRSZ;
guess_len = pgp_armor_enc_len(data_len);
res = palloc(VARHDRSZ + guess_len);
res_len = pgp_armor_encode((uint8 *) VARDATA(data), data_len,
(uint8 *) VARDATA(res));
if (res_len > guess_len)
ereport(ERROR,
(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
errmsg("Overflow - encode estimate too small")));
SET_VARSIZE(res, VARHDRSZ + res_len);
PG_FREE_IF_COPY(data, 0);
PG_RETURN_TEXT_P(res);
}
| Datum pg_dearmor | ( | PG_FUNCTION_ARGS | ) |
Definition at line 863 of file pgp-pgsql.c.
References ereport, errcode(), errmsg(), ERROR, palloc(), PG_FREE_IF_COPY, PG_GETARG_TEXT_P, PG_RETURN_TEXT_P, pgp_armor_dec_len(), pgp_armor_decode(), px_strerror(), SET_VARSIZE, VARDATA, VARHDRSZ, and VARSIZE.
{
text *data;
bytea *res;
int data_len,
res_len,
guess_len;
data = PG_GETARG_TEXT_P(0);
data_len = VARSIZE(data) - VARHDRSZ;
guess_len = pgp_armor_dec_len(data_len);
res = palloc(VARHDRSZ + guess_len);
res_len = pgp_armor_decode((uint8 *) VARDATA(data), data_len,
(uint8 *) VARDATA(res));
if (res_len < 0)
ereport(ERROR,
(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
errmsg("%s", px_strerror(res_len))));
if (res_len > guess_len)
ereport(ERROR,
(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
errmsg("Overflow - decode estimate too small")));
SET_VARSIZE(res, VARHDRSZ + res_len);
PG_FREE_IF_COPY(data, 0);
PG_RETURN_TEXT_P(res);
}
| PG_FUNCTION_INFO_V1 | ( | pg_dearmor | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_pub_encrypt_text | ) |
| PG_FUNCTION_INFO_V1 | ( | pg_armor | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_key_id_w | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_pub_encrypt_bytea | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_sym_encrypt_bytea | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_sym_encrypt_text | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_pub_decrypt_bytea | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_sym_decrypt_text | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_sym_decrypt_bytea | ) |
| PG_FUNCTION_INFO_V1 | ( | pgp_pub_decrypt_text | ) |
| Datum pgp_key_id_w | ( | PG_FUNCTION_ARGS | ) |
Definition at line 898 of file pgp-pgsql.c.
References buf, create_mbuf_from_vardata(), ereport, errcode(), errmsg(), ERROR, mbuf_free(), palloc(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_RETURN_TEXT_P, pgp_get_keyid(), px_strerror(), SET_VARSIZE, VARDATA, and VARHDRSZ.
{
bytea *data;
text *res;
int res_len;
MBuf *buf;
data = PG_GETARG_BYTEA_P(0);
buf = create_mbuf_from_vardata(data);
res = palloc(VARHDRSZ + 17);
res_len = pgp_get_keyid(buf, VARDATA(res));
mbuf_free(buf);
if (res_len < 0)
ereport(ERROR,
(errcode(ERRCODE_EXTERNAL_ROUTINE_INVOCATION_EXCEPTION),
errmsg("%s", px_strerror(res_len))));
SET_VARSIZE(res, VARHDRSZ + res_len);
PG_FREE_IF_COPY(data, 0);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_pub_decrypt_bytea | ( | PG_FUNCTION_ARGS | ) |
Definition at line 777 of file pgp-pgsql.c.
References arg, decrypt_internal(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *psw = NULL,
*arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
psw = PG_GETARG_BYTEA_P(2);
if (PG_NARGS() > 3)
arg = PG_GETARG_BYTEA_P(3);
res = decrypt_internal(1, 0, data, key, psw, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(psw, 2);
if (PG_NARGS() > 3)
PG_FREE_IF_COPY(arg, 3);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_pub_decrypt_text | ( | PG_FUNCTION_ARGS | ) |
Definition at line 804 of file pgp-pgsql.c.
References arg, decrypt_internal(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *psw = NULL,
*arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
psw = PG_GETARG_BYTEA_P(2);
if (PG_NARGS() > 3)
arg = PG_GETARG_BYTEA_P(3);
res = decrypt_internal(1, 1, data, key, psw, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(psw, 2);
if (PG_NARGS() > 3)
PG_FREE_IF_COPY(arg, 3);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_pub_encrypt_bytea | ( | PG_FUNCTION_ARGS | ) |
Definition at line 732 of file pgp-pgsql.c.
References arg, encrypt_internal(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
arg = PG_GETARG_BYTEA_P(2);
res = encrypt_internal(1, 0, data, key, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(arg, 2);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_pub_encrypt_text | ( | PG_FUNCTION_ARGS | ) |
Definition at line 754 of file pgp-pgsql.c.
References arg, encrypt_internal(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
arg = PG_GETARG_BYTEA_P(2);
res = encrypt_internal(1, 1, data, key, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(arg, 2);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_sym_decrypt_bytea | ( | PG_FUNCTION_ARGS | ) |
Definition at line 684 of file pgp-pgsql.c.
References arg, decrypt_internal(), NULL, PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
arg = PG_GETARG_BYTEA_P(2);
res = decrypt_internal(0, 0, data, key, NULL, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(arg, 2);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_sym_decrypt_text | ( | PG_FUNCTION_ARGS | ) |
Definition at line 706 of file pgp-pgsql.c.
References arg, decrypt_internal(), NULL, PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
arg = PG_GETARG_BYTEA_P(2);
res = decrypt_internal(0, 1, data, key, NULL, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(arg, 2);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_sym_encrypt_bytea | ( | PG_FUNCTION_ARGS | ) |
Definition at line 639 of file pgp-pgsql.c.
References arg, encrypt_internal(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
arg = PG_GETARG_BYTEA_P(2);
res = encrypt_internal(0, 0, data, key, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(arg, 2);
PG_RETURN_TEXT_P(res);
}
| Datum pgp_sym_encrypt_text | ( | PG_FUNCTION_ARGS | ) |
Definition at line 661 of file pgp-pgsql.c.
References arg, encrypt_internal(), PG_FREE_IF_COPY, PG_GETARG_BYTEA_P, PG_NARGS, and PG_RETURN_TEXT_P.
{
bytea *data,
*key;
text *arg = NULL;
text *res;
data = PG_GETARG_BYTEA_P(0);
key = PG_GETARG_BYTEA_P(1);
if (PG_NARGS() > 2)
arg = PG_GETARG_BYTEA_P(2);
res = encrypt_internal(0, 1, data, key, arg);
PG_FREE_IF_COPY(data, 0);
PG_FREE_IF_COPY(key, 1);
if (PG_NARGS() > 2)
PG_FREE_IF_COPY(arg, 2);
PG_RETURN_TEXT_P(res);
}
| static int set_arg | ( | PGP_Context * | ctx, | |
| char * | key, | |||
| char * | val, | |||
| struct debug_expect * | ex | |||
| ) | [static] |
Definition at line 236 of file pgp-pgsql.c.
References debug_expect::cipher_algo, debug_expect::compress_algo, debug_expect::debug, debug_expect::disable_mdc, debug_expect::expect, NULL, pgp_disable_mdc(), pgp_get_cipher_code(), pgp_get_digest_code(), pgp_set_cipher_algo(), pgp_set_compress_algo(), pgp_set_compress_level(), pgp_set_convert_crlf(), pgp_set_s2k_cipher_algo(), pgp_set_s2k_digest_algo(), pgp_set_s2k_mode(), pgp_set_sess_key(), pgp_set_unicode_mode(), debug_expect::s2k_cipher_algo, debug_expect::s2k_digest_algo, debug_expect::s2k_mode, debug_expect::unicode_mode, and debug_expect::use_sess_key.
Referenced by parse_args().
{
int res = 0;
if (strcmp(key, "cipher-algo") == 0)
res = pgp_set_cipher_algo(ctx, val);
else if (strcmp(key, "disable-mdc") == 0)
res = pgp_disable_mdc(ctx, atoi(val));
else if (strcmp(key, "sess-key") == 0)
res = pgp_set_sess_key(ctx, atoi(val));
else if (strcmp(key, "s2k-mode") == 0)
res = pgp_set_s2k_mode(ctx, atoi(val));
else if (strcmp(key, "s2k-digest-algo") == 0)
res = pgp_set_s2k_digest_algo(ctx, val);
else if (strcmp(key, "s2k-cipher-algo") == 0)
res = pgp_set_s2k_cipher_algo(ctx, val);
else if (strcmp(key, "compress-algo") == 0)
res = pgp_set_compress_algo(ctx, atoi(val));
else if (strcmp(key, "compress-level") == 0)
res = pgp_set_compress_level(ctx, atoi(val));
else if (strcmp(key, "convert-crlf") == 0)
res = pgp_set_convert_crlf(ctx, atoi(val));
else if (strcmp(key, "unicode-mode") == 0)
res = pgp_set_unicode_mode(ctx, atoi(val));
/* decrypt debug */
else if (ex != NULL && strcmp(key, "debug") == 0)
ex->debug = atoi(val);
else if (ex != NULL && strcmp(key, "expect-cipher-algo") == 0)
{
ex->expect = 1;
ex->cipher_algo = pgp_get_cipher_code(val);
}
else if (ex != NULL && strcmp(key, "expect-disable-mdc") == 0)
{
ex->expect = 1;
ex->disable_mdc = atoi(val);
}
else if (ex != NULL && strcmp(key, "expect-sess-key") == 0)
{
ex->expect = 1;
ex->use_sess_key = atoi(val);
}
else if (ex != NULL && strcmp(key, "expect-s2k-mode") == 0)
{
ex->expect = 1;
ex->s2k_mode = atoi(val);
}
else if (ex != NULL && strcmp(key, "expect-s2k-digest-algo") == 0)
{
ex->expect = 1;
ex->s2k_digest_algo = pgp_get_digest_code(val);
}
else if (ex != NULL && strcmp(key, "expect-s2k-cipher-algo") == 0)
{
ex->expect = 1;
ex->s2k_cipher_algo = pgp_get_cipher_code(val);
}
else if (ex != NULL && strcmp(key, "expect-compress-algo") == 0)
{
ex->expect = 1;
ex->compress_algo = atoi(val);
}
else if (ex != NULL && strcmp(key, "expect-unicode-mode") == 0)
{
ex->expect = 1;
ex->unicode_mode = atoi(val);
}
else
res = PXE_ARGUMENT_ERROR;
return res;
}
| static void show_debug | ( | const char * | msg | ) | [static] |
Definition at line 230 of file pgp-pgsql.c.
References ereport, errmsg(), and NOTICE.
Referenced by init_work().
1.7.1