gui/docs/framework/crypt.md
Snider 032c426ac3 feat: initial Wails v3 desktop framework
GUI packages, examples, and documentation for building
desktop applications with Go and web technologies.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 08:44:23 +00:00

2.7 KiB

Crypt Service

The Crypt service (pkg/crypt) provides cryptographic utilities including hashing, checksums, RSA encryption, and PGP operations.

Features

  • Multiple hash algorithms (SHA512, SHA256, SHA1, MD5)
  • Checksum functions (Fletcher, Luhn)
  • RSA key generation and encryption
  • PGP encryption, signing, and verification
  • Symmetric PGP encryption

Basic Usage

import "github.com/Snider/Core/pkg/crypt"

// Standalone usage
crypto, err := crypt.New()

// With Core framework
c, _ := core.New(
    core.WithService(crypt.Register),
)
crypto := core.MustServiceFor[*crypt.Service](c, "crypt")

Hashing

// Available algorithms: SHA512, SHA256, SHA1, MD5, LTHN
hash := crypto.Hash(crypt.SHA256, "hello world")

// Check if string is valid hash algorithm
isValid := crypto.IsHashAlgo("sha256")

Checksums

// Luhn validation (credit card numbers)
isValid := crypto.Luhn("4532015112830366")

// Fletcher checksums
f16 := crypto.Fletcher16("data")
f32 := crypto.Fletcher32("data")
f64 := crypto.Fletcher64("data")

RSA Encryption

// Generate key pair (2048 or 4096 bits recommended)
publicKey, privateKey, err := crypto.GenerateRSAKeyPair(2048)

// Encrypt with public key
ciphertext, err := crypto.EncryptRSA(publicKey, "secret message")

// Decrypt with private key
plaintext, err := crypto.DecryptRSA(privateKey, ciphertext)

PGP Encryption

Key Generation

// Generate PGP key pair
publicKey, privateKey, err := crypto.GeneratePGPKeyPair(
    "User Name",
    "user@example.com",
    "Key comment",
)

Asymmetric Encryption

// Encrypt for recipient
ciphertext, err := crypto.EncryptPGPToString(recipientPublicKey, "secret data")

// Decrypt with private key
plaintext, err := crypto.DecryptPGP(privateKey, ciphertext)

Symmetric Encryption

var buf bytes.Buffer
err := crypto.SymmetricallyEncryptPGP(&buf, "data", "passphrase")

Signing & Verification

// Sign data
signature, err := crypto.SignPGP(privateKey, "data to sign")

// Verify signature
err := crypto.VerifyPGP(publicKey, "data to sign", signature)
if err != nil {
    // Signature invalid
}

Hash Types

Constant Algorithm
crypt.SHA512 SHA-512
crypt.SHA256 SHA-256
crypt.SHA1 SHA-1
crypt.MD5 MD5
crypt.LTHN Custom LTHN hash

Frontend Usage (TypeScript)

import {
    Hash,
    GenerateRSAKeyPair,
    EncryptRSA,
    DecryptRSA
} from '@bindings/crypt/service';

// Hash data
const hash = await Hash("SHA256", "hello world");

// RSA encryption
const { publicKey, privateKey } = await GenerateRSAKeyPair(2048);
const encrypted = await EncryptRSA(publicKey, "secret");
const decrypted = await DecryptRSA(privateKey, encrypted);