pgsmcrypto

pgsmcrypto

pgsmcrypto : PostgreSQL SM Algorithm Extension

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
7060
pgsmcrypto
pgsmcrypto
0.1.1
SEC
MIT
Rust
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d--
No
Yes
No
Yes
no
no
Relationships
See Also
pgsodium
pgcryptokey
pgcrypto
pg_tde
sslutils
faker
uuid-ossp
lo

manual updated pgrx by Vonng

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PIGSTY
0.1.1
18
17
16
15
14
pgsmcrypto-
RPM
PIGSTY
0.1.1
18
17
16
15
14
pgsmcrypto_$v-
DEB
PIGSTY
0.1.1
18
17
16
15
14
postgresql-$v-pgsmcrypto-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
el8.aarch64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
el9.x86_64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
el9.aarch64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
el10.x86_64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
el10.aarch64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
d12.x86_64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
d12.aarch64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
d13.x86_64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
d13.aarch64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
u22.x86_64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
u22.aarch64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
u24.x86_64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
u24.aarch64
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PIGSTY 0.1.1
PackageVersionOSORGSIZEFile URL
pgsmcrypto_180.1.1el8.x86_64pigsty845.9 KiBpgsmcrypto_18-0.1.1-1PIGSTY.el8.x86_64.rpm
pgsmcrypto_180.1.1el8.aarch64pigsty667.4 KiBpgsmcrypto_18-0.1.1-1PIGSTY.el8.aarch64.rpm
pgsmcrypto_180.1.1el9.x86_64pigsty877.0 KiBpgsmcrypto_18-0.1.1-1PIGSTY.el9.x86_64.rpm
pgsmcrypto_180.1.1el9.aarch64pigsty727.2 KiBpgsmcrypto_18-0.1.1-1PIGSTY.el9.aarch64.rpm
pgsmcrypto_180.1.1el10.x86_64pigsty884.8 KiBpgsmcrypto_18-0.1.1-1PIGSTY.el10.x86_64.rpm
pgsmcrypto_180.1.1el10.aarch64pigsty736.7 KiBpgsmcrypto_18-0.1.1-1PIGSTY.el10.aarch64.rpm
postgresql-18-pgsmcrypto0.1.1d12.x86_64pigsty705.9 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~bookworm_amd64.deb
postgresql-18-pgsmcrypto0.1.1d12.aarch64pigsty531.7 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~bookworm_arm64.deb
postgresql-18-pgsmcrypto0.1.1d13.x86_64pigsty707.7 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~trixie_amd64.deb
postgresql-18-pgsmcrypto0.1.1d13.aarch64pigsty532.1 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~trixie_arm64.deb
postgresql-18-pgsmcrypto0.1.1u22.x86_64pigsty800.4 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~jammy_amd64.deb
postgresql-18-pgsmcrypto0.1.1u22.aarch64pigsty644.1 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~jammy_arm64.deb
postgresql-18-pgsmcrypto0.1.1u24.x86_64pigsty799.4 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~noble_amd64.deb
postgresql-18-pgsmcrypto0.1.1u24.aarch64pigsty631.2 KiBpostgresql-18-pgsmcrypto_0.1.1-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgsmcrypto_170.1.1el8.x86_64pigsty845.5 KiBpgsmcrypto_17-0.1.1-1PIGSTY.el8.x86_64.rpm
pgsmcrypto_170.1.1el8.aarch64pigsty667.3 KiBpgsmcrypto_17-0.1.1-1PIGSTY.el8.aarch64.rpm
pgsmcrypto_170.1.1el9.x86_64pigsty877.2 KiBpgsmcrypto_17-0.1.1-1PIGSTY.el9.x86_64.rpm
pgsmcrypto_170.1.1el9.aarch64pigsty727.2 KiBpgsmcrypto_17-0.1.1-1PIGSTY.el9.aarch64.rpm
pgsmcrypto_170.1.1el10.x86_64pigsty884.5 KiBpgsmcrypto_17-0.1.1-1PIGSTY.el10.x86_64.rpm
pgsmcrypto_170.1.1el10.aarch64pigsty736.6 KiBpgsmcrypto_17-0.1.1-1PIGSTY.el10.aarch64.rpm
postgresql-17-pgsmcrypto0.1.1d12.x86_64pigsty706.8 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~bookworm_amd64.deb
postgresql-17-pgsmcrypto0.1.1d12.aarch64pigsty531.8 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~bookworm_arm64.deb
postgresql-17-pgsmcrypto0.1.1d13.x86_64pigsty707.7 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~trixie_amd64.deb
postgresql-17-pgsmcrypto0.1.1d13.aarch64pigsty532.0 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~trixie_arm64.deb
postgresql-17-pgsmcrypto0.1.1u22.x86_64pigsty801.2 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~jammy_amd64.deb
postgresql-17-pgsmcrypto0.1.1u22.aarch64pigsty642.9 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~jammy_arm64.deb
postgresql-17-pgsmcrypto0.1.1u24.x86_64pigsty797.3 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~noble_amd64.deb
postgresql-17-pgsmcrypto0.1.1u24.aarch64pigsty631.1 KiBpostgresql-17-pgsmcrypto_0.1.1-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgsmcrypto_160.1.1el8.x86_64pigsty845.5 KiBpgsmcrypto_16-0.1.1-1PIGSTY.el8.x86_64.rpm
pgsmcrypto_160.1.1el8.aarch64pigsty667.3 KiBpgsmcrypto_16-0.1.1-1PIGSTY.el8.aarch64.rpm
pgsmcrypto_160.1.1el9.x86_64pigsty877.3 KiBpgsmcrypto_16-0.1.1-1PIGSTY.el9.x86_64.rpm
pgsmcrypto_160.1.1el9.aarch64pigsty727.1 KiBpgsmcrypto_16-0.1.1-1PIGSTY.el9.aarch64.rpm
pgsmcrypto_160.1.1el10.x86_64pigsty883.1 KiBpgsmcrypto_16-0.1.1-1PIGSTY.el10.x86_64.rpm
pgsmcrypto_160.1.1el10.aarch64pigsty735.7 KiBpgsmcrypto_16-0.1.1-1PIGSTY.el10.aarch64.rpm
postgresql-16-pgsmcrypto0.1.1d12.x86_64pigsty709.2 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~bookworm_amd64.deb
postgresql-16-pgsmcrypto0.1.1d12.aarch64pigsty532.1 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~bookworm_arm64.deb
postgresql-16-pgsmcrypto0.1.1d13.x86_64pigsty709.1 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~trixie_amd64.deb
postgresql-16-pgsmcrypto0.1.1d13.aarch64pigsty532.3 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~trixie_arm64.deb
postgresql-16-pgsmcrypto0.1.1u22.x86_64pigsty802.0 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~jammy_amd64.deb
postgresql-16-pgsmcrypto0.1.1u22.aarch64pigsty643.9 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~jammy_arm64.deb
postgresql-16-pgsmcrypto0.1.1u24.x86_64pigsty793.9 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~noble_amd64.deb
postgresql-16-pgsmcrypto0.1.1u24.aarch64pigsty631.1 KiBpostgresql-16-pgsmcrypto_0.1.1-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgsmcrypto_150.1.1el8.x86_64pigsty845.8 KiBpgsmcrypto_15-0.1.1-1PIGSTY.el8.x86_64.rpm
pgsmcrypto_150.1.1el8.aarch64pigsty667.3 KiBpgsmcrypto_15-0.1.1-1PIGSTY.el8.aarch64.rpm
pgsmcrypto_150.1.1el9.x86_64pigsty875.5 KiBpgsmcrypto_15-0.1.1-1PIGSTY.el9.x86_64.rpm
pgsmcrypto_150.1.1el9.aarch64pigsty726.7 KiBpgsmcrypto_15-0.1.1-1PIGSTY.el9.aarch64.rpm
pgsmcrypto_150.1.1el10.x86_64pigsty880.1 KiBpgsmcrypto_15-0.1.1-1PIGSTY.el10.x86_64.rpm
pgsmcrypto_150.1.1el10.aarch64pigsty735.8 KiBpgsmcrypto_15-0.1.1-1PIGSTY.el10.aarch64.rpm
postgresql-15-pgsmcrypto0.1.1d12.x86_64pigsty706.2 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~bookworm_amd64.deb
postgresql-15-pgsmcrypto0.1.1d12.aarch64pigsty532.2 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~bookworm_arm64.deb
postgresql-15-pgsmcrypto0.1.1d13.x86_64pigsty707.5 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~trixie_amd64.deb
postgresql-15-pgsmcrypto0.1.1d13.aarch64pigsty532.1 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~trixie_arm64.deb
postgresql-15-pgsmcrypto0.1.1u22.x86_64pigsty803.1 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~jammy_amd64.deb
postgresql-15-pgsmcrypto0.1.1u22.aarch64pigsty643.2 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~jammy_arm64.deb
postgresql-15-pgsmcrypto0.1.1u24.x86_64pigsty795.9 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~noble_amd64.deb
postgresql-15-pgsmcrypto0.1.1u24.aarch64pigsty631.2 KiBpostgresql-15-pgsmcrypto_0.1.1-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgsmcrypto_140.1.1el8.x86_64pigsty845.7 KiBpgsmcrypto_14-0.1.1-1PIGSTY.el8.x86_64.rpm
pgsmcrypto_140.1.1el8.aarch64pigsty667.2 KiBpgsmcrypto_14-0.1.1-1PIGSTY.el8.aarch64.rpm
pgsmcrypto_140.1.1el9.x86_64pigsty875.8 KiBpgsmcrypto_14-0.1.1-1PIGSTY.el9.x86_64.rpm
pgsmcrypto_140.1.1el9.aarch64pigsty727.2 KiBpgsmcrypto_14-0.1.1-1PIGSTY.el9.aarch64.rpm
pgsmcrypto_140.1.1el10.x86_64pigsty884.8 KiBpgsmcrypto_14-0.1.1-1PIGSTY.el10.x86_64.rpm
pgsmcrypto_140.1.1el10.aarch64pigsty736.7 KiBpgsmcrypto_14-0.1.1-1PIGSTY.el10.aarch64.rpm
postgresql-14-pgsmcrypto0.1.1d12.x86_64pigsty705.8 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~bookworm_amd64.deb
postgresql-14-pgsmcrypto0.1.1d12.aarch64pigsty531.5 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~bookworm_arm64.deb
postgresql-14-pgsmcrypto0.1.1d13.x86_64pigsty705.7 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~trixie_amd64.deb
postgresql-14-pgsmcrypto0.1.1d13.aarch64pigsty532.1 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~trixie_arm64.deb
postgresql-14-pgsmcrypto0.1.1u22.x86_64pigsty800.1 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~jammy_amd64.deb
postgresql-14-pgsmcrypto0.1.1u22.aarch64pigsty644.4 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~jammy_arm64.deb
postgresql-14-pgsmcrypto0.1.1u24.x86_64pigsty796.9 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~noble_amd64.deb
postgresql-14-pgsmcrypto0.1.1u24.aarch64pigsty631.2 KiBpostgresql-14-pgsmcrypto_0.1.1-1PIGSTY~noble_arm64.deb

