public virtual void TestDecodeAuthenticateResponse() { KeySignResponse keySignResponse = RawMessageCodec .DecodeKeySignResponse(SIGN_RESPONSE_DATA.Segment()); Assert.AreEqual(new KeySignResponse(UserPresenceVerifierConstants.UserPresentFlag, COUNTER_VALUE, SIGNATURE_AUTHENTICATE), keySignResponse); }
public virtual void TestEncodeAuthenticateResponse() { var authenticateResponse = new KeySignResponse(UserPresenceVerifierConstants.UserPresentFlag, COUNTER_VALUE, SIGNATURE_AUTHENTICATE); var encodedBytes = RawMessageCodec.EncodeKeySignResponse(authenticateResponse); CollectionAssert.AreEqual(SIGN_RESPONSE_DATA, encodedBytes); }
public Task <KeyResponse <KeySignResponse> > SignAsync(KeySignRequest request, CancellationToken cancellationToken = new CancellationToken(), bool noWink = false) { if (request == null) { throw new ArgumentNullException(nameof(request)); } log.Info(">> authenticate"); var applicationSha256 = request.ApplicationSha256; var challengeSha256 = request.ChallengeSha256; var keyHandle = request.KeyHandle; log.Info(" -- Inputs --"); log.Info(" applicationSha256: " + applicationSha256.ToHexString()); log.Info(" challengeSha256: " + challengeSha256.ToHexString()); log.Info(" keyHandle: " + keyHandle.ToHexString()); var keyPair = dataStore.GetKeyPair(keyHandle); var counter = dataStore.IncrementCounter(); var userPresent = userPresenceVerifier.VerifyUserPresence(); if ((userPresent & UserPresenceVerifierConstants.UserPresentFlag) == 0) { return(TestOfUserPresenceRequired <KeySignResponse>()); } var signedData = RawMessageCodec.EncodeKeySignSignedBytes(applicationSha256, userPresent, counter, challengeSha256); log.Info("Signing bytes " + signedData.ToHexString()); var signature = crypto.Sign(signedData, keyPair.PrivateKey); log.Info(" -- Outputs --"); log.Info(" userPresence: " + userPresent); log.Info(" counter: " + counter); log.Info(" signature: " + signature.ToHexString()); log.Info("<< authenticate"); var response = new KeySignResponse(userPresent, counter, signature); var responseData = RawMessageCodec.EncodeKeySignResponse(response).Segment(); var apdu = new ApduResponse(ApduResponseStatus.NoError, responseData); var keyResponse = new KeyResponse <KeySignResponse>(apdu, response, KeyResponseStatus.Success); return(TaskEx.FromResult(keyResponse)); }
/// <exception cref="U2FException"/> public static byte[] EncodeKeySignResponse([NotNull] KeySignResponse keySignResponse) { if (keySignResponse == null) { throw new ArgumentNullException(nameof(keySignResponse)); } var userPresence = keySignResponse.UserPresence; var counter = keySignResponse.Counter; var signature = keySignResponse.Signature; var result = new byte[1 + 4 + signature.Length]; using (var writer = new EndianWriter(new MemoryStream(result), Endianness.BigEndian)) { writer.Write(userPresence); writer.Write(counter); writer.Write(signature); } return(result); }
/// <exception cref="System.IO.IOException"/> /// <exception cref="U2FException"/> public static void SendAuthenticateResponse(Stream outputStream, KeySignResponse keySignResponse) { SendResponse(outputStream, RawMessageCodec.EncodeKeySignResponse(keySignResponse)); }
public static SignOperationResult Success(KeySignRequest request, KeySignResponse response) { return new SignOperationResult(KeyResponseStatus.Success, request, response); }
private SignOperationResult(KeyResponseStatus status, KeySignRequest request, KeySignResponse response) { Status = status; Request = request; Response = response; }
public static SignOperationResult Success(KeySignRequest request, KeySignResponse response) { return(new SignOperationResult(KeyResponseStatus.Success, request, response)); }