Example #1
0
        public virtual void TestDecodeAuthenticateResponse()
        {
            KeySignResponse keySignResponse = RawMessageCodec
                                              .DecodeKeySignResponse(SIGN_RESPONSE_DATA.Segment());

            Assert.AreEqual(new KeySignResponse(UserPresenceVerifierConstants.UserPresentFlag, COUNTER_VALUE, SIGNATURE_AUTHENTICATE), keySignResponse);
        }
Example #2
0
 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);
 }
Example #3
0
        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);
        }
Example #4
0
        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));
        }
Example #5
0
        /// <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);
        }
Example #6
0
 /// <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;
 }
Example #9
0
 /// <exception cref="System.IO.IOException"/>
 /// <exception cref="U2FException"/>
 public static void SendAuthenticateResponse(Stream outputStream, KeySignResponse
     keySignResponse)
 {
     SendResponse(outputStream, RawMessageCodec.EncodeKeySignResponse(keySignResponse));
 }
Example #10
0
 public static SignOperationResult Success(KeySignRequest request, KeySignResponse response)
 {
     return(new SignOperationResult(KeyResponseStatus.Success, request, response));
 }
Example #11
0
 private SignOperationResult(KeyResponseStatus status, KeySignRequest request, KeySignResponse response)
 {
     Status   = status;
     Request  = request;
     Response = response;
 }