Source

pig build pkg pgsmcrypto;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install pgsmcrypto;		# install via package name, for the active PG version

pig install pgsmcrypto -v 18;   # install for PG 18
pig install pgsmcrypto -v 17;   # install for PG 17
pig install pgsmcrypto -v 16;   # install for PG 16
pig install pgsmcrypto -v 15;   # install for PG 15
pig install pgsmcrypto -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION pgsmcrypto;

Usage

pgsmcrypto: SM national cryptographic algorithm extension for PostgreSQL

pgsmcrypto provides Chinese national cryptographic (SM series) algorithms for PostgreSQL, including SM3 hashing, SM2 asymmetric encryption/signing, and SM4 symmetric encryption.

CREATE EXTENSION pgsmcrypto;

SM3 Message Digest

SELECT sm3_hash_string('abc');              -- Returns 64-char hex string (32 bytes)
SELECT sm3_hash('abc'::bytea);              -- Hash bytea input
SELECT sm3_hash(E'\\x616263');              -- Hash raw hex input

SM2 Asymmetric Encryption

Key Generation

SELECT sm2_gen_keypair();                   -- Returns {private_key, public_key} array
SELECT sm2_privkey_valid('f774...');        -- Validate private key (1=valid)
SELECT sm2_pubkey_valid('8093...');         -- Validate public key (1=valid)
SELECT sm2_pk_from_sk('f774...');           -- Derive public key from private key

