For details on how IRC works, see [RFC1459], [RFC2810], [RFC2811], [RFC2812], and [RFC2813]. Please note that IRC is extremely fragmented, and implementation details can vary wildly. Most implementations regard the latter RFCs as suggestions, not as binding. 1459: {}| are lower case of []\ Lines are CRLF-terminated, max 512 octets including the CRLF Lines are ::= [':' ] ::= | [ '!' ] [ '@' ] ::= { } | ::= ' ' { ' ' } ::= [ ':' | ] ::= ::= ::= CR LF 2) After extracting the parameter list, all parameters are equal, whether matched by or . is just a syntactic trick to allow SPACE within parameter. 5802 sample: C: n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL S: r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92, i=4096 C: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j, p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts= S: v=rmF9pqV8S7suAoZWja4dJRkFsKQ= Here is a complete example: Username: user Password: pencil Client generates the random nonce fyko+d2lbbFgONRv9qkxdawL Initial message: n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL Server generates the random nonce 3rfcNHYJY1ZVvWVs7j Server replies: r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096 The salt (hex): 4125c247e43ab1e93c6dff76 Client final message bare: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j Salted password (hex): 1d96ee3a529b5a5f9e47c01f229a2cb8a6e15f7d Client key (hex): e234c47bf6c36696dd6d852b99aaa2ba26555728 Stored key (hex): e9d94660c39d65c38fbad91c358f14da0eef2bd6 Auth message: n=user,r=fyko+d2lbbFgONRv9qkxdawL,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096,c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j Client signature (hex): 5d7138c486b0bfabdf49e3e2da8bd6e5c79db613 Client proof (hex): bf45fcbf7073d93d022466c94321745fe1c8e13b Server key (hex): 0fe09258b3ac852ba502cc62ba903eaacdbf7d31 Server signature (hex): ae617da6a57c4bbb2e0286568dae1d251905b0a4 Client final message: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts= Server final message: v=rmF9pqV8S7suAoZWja4dJRkFsKQ= Server's server signature (hex): ae617da6a57c4bbb2e0286568dae1d251905b0a4 SaltedPassword: HZbuOlKbWl+eR8AfIposuKbhX30= ClientKey: 4jTEe/bDZpbdbYUrmaqiuiZVVyg= StoredKey: 6dlGYMOdZcOPutkcNY8U2g7vK9Y= AuthMessage: t=user,r=fyko+d2lbbFgONRv0qkxdawL,r=fyko+d2lbbFgONRv0qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096,c=biws,r=fyko+d21bbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j ClientSignature: XXE4xIawv6vfSePi2ovW5cedthM= ClientProof: v0X8v3Bz2T0CJGbJQyF0X+HI4Ts= client first message = n=user,r=fyko+d2lbbFgONRv9qkxdawL server first message = r=fyko+d2lbbFgONRv9qkxdawLHo+Vgk7qvUOKUwuWLIWg4l/9SraGMHEE,s=rQ9ZY3MntBeuP3E1DTVC4W==,i=10000 server nonce = fyko+d2lbbFgONRv9qkxdawLHo+Vgk7qvUOKUwuWLIWg4l/9SraGMHEE server salt = rQ9ZY3MntBeuP3E1DTVC4W== iterations = 10000