xmpp: Add a test for SCRAM-SHA-256
This commit is contained in:
		
							parent
							
								
									d8ce793d81
								
							
						
					
					
						commit
						e94e48bad6
					
				@ -207,9 +207,9 @@ Future<void> entrypoint() async {
 | 
				
			|||||||
      StreamManagementNegotiator(),
 | 
					      StreamManagementNegotiator(),
 | 
				
			||||||
      CSINegotiator(),
 | 
					      CSINegotiator(),
 | 
				
			||||||
      RosterFeatureNegotiator(),
 | 
					      RosterFeatureNegotiator(),
 | 
				
			||||||
      // TODO(Unknown): These two may not work
 | 
					      // TODO(Unknown): This one may not work
 | 
				
			||||||
      //SaslScramNegotiator(10, '', '', ScramHashType.sha512),
 | 
					      //SaslScramNegotiator(10, '', '', ScramHashType.sha512),
 | 
				
			||||||
      //SaslScramNegotiator(9, '', '', ScramHashType.sha256),
 | 
					      SaslScramNegotiator(9, '', '', ScramHashType.sha256),
 | 
				
			||||||
      SaslScramNegotiator(8, '', '', ScramHashType.sha1),
 | 
					      SaslScramNegotiator(8, '', '', ScramHashType.sha1),
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,22 @@ final scramSha1StreamFeatures = XMLNode(
 | 
				
			|||||||
      children: [
 | 
					      children: [
 | 
				
			||||||
        XMLNode(
 | 
					        XMLNode(
 | 
				
			||||||
          tag: 'mechanism',
 | 
					          tag: 'mechanism',
 | 
				
			||||||
          text: 'SCRAM-SHA1',
 | 
					          text: 'SCRAM-SHA-1',
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					final scramSha256StreamFeatures = XMLNode(
 | 
				
			||||||
 | 
					  tag: 'stream:features',
 | 
				
			||||||
 | 
					  children: [
 | 
				
			||||||
 | 
					    XMLNode.xmlns(
 | 
				
			||||||
 | 
					      tag: 'mechanisms',
 | 
				
			||||||
 | 
					      xmlns: saslXmlns,
 | 
				
			||||||
 | 
					      children: [
 | 
				
			||||||
 | 
					        XMLNode(
 | 
				
			||||||
 | 
					          tag: 'mechanism',
 | 
				
			||||||
 | 
					          text: 'SCRAM-SHA-256',
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
@ -38,6 +53,8 @@ void main() {
 | 
				
			|||||||
          getManagerNullStub,
 | 
					          getManagerNullStub,
 | 
				
			||||||
          () => JID.fromString('user@server'),
 | 
					          () => JID.fromString('user@server'),
 | 
				
			||||||
          () => fakeSocket,
 | 
					          () => fakeSocket,
 | 
				
			||||||
 | 
					          () => false,
 | 
				
			||||||
 | 
					          (_) {},
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -89,6 +106,29 @@ void main() {
 | 
				
			|||||||
      expect(await negotiator.calculateChallengeResponse('cj1meWtvK2QybGJiRmdPTlJ2OXFreGRhd0wzcmZjTkhZSlkxWlZ2V1ZzN2oscz1RU1hDUitRNnNlazhiZjkyLGk9NDA5Ng=='), 'c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=');
 | 
					      expect(await negotiator.calculateChallengeResponse('cj1meWtvK2QybGJiRmdPTlJ2OXFreGRhd0wzcmZjTkhZSlkxWlZ2V1ZzN2oscz1RU1hDUitRNnNlazhiZjkyLGk9NDA5Ng=='), 'c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  test('Test SASL SCRAM-SHA-256', () async {
 | 
				
			||||||
 | 
					      final negotiator = SaslScramNegotiator(0, 'n=user,r=rOprNGfwEbeRWgbNEkqO', 'rOprNGfwEbeRWgbNEkqO', ScramHashType.sha256);
 | 
				
			||||||
 | 
					      negotiator.register(
 | 
				
			||||||
 | 
					        NegotiatorAttributes(
 | 
				
			||||||
 | 
					          (XMLNode _, {String? redact}) {},
 | 
				
			||||||
 | 
					          () => ConnectionSettings(jid: JID.fromString('user@server'), password: 'pencil', useDirectTLS: true, allowPlainAuth: true),
 | 
				
			||||||
 | 
					          (_) async {},
 | 
				
			||||||
 | 
					          getNegotiatorNullStub,
 | 
				
			||||||
 | 
					          getManagerNullStub,
 | 
				
			||||||
 | 
					          () => JID.fromString('user@server'),
 | 
				
			||||||
 | 
					          () => fakeSocket,
 | 
				
			||||||
 | 
					          () => false,
 | 
				
			||||||
 | 
					          (_) {},
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      await negotiator.negotiate(scramSha256StreamFeatures);
 | 
				
			||||||
 | 
					      await negotiator.negotiate(XMLNode.fromString("<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>cj1yT3ByTkdmd0ViZVJXZ2JORWtxTyVodllEcFdVYTJSYVRDQWZ1eEZJbGopaE5sRiRrMCxzPVcyMlphSjBTTlk3c29Fc1VFamI2Z1E9PSxpPTQwOTYK</challenge>"));
 | 
				
			||||||
 | 
					      await negotiator.negotiate(XMLNode.fromString("<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>dj02cnJpVFJCaTIzV3BSUi93dHVwK21NaFVaVW4vZEI1bkxUSlJzamw5NUc0PQo=</success>"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(negotiator.state, NegotiatorState.error);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  test('Test a positive server signature check', () async {
 | 
					  test('Test a positive server signature check', () async {
 | 
				
			||||||
      final negotiator = SaslScramNegotiator(0, 'n=user,r=fyko+d2lbbFgONRv9qkxdawL', 'fyko+d2lbbFgONRv9qkxdawL', ScramHashType.sha1);
 | 
					      final negotiator = SaslScramNegotiator(0, 'n=user,r=fyko+d2lbbFgONRv9qkxdawL', 'fyko+d2lbbFgONRv9qkxdawL', ScramHashType.sha1);
 | 
				
			||||||
      negotiator.register(
 | 
					      negotiator.register(
 | 
				
			||||||
@ -100,6 +140,8 @@ void main() {
 | 
				
			|||||||
          getManagerNullStub,
 | 
					          getManagerNullStub,
 | 
				
			||||||
          () => JID.fromString('user@server'),
 | 
					          () => JID.fromString('user@server'),
 | 
				
			||||||
          () => fakeSocket,
 | 
					          () => fakeSocket,
 | 
				
			||||||
 | 
					          () => false,
 | 
				
			||||||
 | 
					          (_) {},
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -121,6 +163,8 @@ void main() {
 | 
				
			|||||||
          getManagerNullStub,
 | 
					          getManagerNullStub,
 | 
				
			||||||
          () => JID.fromString('user@server'),
 | 
					          () => JID.fromString('user@server'),
 | 
				
			||||||
          () => fakeSocket,
 | 
					          () => fakeSocket,
 | 
				
			||||||
 | 
					          () => false,
 | 
				
			||||||
 | 
					          (_) {},
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -142,6 +186,8 @@ void main() {
 | 
				
			|||||||
          getManagerNullStub,
 | 
					          getManagerNullStub,
 | 
				
			||||||
          () => JID.fromString('user@server'),
 | 
					          () => JID.fromString('user@server'),
 | 
				
			||||||
          () => fakeSocket,
 | 
					          () => fakeSocket,
 | 
				
			||||||
 | 
					          () => false,
 | 
				
			||||||
 | 
					          (_) {},
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user