The ALTCHA Ruby Library is a lightweight, zero-dependency library designed for creating and verifying ALTCHA challenges.
This library is compatible with:
- Ruby 2.7+
To install the ALTCHA Ruby Library, add it to your Gemfile:
gem 'altcha'Then run:
bundle installAlternatively, install it directly using:
gem install altchaHere’s a basic example of how to use the ALTCHA Ruby Library:
require 'altcha'
hmac_key = 'secret hmac key'
# Create a new challenge
options = Altcha::ChallengeOptions.new(
hmac_key: hmac_key,
max_number: 100000 # the maximum random number
)
challenge = Altcha.create_challenge(options)
# Example payload to verify
payload = {
algorithm: challenge.algorithm,
challenge: challenge.challenge,
number: 12345, # Example number
salt: challenge.salt,
signature: challenge.signature
}
# Verify the solution
valid = Altcha.verify_solution(payload, hmac_key, true)
puts valid ? "Solution verified!" : "Invalid solution."Creates a new challenge for ALTCHA.
Parameters:
options [ChallengeOptions]:algorithm [String]: Hashing algorithm to use (SHA-1,SHA-256,SHA-512, default:SHA-256).max_number [Integer]: Maximum number for the random number generator (default: 1,000,000).salt_length [Integer]: Length of the random salt (default: 12 bytes).hmac_key [String]: Required HMAC key.salt [String]: Optional salt string. If not provided, a random salt will be generated.number [Integer]: Optional specific number to use. If not provided, a random number will be generated.expires [Time]: Optional expiration time for the challenge.params [Hash]: Optional URL-encoded query parameters.
Returns: Challenge
Verifies an ALTCHA solution.
Parameters:
payload [Hash]: The solution payload to verify.hmac_key [String]: The HMAC key used for verification.check_expires [Boolean]: Whether to check if the challenge has expired.
Returns: Boolean
Extracts URL parameters from the payload's salt.
Parameters:
payload [Hash]: The payload containing the salt.
Returns: Hash
Verifies the hash of form fields.
Parameters:
form_data [Hash]: The form data to hash.fields [Array<String>]: The fields to include in the hash.fields_hash [String]: The expected hash value.algorithm [String]: Hashing algorithm (SHA-1,SHA-256,SHA-512).
Returns: Boolean
Verifies the server's signature.
Parameters:
payload [String, ServerSignaturePayload]: The payload to verify (string orServerSignaturePayload).hmac_key [String]: The HMAC key used for verification.
Returns: [Boolean, ServerSignatureVerificationData]
Finds a solution to the given challenge.
Parameters:
challenge [String]: The challenge hash.salt [String]: The challenge salt.algorithm [String]: Hashing algorithm (SHA-1,SHA-256,SHA-512).max [Integer]: Maximum number to iterate to.start [Integer]: Starting number.
Returns: Solution, nil
MIT