Fasáda Crypto
Crypto sprístupňuje RoundlyConsulting\Crypto\CryptoManager, takže po napísaní Crypto:: uvidíte každý vstupný bod — kľúče, signery, JOSE, JWK, X.509, ASN.1, hašovanie, autentifikované šifrovanie, COSE, OTP, CSPRNG a kódeky. Je to odporúčaný spôsob použitia a každá časť tejto dokumentácie začína práve ním. Každá továreň aj tak prijíma kľúče a nastavenia ako explicitné argumenty; manažér nečíta konfiguráciu ani nedrží tajný kľúč:
use RoundlyConsulting\Crypto\Facades\Crypto;
use RoundlyConsulting\Crypto\Hash\HashAlgorithm;
use RoundlyConsulting\Crypto\Signature\Algorithm;
// Keys: every key family the signers take, loaded, generated or bootstrapped
$rsa = Crypto::keys()->rsa()->privateFromStorage('local', 'keys/rsa.pem');
$rsaPub = Crypto::keys()->rsa()->publicFromConfig('jwt.public_key');
$ec = Crypto::keys()->ec()->generate('P-384');
$ed = Crypto::keys()->ed25519()->public($raw32Bytes);
$secret = Crypto::keys()->hmac()->fromConfig('services.webhook.secret');
// Signers and JOSE
$token = Crypto::jws()->sign(['kid' => 'k1'], ['sub' => 'alice'], Crypto::rs($rsa));
$claims = Crypto::jws()->verify($token, Crypto::rs($rsaPub), Algorithm::RS256);
$sig = Crypto::es($ec)->sign($message); // raw r‖s, as JOSE wants it
$der = Crypto::ecDer()->fromRaw($sig, 48); // DER, as OpenSSL wants it
Crypto::verifier()->verify($publicKey, $message, $sig); // the key picks the algorithm
// Hashing, encryption, OTP, JWK, X.509, COSE
Crypto::hmac(HashAlgorithm::Sha256)->verify($payload, $signature, $webhookKey);
$sealed = Crypto::aes256Gcm()->seal($dataKey, $plaintext, associatedData: 'invoices:42');
Crypto::totp(digits: 8)->verify($otpSecret, $code);
Crypto::jwk($ec)->thumbprint();
Crypto::x509()->fromPem($pem)->fingerprint();
Crypto::x509()->chain()->fromX5c($x5c)->isLinked(); // the math — the trust call stays yours
Crypto::coseKey($coseBytes); // COSE_Key bytes -> a public key
// Randomness and codecs return the value directly
$code = Crypto::random()->numeric(6);
$apiKey = Crypto::random()->token(40);
$b64u = Crypto::base64UrlEncode($bytes);Metódy kódekov a CSPRNG vracajú vypočítanú hodnotu; všetky ostatné vracajú krátkodobú inštanciu — signer, dekodér, kľúč alebo hodnotový objekt. Jwk, Certificate a Chain sú hodnotové objekty — fasáda ich sprístupňuje pre prehľadnosť, v kontajneri však nie sú registrované ako singletony.
Vnorené prístupy
Štyri metódy vracajú malú bezstavovú skupinu súvisiacich tovární. Každá metóda skupiny zachováva presné názvy parametrov, typy, predvolené hodnoty a výnimky svojej továrne — túto zhodu v oboch smeroch stráži architektonický test:
| Prístup | Vracia | Metódy |
|---|---|---|
keys() | Signature\Key\Keys | rsa() · ec() · ed25519() · hmac() — jedna skupina pre každú rodinu kľúčov; pozrite Načítanie a generovanie kľúčov. |
random() | Random\Csprng | bytes() · token() · numeric() · alphanumeric() · fromAlphabet() · secret() — hodnoty z CSPRNG, vrátené priamo. |
x509() | X509\Certificates | fromPem() · fromDer() · fromBase64() · chain() — certifikáty z PEM, DER alebo položky x5c. |
x509()->chain() | X509\Chains | fromX5c() · fromPems() · fromPemBundle() · fromCertificates() — reťazce z x5c, zoznamov PEM, balíkov alebo načítaných certifikátov. |
ecDer() | Signature\Ec\DerCodec | fromRaw() · toRaw() · isValid() — surové ECDSA r‖s ↔ DER. |
Ploché skratky — certificate(), chainFromX5c(), chainFromPemBundle(), generateHmacSecret() a randomBytes() / randomToken() / randomSecret() — prechádzajú tými istými vnorenými prístupmi, takže oba zápisy spúšťajú rovnaký kód.
Všetky metódy podľa oblasti
| Oblasť | Metódy |
|---|---|
| JOSE / JWK | jws() · jwk($key) · jwkFromArray($members) · jwkFromJson($json) |
| Kľúče | keys()->rsa() / ->ec() / ->ed25519(): public() · private() · generate() · publicFromStorage() · privateFromStorage() · publicFromConfig() · privateFromConfig() · fromStorageOrGenerate(); rsa()->fromModulusExponent() · ec()->fromCoordinates() |
| Tajné kľúče HMAC | keys()->hmac(): fromString() · generate() · fromStorage() · fromConfig() · fromStorageOrGenerate(); shortcut generateHmacSecret($bytes = 32) |
| Signery | hs($secret, $algorithm) · rs($key, $algorithm) · es($key) · eddsa($key) · verifier() |
| Kódovanie ECDSA | ecDer(): fromRaw($rawRS, $coordBytes) · toRaw($der, $coordBytes) · isValid($der) |
| X.509 | x509(): fromPem() · fromDer() · fromBase64() · chain() → fromX5c() · fromPems() · fromPemBundle() · fromCertificates(); shortcuts certificate($pem) · chainFromX5c($x5c) · chainFromPemBundle($bundle) |
| ASN.1 / DER | derDecoder() |
| Hašovanie | hmac($algorithm) · digest($algorithm) · constantTimeEquals($known, $user) |
| Autentifikované šifrovanie | aes256Gcm(): seal() · open() · encrypt() · decrypt() |
| COSE / WebAuthn | cbor() · coseKey($coseBytes) · authenticatorData($bytes) |
| OTP | totp($algorithm, $digits, $period) · hotp($algorithm, $digits) · provisioningUri($secret, $label, $issuer, …) |
| CSPRNG | random(): bytes() · token() · numeric() · alphanumeric() · fromAlphabet() · secret(); shortcuts randomBytes() · randomToken() · randomSecret() |
| Kódeky | base64UrlEncode / base64UrlDecode · base64Encode / base64Decode · base32Encode / base32Decode · hexEncode / hexDecode |
Chcete rovnaké API bez statických volaní? Pozrite si časť DI a priame triedy.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.