private static FidoRegisterResponse GetValidRegisterResponse() { var registerResponse = new FidoRegisterResponse { RegistrationData = FidoRegistrationData.FromWebSafeBase64(TestVectors.RegistrationResponseDataBase64), ClientData = FidoClientData.FromJson(TestVectors.ClientDataRegister) }; return(registerResponse); }
public void FromJson() { var json = "{ \"registrationData\":\"BQQcH08Pj414DUayxwcgVU4Z5NXfkFeWz51FT-g5gW7GjPWprecrSECJBj1oNsEjkJynnFkIwZLL4NC6M46GnUopQGJUaobtq9pUKffgVYPJDDLHuAQZLoDz390Z5uwbdFkzYItk3L270bBIM-k0VO1DKF25SGP2XK9NZv-qxWQrV_gwggIcMIIBBqADAgECAgQk26tAMAsGCSqGSIb3DQEBCzAuMSwwKgYDVQQDEyNZdWJpY28gVTJGIFJvb3QgQ0EgU2VyaWFsIDQ1NzIwMDYzMTAgFw0xNDA4MDEwMDAwMDBaGA8yMDUwMDkwNDAwMDAwMFowKzEpMCcGA1UEAwwgWXViaWNvIFUyRiBFRSBTZXJpYWwgMTM1MDMyNzc4ODgwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQCsJS-NH1HeUHEd46-xcpN7SpHn6oeb-w5r-veDCBwy1vUvWnJanjjv4dR_rV5G436ysKUAXUcsVe5fAnkORo2oxIwEDAOBgorBgEEAYLECgEBBAAwCwYJKoZIhvcNAQELA4IBAQCjY64OmDrzC7rxLIst81pZvxy7ShsPy2jEhFWEkPaHNFhluNsCacNG5VOITCxWB68OonuQrIzx70MfcqwYnbIcgkkUvxeIpVEaM9B7TI40ZHzp9h4VFqmps26QCkAgYfaapG4SxTK5k_lCPvqqTPmjtlS03d7ykkpUj9WZlVEN1Pf02aTVIZOHPHHJuH6GhT6eLadejwxtKDBTdNTv3V4UlvjDOQYQe9aL1jUNqtLDeBHso8pDvJMLc0CX3vadaI2UVQxM-xip4kuGouXYj0mYmaCbzluBDFNsrzkNyL3elg3zMMrKvAUhoYMjlX_-vKWcqQsgsQ0JtSMcWMJ-umeDMEYCIQCKz0k0wQVooa638uF67HNyqNaa2vL5A-LkCDrLV5v74QIhAPjJ8UrQVCymLS1xoLWTw0CPD5U7DuerMqHgsvEnMR3c\",\"challenge\":\"V8D5zRbaeY3Dl_AR5U4g3eZb_HCpZgd17Jeh1LqacL0\",\"version\":\"U2F_V2\",\"appId\":\"http://localhost:3214\",\"clientData\":\"eyJ0eXAiOiJuYXZpZ2F0b3IuaWQuZmluaXNoRW5yb2xsbWVudCIsImNoYWxsZW5nZSI6IlY4RDV6UmJhZVkzRGxfQVI1VTRnM2VaYl9IQ3BaZ2QxN0plaDFMcWFjTDAiLCJvcmlnaW4iOiJodHRwOi8vbG9jYWxob3N0OjMyMTQiLCJjaWRfcHVia2V5IjoiIn0\"}"; var response = FidoRegisterResponse.FromJson(json); Assert.IsNotNull(response.RegistrationData); Assert.IsNotNull(response.ClientData); }
public FidoDeviceRegistration FinishRegistration(FidoStartedRegistration startedRegistration, string jsonDeviceResponse, IEnumerable <FidoFacetId> trustedFacetIds) { if (jsonDeviceResponse == null) { throw new ArgumentNullException("jsonDeviceResponse"); } var registerResponse = FidoRegisterResponse.FromJson(jsonDeviceResponse); return(FinishRegistration(startedRegistration, registerResponse, trustedFacetIds)); }
public FidoDeviceRegistration FinishRegistration(FidoStartedRegistration startedRegistration, FidoRegisterResponse registerResponse, IEnumerable <FidoFacetId> trustedFacetIds) { if (startedRegistration == null) { throw new ArgumentNullException("startedRegistration"); } if (registerResponse == null) { throw new ArgumentNullException("registerResponse"); } if (trustedFacetIds == null) { throw new ArgumentNullException("trustedFacetIds"); } registerResponse.Validate(); var clientData = registerResponse.ClientData; ExpectClientDataType(clientData, RegisterType); if (clientData.Challenge != startedRegistration.Challenge) { throw new InvalidOperationException("Incorrect challenge signed in client data"); } ValidateOrigin(trustedFacetIds, new FidoFacetId(clientData.Origin)); var registrationData = registerResponse.RegistrationData; VerifyResponseSignature(startedRegistration.AppId, registrationData, clientData); return(new FidoDeviceRegistration(registrationData.KeyHandle, registrationData.UserPublicKey, registrationData.AttestationCertificate, 0)); }