133 lines
2.7 KiB
Markdown
133 lines
2.7 KiB
Markdown
# 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
|
|
|
|
```go
|
|
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
|
|
|
|
```go
|
|
// 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
|
|
|
|
```go
|
|
// 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
|
|
|
|
```go
|
|
// 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
|
|
|
|
```go
|
|
// Generate PGP key pair
|
|
publicKey, privateKey, err := crypto.GeneratePGPKeyPair(
|
|
"User Name",
|
|
"user@example.com",
|
|
"Key comment",
|
|
)
|
|
```
|
|
|
|
### Asymmetric Encryption
|
|
|
|
```go
|
|
// Encrypt for recipient
|
|
ciphertext, err := crypto.EncryptPGPToString(recipientPublicKey, "secret data")
|
|
|
|
// Decrypt with private key
|
|
plaintext, err := crypto.DecryptPGP(privateKey, ciphertext)
|
|
```
|
|
|
|
### Symmetric Encryption
|
|
|
|
```go
|
|
var buf bytes.Buffer
|
|
err := crypto.SymmetricallyEncryptPGP(&buf, "data", "passphrase")
|
|
```
|
|
|
|
### Signing & Verification
|
|
|
|
```go
|
|
// 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)
|
|
|
|
```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);
|
|
```
|