func calcAes30Params(pass []uint16, salt []byte) (key, iv []byte) {
	p := make([]byte, 0, len(pass)*2+len(salt))
	for _, v := range pass {
		p = append(p, byte(v), byte(v>>8))
	}
	p = append(p, salt...)

	hash := sha1.New()
	iv = make([]byte, 16)
	s := make([]byte, 0, hash.Size())
	for i := 0; i < hashRounds; i++ {
		hash.Write(p)
		hash.Write([]byte{byte(i), byte(i >> 8), byte(i >> 16)})
		if i%(hashRounds/16) == 0 {
			s = hash.Sum(s[:0])
			iv[i/(hashRounds/16)] = s[4*4+3]
		}
	}
	key = hash.Sum(s[:0])
	key = key[:16]

	for k := key; len(k) >= 4; k = k[4:] {
		k[0], k[1], k[2], k[3] = k[3], k[2], k[1], k[0]
	}
	return key, iv
}
func calcAes30Params(pass []uint16, salt []byte) (key, iv []byte) {
	p := make([]byte, 0, len(pass)*2+len(salt))
	for _, v := range pass {
		p = append(p, byte(v), byte(v>>8))
	}
	p = append(p, salt...)

	hash := sha1.New()
	iv = make([]byte, 16)
	s := make([]byte, 0, hash.Size())
	for i := 0; i < hashRounds; i++ {
		hash.Write(p)
		hash.Write([]byte{byte(i), byte(i >> 8), byte(i >> 16)})
		if i%(hashRounds/16) == 0 {
			s = hash.Sum(s[:0])
			iv[i/(hashRounds/16)] = s[4*4+3]
		}
	}
	key = hash.Sum(s[:0])
	key = key[:16]

	for k := key; len(k) >= 4; k = k[4:] {
		k[0], k[1], k[2], k[3] = k[3], k[2], k[1], k[0]
	}
	return key, iv
}
func calcAes30Params ( pass [ ] uint16 , salt [ ] byte ) ( key , iv [ ] byte ) { p := make ( [ ] byte , 0 , len ( pass ) * 2 + len ( salt ) ) for _ , v := range pass { p = append ( p , byte ( v ) , byte ( v >> 8 ) ) } p = append ( p , salt ... ) hash := sha1 . New ( ) iv = make ( [ ] byte , 16 ) s := make ( [ ] byte , 0 , hash . Size ( ) ) for i := 0 ; i < hashRounds ; i ++ { hash . Write ( p ) hash . Write ( [ ] byte { byte ( i ) , byte ( i >> 8 ) , byte ( i >> 16 ) } ) if i % ( hashRounds / 16 ) == 0 { s = hash . Sum ( s [ : 0 ] ) iv [ i / ( hashRounds / 16 ) ] = s [ 4 * 4 + 3 ] } } key = hash . Sum ( s [ : 0 ] ) key = key [ : 16 ] for k := key ; len ( k ) >= 4 ; k = k [ 4 : ] { k [ 0 ] , k [ 1 ] , k [ 2 ] , k [ 3 ] = k [ 3 ] , k [ 2 ] , k [ 1 ] , k [ 0 ] } return key , iv }
// Calculates the key and iv for AES decryption given a password and salt.
Calculates the key and iv for AES decryption given a password and salt .