VerifyResponse Method
This method verifies the response.
Object Oriented Interface
public function doVerifyResponse();
Procedural Interface
ipworksauth_ocra_do_verifyresponse($res);
Remarks
This method verifies the response and returns True or False depending on the result.
Before calling this method set OCRASuite, Challenge, and Response.
After setting OCRASuite the following properties are populated, which provide requirements for the response:
- ChallengeFormat
- HashAlgorithm
- ResponseLength
- RequireCounter
- RequirePassword
- RequireTimeStamp
- PasswordHashAlgorithm
- RequireSessionInfo
- SessionInfoLength
- TimeStepSize
- TimeStepUnit
These properties may be inspected to determine the requirements. Provide any required values such as Counter or Password. Set Challenge to the original challenge that was issued. Set Response to the received response. Set Key to the key used during the HMAC computation.
Call this method to verify the response. The method will return True if the verification was successful, False otherwise.
The following properties are applicable when calling this method:
- Challenge
- Response
- Counter
- HashAlgorithm
- Key
- OCRASuite
- Password
- ResponseLength
- CurrentTime
- SessionInfo
- TimeStepSize
- TimeStepUnit
- PasswordHashAlgorithm
Random Challenge Example
//First create the challenge on machine A
Ocra ocra =
new
Ocra();
ocra.ChallengeType = OcraChallengeTypes.ctRandom;
ocra.ChallengeLength = 10;
ocra.ChallengeFormat = OcraChallengeFormats.cfNumeric;
ocra.CreateChallenge();
string
challenge = ocra.Challenge;
//Value like "3891592139"
string
ocraSuite = ocra.OCRASuite;
//Value "OCRA-1:HOTP-SHA1-6:QN10"
//Send Challenge and OCRASuite to Machine B
//Upon receiving the challenge on Machine B, calculate a response
ocra =
new
Ocra();
ocra.OCRASuite = ocraSuite;
//Received from other party
ocra.Challenge = challenge;
//Received from other party
ocra.Key =
"shared secret key"
;
ocra.CalculateResponse();
string
response = ocra.Response;
//Value like "574464"
//Send Response back to Machine A
//Upon receiving the response on Machine A, verify it
ocra =
new
Ocra();
ocra.OCRASuite = ocraSuite;
//Original OCRASuite saved before sending the original challenge
ocra.Challenge = challenge;
//Original challenge that was sent
ocra.Response = response;
//Received from other party
ocra.Key =
"shared secret key"
;
bool
isValid = ocra.VerifyResponse();
//Returns True if verified
//First create the challenge on machine A
Ocra ocra =
new
Ocra();
ocra.ChallengeType = OcraChallengeTypes.ctSignature;
ocra.ChallengeInput =
"test input"
;
ocra.Key =
"signature key"
;
ocra.ChallengeFormat = OcraChallengeFormats.cfHex;
ocra.CreateChallenge();
string
challenge = ocra.Challenge;
//Value like "973131F0"
string
ocraSuite = ocra.OCRASuite;
//Value "OCRA-1:HOTP-SHA1-6:QH08"
//Send Challenge and OCRASuite to Machine B
//Upon receiving the challenge on Machine B, calculate a response
ocra =
new
Ocra();
ocra.OCRASuite = ocraSuite;
//Received from other party
ocra.Challenge = challenge;
//Received from other party
ocra.Key =
"shared secret key"
;
ocra.CalculateResponse();
string
response = ocra.Response;
//Value like "574464"
//Send Response back to Machine A
//Upon receiving the response on Machine A, verify it
ocra =
new
Ocra();
ocra.OCRASuite = ocraSuite;
//Original OCRASuite saved before sending the original challenge
ocra.Challenge = challenge;
//Original challenge that was sent
ocra.Response = response;
//Received from other party
ocra.Key =
"shared secret key"
;
bool
isValid = ocra.VerifyResponse();
//Returns True if verified