Key Export/Import (PEM)

SELECT sm2_keypair_to_pem_bytes('f774...');       -- Private key to PEM
SELECT sm2_pubkey_to_pem_bytes('8093...');        -- Public key to PEM
SELECT sm2_keypair_from_pem_bytes(pem_bytes);     -- Import from PEM
SELECT sm2_pubkey_from_pem_bytes(pem_bytes);      -- Import public key from PEM

Sign and Verify

-- Raw sign/verify (signs message directly)
WITH s AS (
    SELECT sm2_sign_raw('abc'::bytea, 'f774...') AS sig
)
SELECT sm2_verify_raw('abc'::bytea, sig, '8093...') FROM s;

-- Standard sign/verify (SM2 specification with id + SM3 digest)
WITH s AS (
    SELECT sm2_sign('myid'::bytea, 'abc'::bytea, 'f774...') AS sig
)
SELECT sm2_verify('myid'::bytea, 'abc'::bytea, sig, '8093...') FROM s;

Encrypt and Decrypt

-- Standard encrypt/decrypt
WITH c AS (
    SELECT sm2_encrypt('abc'::bytea, '8093...') AS enc
)
SELECT sm2_decrypt(enc, 'f774...') FROM c;

-- Also available: sm2_encrypt_c1c2c3, sm2_encrypt_asna1, sm2_encrypt_hex, sm2_encrypt_base64
-- with corresponding decrypt variants

SM4 Symmetric Encryption

-- ECB mode (key must be 16 bytes)
SELECT sm4_encrypt_ecb('abc'::bytea, '1234567812345678'::bytea);
SELECT sm4_decrypt_ecb(encrypted, '1234567812345678'::bytea);

-- CBC mode (key and IV must be 16 bytes)
SELECT sm4_encrypt_cbc('abc'::bytea, '1234567812345678'::bytea, '0000000000000000'::bytea);
SELECT sm4_decrypt_cbc(encrypted, '1234567812345678'::bytea, '0000000000000000'::bytea);
Last updated on