diff options
Diffstat (limited to 'contrib/pgcrypto/API')
| -rw-r--r-- | contrib/pgcrypto/API | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/contrib/pgcrypto/API b/contrib/pgcrypto/API new file mode 100644 index 0000000000..8127f70393 --- /dev/null +++ b/contrib/pgcrypto/API @@ -0,0 +1,163 @@ + +C API for pgcrypto +================== + + +UN*X crypt() +============ + +#include <px-crypt.h> + +char * +px_crypt(const char *psw, const char *salt, char *buf, unsigned buflen); + + returns buf or NULL for error. + +unsigned px_gen_salt(const char *salt_type, char *dst, int rounds); + + returns salt size. dst should be PX_MAX_SALT_LEN bytes. + 'rounds' is algorithm specific. 0 means default for + that algorithm. + +Random +====== + +int px_rand_get_bytes(uint8 *dst, int num) + + +Crypto "objects" +================ + +PX_MD - Message digest +PX_HMAC - HMAC (Hash MAC) +PX_Cipher - cipher+mode: provided by libs +PX_Combo - higher-level encryption -> padding, [MD] + +Objects are activated with following functions: + +int px_find_digest(const char *name, PX_MD **res); +int px_find_hmac(const char *name, PX_HMAC **res); +int px_find_cipher(const char *name, PX_Cipher **res); +int px_find_combo(const char *name, PX_Combo **res); + + returns 0 on success, < 0 on error. If successful, + *res contains pointer to new object. + +Message Digest +============== + +uint px_md_result_size(PX_MD *md) + + returns final result size in bytes + +void px_md_reset(PX_MD *md) + + resets md to clean state + +uint px_md_block_size(PX_MD *md) + + return algorithm block size in bytes + +void px_md_update(PX_MD *md, const uint8 *data, uint dlen) + + updates hash state with new data + +void px_md_finish(PX_MD *md, uint8 *buf) + + puts final hash state into buf. buf should have room + for px_md_result_size() bytes. + +void px_md_free(PX_MD *md) + + frees resources. + +HMAC (Hash Message Authentication Code) +======================================= + +int px_hmac_init(PX_HMAC *hmac, const uint8 *key, uint klen) + + initalized hmac state with key. + +uint px_hmac_result_size(PX_HMAC *md) + + returns final result size in bytes + +void px_hmac_reset(PX_HMAC *md) + + resets md to state after _init() + +uint px_hmac_block_size(PX_HMAC *md) + + return algorithm block size in bytes + +void px_hmac_update(PX_HMAC *md, const uint8 *data, uint dlen) + + updates hash state with new data + +void px_hmac_finish(PX_HMAC *md, uint8 *buf) + + puts final hash state into buf. buf should have room + for px_hmac_result_size() bytes. + +void px_hmac_free(PX_HMAC *md) + + frees resources. + + +Cipher +====== + +uint px_cipher_key_size(PX_Cipher *c) + + returns max key size in bytes + +uint px_cipher_block_size(PX_Cipher *c) + + returns cipher+mode block size in bytes. So blowfish + in CFB mode should return 1. + +uint px_cipher_iv_size(PX_Cipher *c) + + returns IV size in bytes. + +int px_cipher_init(PX_Cipher *c, uint8 *key, uint klen, uint8 *iv) + + initializes cipher with supplied key and iv. + +int px_cipher_encrypt(PX_Cipher *c, uint8 *data, uint dlen, uint8 *res) + + encrypts data. res must have room for dlen bytes. + data must be multiple of px_cipher_block_size(). + +int px_cipher_decrypt(PX_Cipher *c, uint8 *data, uint dlen, uint8 *res) + + decrypts data. res must have room for dlen bytes. + +void px_cipher_free(PX_Cipher *c) + + frees resources assiocated. + +PX_Combo +======== + +uint px_combo_encrypt_len(PX_Combo *c, uint dlen) + + calculates max result length for dlen of data. + +uint px_combo_decrypt_len(PX_Combo *c, uint dlen) + + calculates result length for dlen of data. + +int px_combo_init(PX_Combo *c, uint8 *key, uint klen, uint8 *iv, uint ivlen) + + initializes c with key and iv. If cipher uses fixed length keys, + key will be padded with zeroes to needed length. + +int px_combo_encrypt(PX_Combo *c, uint8 *data, uint dlen, uint8 *res, uint rlen) + +int px_combo_decrypt(PX_Combo *c, uint8 *data, uint dlen, uint8 *res, uint rlen) + +void px_combo_free(PX_Combo *c) + + frees resources assiocated. + |
