cryptint

This Release
cryptint 1.0.0
Date
Status
Stable
Abstract
Extension implementing Skip32 and XTEA encryption for integers
Released By
dverite
License
The PostgreSQL License
Resources
Special Files
Tags

Extensions

cryptint 1.0.0
Extension implementing Skip32 and XTEA encryption for integers

Documentation

LICENSE
Copyright and License

README

cryptint

cryptint is a PostgreSQL extension providing SKIP32 encryption for 32-bit integers, and XTEA encryption for 64-bit integers.

SKIP32

SKIP32 is a block cipher with 24 rounds based on Skipjack, that encrypts 32-bit values with a 80-bit key.
See Skipjack (wikipedia)
Be warned that this encryption algorithm was developed in the 80's and is considered extremely weak by today's standard.

skip32_encrypt(int value, bytea key) returns int
Encrypt an int (32-bit signed) with SKIP32. key must be 10 bytes long.

skip32_decrypt(int value, bytea key) returns int
Decrypt an int (32-bit signed) with SKIP32. key must be 10 bytes long.

XTEA

XTEA is a block cipher with 64 rounds, that encrypts 64-bit values with a 128-bit key.
See XTEA (wikipedia)

xtea_encrypt(bigint value, bytea key) returns bigint
Encrypt a bigint (64-bit signed) with XTEA. key must be 16 bytes long.

xtea_decrypt(bigint value, bytea key) returns bigint
Decrypt a bigint (64-bit signed) encrypted with XTEA. key must be 16 bytes long.

Installation

The Makefile uses the PGXS infrastructure to find include and library files, and determine the install location.
Build and install with: shell $ make $ (sudo) make install

Usage

Once the extension is installed as a shared library, run in SQL: sql CREATE EXTENSION cryptint; this will create the extension in the current schema of the current database. See CREATE EXTENSION in PostgreSQL documentation for options.

Demo in psql:

```sql postgres=# CREATE EXTENSION cryptint;

postgres=# SELECT i, enc AS encrypted, skip32_decrypt(enc, '\x00010203040506070809'::bytea) AS decrypted FROM (SELECT i, skip32_encrypt(i, '\x00010203040506070809'::bytea) AS enc FROM generate_series(-7,5) as i) AS list; ``` Result:

 i  |  encrypted  | decrypted
----+-------------+-----------
 -7 |  1919056679 |        -7
 -6 | -1412297942 |        -6
 -5 |   151416393 |        -5
 -4 |  2080108073 |        -4
 -3 |  1863639393 |        -3
 -2 | -1709192983 |        -2
 -1 |   462394163 |        -1
  0 |   175586429 |         0
  1 | -1687378603 |         1
  2 |  1293871674 |         2
  3 |  -431061768 |         3
  4 |  -563311787 |         4
  5 | -1586536625 |         5

sql postgres=# SELECT i, enc AS encrypted, xtea_decrypt(enc, '\x000102030405060708090a0b0c0d0e0f'::bytea) AS decrypted FROM (SELECT i, xtea_encrypt(i, '\x000102030405060708090a0b0c0d0e0f'::bytea) AS enc FROM generate_series(-7,5) as i) AS list;

Result:

  i  |      encrypted       | decrypted 
 ----+----------------------+-----------
  -7 | -1293292978079273268 |        -7
  -6 | -3293879689420368007 |        -6
  -5 | -7669992214422926170 |        -5
  -4 | -8172870873157163041 |        -4
  -3 | -8476655326143017308 |        -3
  -2 |  6852925861493684753 |        -2
  -1 | -5097246286506330434 |        -1
   0 | -3036054577413801443 |         0
   1 |   103200416458222088 |         1
   2 | -2807732263776726059 |         2
   3 |  3315832599386841135 |         3
   4 |  3207778724708741372 |         4
   5 | -7709649685193830947 |         5