What problem does it solve? Adding encryption to sensitive OrangeHRM columns (SSN, salary, SMTP passwords) requires coordinating migrations, Doctrine EntityListeners, and the Cryptographer class correctly — a mistake like missing the encryptionEnabled() guard or hasChangedField() check causes save errors or double-encrypted data. This Skill documents the exact patterns so you implement them correctly the first time. ## Core Features & Use Cases - Field-Level Encryption: Guides the end-to-end pattern for encrypting new sensitive columns using AES-256-GCM via the Cryptographer class, KeyHandler key file, and EncryptionHelperTrait in EntityListeners, including VARCHAR(512) column sizing. - Password Hashing: Documents the PasswordHash wrapper around PHP's password_hash/password_verify with bcrypt cost 12 for user credential storage and verification. - CSRF Protection: Explains Symfony CsrfTokenManagerTrait usage for login and sensitive form flows. - Use Case: You need to add an encrypted bankAccountNumber column to the Employee entity. Follow the four-step recipe: widen the column in a migration, annotate the entity with a listener, implement the four symmetric encrypt/decrypt callbacks, and guard every call with encryptionEnabled(). ## Quick Start Ask the assistant to add encryption to a new sensitive field on an OrangeHRM entity following the security-primitives pattern.