# Warning: sodium_crypto_sign_secretkey(): Argument #1 ($key_pair) must be an opaque key pair (SODIUM_CRYPTO_SIGN_KEYPAIR) in /var/www/app/src/Auth/Ed25519Signer.php on line 34

- **ID:** `php/sodium-crypto-sign-keypair-invalid`
- **Domain:** php
- **Category:** type_error
- **Verification:** ai_generated
- **Fix Rate:** 85%

## Root Cause

Passing a raw string or invalid object to sodium_crypto_sign_secretkey() instead of a valid key pair generated by sodium_crypto_sign_keypair().

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| PHP 8.1.29 | active | — | — |
| PHP 8.2.17 | active | — | — |
| PHP 8.3.4 | active | — | — |

## Workarounds

1. **Always generate key pairs with sodium_crypto_sign_keypair() and store the entire binary output, then reconstruct with sodium_crypto_sign_secretkey(): $keyPair = sodium_crypto_sign_keypair(); $secretKey = sodium_crypto_sign_secretkey($keyPair);** (90% success)
   ```
   Always generate key pairs with sodium_crypto_sign_keypair() and store the entire binary output, then reconstruct with sodium_crypto_sign_secretkey(): $keyPair = sodium_crypto_sign_keypair(); $secretKey = sodium_crypto_sign_secretkey($keyPair);
   ```
2. **If loading from storage, use sodium_crypto_sign_keypair_from_secretkey_and_publickey() with both parts: $keyPair = sodium_crypto_sign_keypair_from_secretkey_and_publickey($secret, $public);** (85% success)
   ```
   If loading from storage, use sodium_crypto_sign_keypair_from_secretkey_and_publickey() with both parts: $keyPair = sodium_crypto_sign_keypair_from_secretkey_and_publickey($secret, $public);
   ```

## Dead Ends

- **** — Base64-decoding the key pair string and passing the raw bytes directly, assuming it's the same as the key pair object, fails because sodium expects a specific internal structure. (85% fail)
- **** — Using sodium_crypto_sign_seed_keypair() with an invalid seed length (not exactly 32 bytes) produces a different error but still doesn't fix the type issue. (70% fail)
