private string GetRandomBase64String(int minLength) { byte[] randomBytes = randomByteGenerator.Generate(minLength); string randomBase64String = Convert.ToBase64String(randomBytes); return(randomBase64String); }
public void Authenticate_should_have_expected_result( [Values(false, true)] bool async) { var dateTime = DateTime.UtcNow; var clientNonce = __randomByteGenerator.Generate(ClientNonceLength); var serverNonce = Combine(clientNonce, __randomByteGenerator.Generate(ClientNonceLength)); var host = "sts.amazonaws.com"; var credential = new UsernamePasswordCredential("$external", "permanentuser", "FAKEFAKEFAKEFAKEFAKEfakefakefakefakefake"); AwsSignatureVersion4.CreateAuthorizationRequest( dateTime, credential.Username, credential.Password, null, serverNonce, host, out var authHeader, out var timestamp); var mockClock = new Mock <IClock>(); mockClock.Setup(x => x.UtcNow).Returns(dateTime); var mockRandomByteGenerator = new Mock <IRandomByteGenerator>(); mockRandomByteGenerator.Setup(x => x.Generate(It.IsAny <int>())).Returns(clientNonce); var expectedClientFirstMessage = new BsonDocument { { "r", clientNonce }, { "p", (int)'n' } }; var expectedClientSecondMessage = new BsonDocument { { "a", authHeader }, { "d", timestamp } }; var serverFirstMessage = new BsonDocument { { "s", serverNonce }, { "h", host } }; var saslStartCommandResponse = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson( $"{{ conversationId : 1, done : false, payload : BinData(0,\"{ToBase64(serverFirstMessage.ToBson())}\"), ok : 1 }}")); var saslContinueCommandResponse = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson( "{ conversationId : 1, done : true, payload : BinData(0,\"\"), ok : 1}")); var subject = new MongoAWSAuthenticator(credential, null, mockRandomByteGenerator.Object, mockClock.Object, serverApi: null); var connection = new MockConnection(__serverId); connection.EnqueueCommandResponseMessage(saslStartCommandResponse); connection.EnqueueCommandResponseMessage(saslContinueCommandResponse); connection.Description = __descriptionCommandWireProtocol; if (async) { subject.AuthenticateAsync(connection, __descriptionCommandWireProtocol, CancellationToken.None).GetAwaiter().GetResult(); } else { subject.Authenticate(connection, __descriptionCommandWireProtocol, CancellationToken.None); } SpinWait.SpinUntil(() => connection.GetSentMessages().Count >= 2, TimeSpan.FromSeconds(5)).Should().BeTrue(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(2); var actualRequestId0 = sentMessages[0]["requestId"].AsInt32; var actualRequestId1 = sentMessages[1]["requestId"].AsInt32; var expectedFirstMessage = GetExpectedSaslStartCommandMessage(actualRequestId0, expectedClientFirstMessage); var expectedSecondMessage = GetExpectedSaslContinueCommandMessage(actualRequestId1, expectedClientSecondMessage); sentMessages[0].Should().Be(expectedFirstMessage); sentMessages[1].Should().Be(expectedSecondMessage); }
private byte[] GenerateRandomBytes() { return(_randomByteGenerator.Generate(ClientNonceLength)); }