| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package wire
- import (
- "crypto/md5"
- "io"
- )
- // WeakMD5PasswordHash hashes password and authKey for AIM v3.5-v4.7.
- //
- //goland:noinspection ALL
- func WeakMD5PasswordHash(pass, authKey string) []byte {
- hash := md5.New()
- io.WriteString(hash, authKey)
- io.WriteString(hash, pass)
- io.WriteString(hash, "AOL Instant Messenger (SM)")
- return hash.Sum(nil)
- }
- // StrongMD5PasswordHash hashes password and authKey for AIM v4.8+.
- //
- //goland:noinspection ALL
- func StrongMD5PasswordHash(pass, authKey string) []byte {
- top := md5.New()
- io.WriteString(top, pass)
- bottom := md5.New()
- io.WriteString(bottom, authKey)
- bottom.Write(top.Sum(nil))
- io.WriteString(bottom, "AOL Instant Messenger (SM)")
- return bottom.Sum(nil)
- }
- // RoastPassword toggles password obfuscation using a roasting algorithm for
- // AIM v1.0-v3.0 auth. The first call obfuscates the password, and the second
- // call de-obfuscates the password, and so on.
- func RoastPassword(roastedPass []byte) []byte {
- var roastTable = [16]byte{
- 0xF3, 0x26, 0x81, 0xC4, 0x39, 0x86, 0xDB, 0x92,
- 0x71, 0xA3, 0xB9, 0xE6, 0x53, 0x7A, 0x95, 0x7C,
- }
- clearPass := make([]byte, len(roastedPass))
- for i := range roastedPass {
- clearPass[i] = roastedPass[i] ^ roastTable[i%len(roastTable)]
- }
- return clearPass
- }
|