U +Mb@sxddlZddlmZddlmZddlmZddlmZddl m Z m Z m Z ddZ d d Zd d Zd dZddZdS)N)AES)SHA512) _bcrypt_hash)strxor)tostrbchrbordcCs<t|dkrtdtd|ddd}||ddfS)NzInsufficient data>Ir)len ValueErrorstructunpack)datavaluer@/tmp/pip-target-t616c12r/lib/python/Crypto/PublicKey/_openssh.py read_int4(s rcCs8t|\}}t||kr td|d|||dfS)NzInsufficient data (V))rr r )rsizerrr read_bytes/s  rcCst|\}}t||fS)N)rr)rsdrrr read_string6s rcCs2t|D]$\}}t||dd@krtdqdS)NzIncorrect padding) enumeraterr )padvxrrr check_padding;srcCsT|dstd|dd}t|\}}t|\}}t|\}}t|\}}|dkr^tdt|\}}t|\}}|rtdt|ddkrtd |d kr|}nl||fd krtd ||ft|\} }t|\} }t| d krtd|rtdt|} g} d} t ddD]}t| t d|}t | d|| d}t j d t d|}t|}t d| D]D}t | dt|| d}t j d!t d|}t|||dqt| |ddqdddt| D}tj|ddtjd|ddd}||}t|\}}t|\}}||kr@tdt|\}}||fS)"Nsopenssh-key-v1zIncorrect magic valuerzWe only handle 1 key at a timez Too much datarzIncorrect payload lengthnone)z aes256-ctrZbcryptz#Unsupported encryption scheme %s/%szIncorrect salt lengthzToo much data in kdfoptionss OxychromaticBlowfishSwatDynamiter F IIIIIIII)outputcSs g|]\}}t|t|qSr)r).0abrrr ysz2import_openssh_private_generic.. 0)nonce initial_valuezIncorrect checksum)r&)r&) startswithr rrrr rnewdigestranger packrr bytearrayrappendjoinziprZMODE_CTRdecrypt)rpasswordZ ciphernameZkdfnameZ kdfoptionsZnumber_of_keys_ encryptedZ decryptedsalt iterationsZ pwd_sha512ZstripesZconstantcountZ salt_sha512Zout_leoutaccresultcipherZ checkint1Z checkint2Zssh_namerrrimport_openssh_private_genericAsf                  rF)r Z Crypto.CipherrZ Crypto.HashrZCrypto.Protocol.KDFrZCrypto.Util.strxorrZCrypto.Util.py3compatrrrrrrrrFrrrrs