{"id":20365997,"url":"https://github.com/altcha-org/altcha-lib-php","last_synced_at":"2026-02-28T04:51:44.062Z","repository":{"id":250301295,"uuid":"834069879","full_name":"altcha-org/altcha-lib-php","owner":"altcha-org","description":"A lightweight PHP library for creating and verifying ALTCHA challenges.","archived":false,"fork":false,"pushed_at":"2025-12-13T10:04:15.000Z","size":68,"stargazers_count":57,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-15T00:30:22.348Z","etag":null,"topics":["altcha","php"],"latest_commit_sha":null,"homepage":"https://altcha.org/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/altcha-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-26T10:56:30.000Z","updated_at":"2025-12-14T07:08:36.000Z","dependencies_parsed_at":"2024-07-26T12:28:03.320Z","dependency_job_id":"3eb4c18b-aaea-429a-a679-0cc3bc973fbf","html_url":"https://github.com/altcha-org/altcha-lib-php","commit_stats":null,"previous_names":["altcha-org/altcha-lib-php"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/altcha-org/altcha-lib-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altcha-org%2Faltcha-lib-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altcha-org%2Faltcha-lib-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altcha-org%2Faltcha-lib-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altcha-org%2Faltcha-lib-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/altcha-org","download_url":"https://codeload.github.com/altcha-org/altcha-lib-php/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altcha-org%2Faltcha-lib-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29924885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["altcha","php"],"created_at":"2024-11-15T00:21:44.464Z","updated_at":"2026-02-28T04:51:44.057Z","avatar_url":"https://github.com/altcha-org.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ALTCHA PHP Library\n\nThe ALTCHA PHP Library is a lightweight, zero-dependency library designed for creating and verifying [ALTCHA](https://altcha.org) challenges, specifically tailored for PHP applications.\n\n## Compatibility\n\nThis library is compatible with:\n\n- PHP 8.2+ (use version v0.x.x for older PHP version)\n- All major platforms (Linux, Windows, macOS)\n\n## Example\n\n- [Demo server](https://github.com/altcha-org/altcha-starter-php)\n\n## Installation\n\nTo install the ALTCHA PHP Library, use the following command:\n\n```sh\ncomposer require altcha-org/altcha\n```\n\n## Usage\n\nHere’s a basic example of how to use the ALTCHA PHP Library:\n\n```php\n\u003c?php\n\nrequire 'vendor/autoload.php';\n\nuse AltchaOrg\\Altcha\\ChallengeOptions;\nuse AltchaOrg\\Altcha\\Altcha;\n\n$altcha = new Altcha('secret hmac key');\n\n// Create a new challenge\n$options = new ChallengeOptions(\n    maxNumber: 50000, // the maximum random number\n    expires: (new \\DateTimeImmutable())-\u003eadd(new \\DateInterval('PT10S')),\n);\n\n$challenge = $altcha-\u003ecreateChallenge($options);\necho \"Challenge created: \" . json_encode($challenge) . \"\\n\";\n\n// Example payload to verify\n$payload = [\n    'algorithm' =\u003e $challenge-\u003ealgorithm,\n    'challenge' =\u003e $challenge-\u003echallenge,\n    'number'    =\u003e 12345, // Example number\n    'salt'      =\u003e $challenge-\u003esalt,\n    'signature' =\u003e $challenge-\u003esignature,\n];\n\n// Verify the solution\n$ok = $altcha-\u003everifySolution($payload, true);\n\nif ($ok) {\n    echo \"Solution verified!\\n\";\n} else {\n    echo \"Invalid solution.\\n\";\n}\n```\n\n## API\n\n### `Altcha::createChallenge(ChallengeOptions $options): Challenge`\n\nCreates a new challenge for ALTCHA.\n\n**Returns:** `Challenge`\n\n#### `ChallengeOptions`\n\n```php\n$options = new ChallengeOptions(\n    algorithm: Algorithm::SHA256,\n    maxNumber: BaseChallengeOptions::DEFAULT_MAX_NUMBER,\n    expires: (new \\DateTimeImmutable())-\u003eadd(new \\DateInterval('PT10S')),\n    params: ['query_param' =\u003e '123'],\n    saltLength: 12\n);\n```\n\n### `Altcha::verifySolution(array|string $payload, bool $checkExpires): bool`\n\nVerifies an ALTCHA solution.\n\n**Parameters:**\n\n- `data array|string`: The solution payload to verify.\n- `checkExpires bool`: Whether to check if the challenge has expired.\n\n**Returns:** `bool`\n\n### `Altcha::verifyFieldsHash(array $formData, array $fields, string $fieldsHash, Algorithm $algorithm): bool`\n\nVerifies the hash of form fields.\n\n**Parameters:**\n\n- `formData array`: The form data to hash.\n- `fields array`: The fields to include in the hash.\n- `fieldsHash string`: The expected hash value.\n- `algorithm string`: Hashing algorithm (`SHA-1`, `SHA-256`, `SHA-512`).\n\n**Returns:** `bool`\n\n### `Altcha::verifyServerSignature(array|string $payload): ServerSignatureVerification`\n\nVerifies the server signature.\n\n**Parameters:**\n\n- `data array|string`: The payload to verify (string or `ServerSignaturePayload` array).\n\n**Returns:** `ServerSignatureVerification`\n\n### `Altcha::solveChallenge(string $challenge, string $salt, Algorithm $algorithm, int $max, int $start = 0): array`\n\nFinds a solution to the given challenge.\n\n**Parameters:**\n\n- `challenge string`: The challenge hash.\n- `salt string`: The challenge salt.\n- `algorithm string`: Hashing algorithm (`SHA-1`, `SHA-256`, `SHA-512`).\n- `max int`: Maximum number to iterate to.\n- `start int`: Starting number.\n\n**Returns:** `null|Solution`\n\n## Generate obfuscation payload\n\nGenerate an obfuscated payload for client-side clarification:\n\n```php\n\u003c?php\n\n// With optional maxNumber (defaults to 10_000)\n$obfuscator = new \\AltchaOrg\\Altcha\\Obfuscator(); \n\n// Text to reveal after client-side PoW\n$plaintext = 'mailto:hello@example.com';\n\n// Optional shared key\n$key = 'shared-secret';\n\n// Optionally fix the counter; omit to use a random counter in [0, maxNumber]\n$fixedCounter = null;\n\n// Generate base64 obfuscated payload \n$payload = $obfuscator-\u003eobfuscateData($plaintext, $key, $fixedCounter);\n\necho $payload;\n// P7bJsUgzxP416d1voeF/QnQOD5g7GItB/zdfkoBrKgZK4N4IYkDJqg==\n```\n\n## Tests\n\n```sh\nvendor/bin/phpunit --bootstrap src/Altcha.php tests/AltchaTest.php\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltcha-org%2Faltcha-lib-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faltcha-org%2Faltcha-lib-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltcha-org%2Faltcha-lib-php/lists"}