Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/keyring/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/keyring/backend.pyc


;Pc@sUdZddlZddlZddlZddlZddlZddlZddlZddlm	Z
ddlZddlm
Z
ddlZddlZddlZejjZejjZdefdYZdefdYZd	efd
YZdefdYZd
efdYZdefdYZeaeedZy$ddlm Z ddl!m"Z"Wne#k
re$Z%nXe&Z%defdYZ'defdYZ(de(fdYZ)de(fdYZ*de(fdYZ+defdYZ,d efd!YZ-d"Z.ea/d#Z0dS($s-
backend.py

Keyring Backend implementations
iN(tescape(t
propertiestPasswordSetErrorcBseZdZRS(s+Raised when the password can't be set.
    (t__name__t
__module__t__doc__(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRstKeyringBackendcBsMeZdZejZejdZejdZejdZ	RS(s]The abstract base class of the keyring, every backend must implement
    this interface.
    cCsdS(sReturn if this keyring supports current environment:
        -1: not applicable
         0: suitable
         1: recommended
        i((tself((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt	supported%scCsdS(s5Get password of the username for the service
        N(tNone(Rtservicetusername((s3/usr/lib/python2.7/dist-packages/keyring/backend.pytget_password.scCstddS(s5Set password for the username of the service
        treasonN(R(RR
Rtpassword((s3/usr/lib/python2.7/dist-packages/keyring/backend.pytset_password4s(
RRRtabctABCMetat
__metaclass__tabstractmethodRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs
		t_ExtensionKeyringcBsDeZdZdZdZdZdZdZdZRS(sX_ExtensionKeyring is a adaptor class for the platform related keyring
    backends.
    cCs4y|j|_Wntk
r/d|_nXdS(N(t
_init_backendtkeyring_impltImportErrorR	(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt__init__>s
cCsdS(s2Return the keyring implementation handler
        N(R	(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyREscCstS(s?If this keyring is recommended on current environment.
        (tFalse(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt
_recommendJscCs'|jdkrdS|jr#dSdS(s4Override the supported() in KeyringBackend.
        iiiN(RR	R(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyROs
cCs7y|jj||}Wntk
r2d}nX|S(s7Override the get_password() in KeyringBackend.
        N(Rtpassword_gettOSErrorR	(RR
RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRXs


cCsCy|jj|||Wn"tk
r>}t|jnXdS(s7Override the set_password() in KeyringBackend.
        N(Rtpassword_setRRtmessage(RR
RRte((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRas(	RRRRRRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR:s							tOSXKeychaincBs eZdZdZdZRS(sMac OS X KeychaincCsddlm}|S(s)Return the handler: osx_keychain
        i(tosx_keychain(tbackendsR!(RR!((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRkscCs
tjdkS(s-Recommended for all OSX environment.
        tdarwin(tsystplatform(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRqs(RRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR is	tGnomeKeyringcBs/eZdZdZdZdZdZRS(s
Gnome KeyringcCs\ytdWntk
r"dSXdtjkrTdtjkrTdtjkrTdSdSdS(NtgnomekeyringitGNOME_KEYRING_CONTROLtDISPLAYtDBUS_SESSION_BUS_ADDRESSii(t
__import__Rtostenviron(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR}s
cCsxddl}y|j||}Wn)|jk
r9dS|jk
rMdSXt|dksltd|ddS(s5Get password of the username for the service
        iNis(no more than one entry should ever matchiR(R'tfind_network_password_synctNoMatchErrorR	tCancelledErrortlentAssertionError(RR
RR'titems((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRscCsqddl}y>|j|j|jd||fi|d6|d6|tWn |jk
rltdnXdS(s5Set password for the username of the service
        iNsPassword for '%s' on '%s'tusertdomainscancelled by user(R'titem_create_synctKEYRING_NAMEtITEM_NETWORK_PASSWORDtTrueR0R(RR
RRR'((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs
N(RRRR	R7RRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR&vs
	
	tSecretServiceKeyringcBs)eZdZdZdZdZRS(sSecret Service KeyringcCshyddl}Wntk
r$dSXy |j}|jddWn|jjk
r_dSXdSdS(Nisorg.freedesktop.secretss/org/freedesktop/secretsi(tdbusRt
SessionBust
get_objectt
exceptionst
DBusException(RR;tbus((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs
	cCsddl}|j}|jdd}|j|d}|ji|d6|d6\}}|jdd	\}	}
|j|\}}|d
kst|j|||
}
xA|
j	D]3\}}d	j
g|dD]}t|^qSWdS(s5Get password of the username for the service
        iNsorg.freedesktop.secretss/org/freedesktop/secretssorg.freedesktop.Secret.ServiceRR
tplaintt/i(
R;R<R=t	InterfacetSearchItemstOpenSessiontUnlockR2t
GetSecretst	iteritemstjointstrR	(RR
RR;R@tservice_objt
service_ifacetunlockedtlockedt_tsessiontno_longer_lockedtprompttsecretst	item_pathtsecrettx((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs				+cCs ddl}|j}|jdd}|j|d}|jdd}|j|d}	i|d6|d	6}
|jd
d\}}t|tr|jd}n|j|d|j	|d
f}
id||fd6|
d6}|	j
||
t\}}|dkstdS(s5Set password for the username of the service
        iNsorg.freedesktop.secretss/org/freedesktop/secretssorg.freedesktop.Secret.Services(/org/freedesktop/secrets/aliases/defaults!org.freedesktop.Secret.CollectionR
RRARBsutf-8s
text/plains%s @ %ss!org.freedesktop.Secret.Item.Labels&org.freedesktop.Secret.Item.AttributesRC(
R;R<R=RDRFt
isinstancetunicodetencodetStructt	ByteArrayt
CreateItemR9R2(RR
RRR;R@RLRMtcollection_objt
collectiont
attributesRPRQRVRtitemRS((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs4							

(RRRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR:s		cCs|dkr+|dkr+tdk	r+tSn|dkrCtj}n|dkrXt}nd}|jjdkr|jg}nzp|j}|j	|j
|j|jatdk	rtj
dstjdntjdtSWd|r|jnXdS(NtPython(R	tkwallettKWallettWallettQtGuitqApptinstancetQApplicationtQWidgett
openWallett
NetworkWallettwinIdtSynchronoust	hasFoldertcreateFoldert	setFoldertexit(tkwallet_modulet	qt_moduletapptwindow((s3/usr/lib/python2.7/dist-packages/keyring/backend.pytopen_kwallets.			
(Rd(Rft
KDEKWalletcBs)eZdZdZdZdZRS(sKDE KWalletcCs+trdtjkrdStr#dSdSdS(NtKDE_SESSION_UIDiii(tkwallet_supportR,R-(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs
cCs\|d|}tjj}t}|j|d|r?dS|j|d}t|S(s5Get password of the username for the service
        t@RbiN(RdReRlRwtkeyDoesNotExistR	treadPasswordRY(RR
Rtkeytnetworktwallettresult((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR's	cCs%t}|j|d||dS(s5Set password for the username of the service
        R{N(Rwt
writePassword(RR
RRR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR5s	(RRRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRxs		tBasicFileKeyringcBseZdZejdZejdZej	dZ
ej	dZd
dZ
dZdZdZd	ZRS(s
    BasicFileKeyring is a file-based implementation of keyring.

    This keyring stores the password directly in the file and provides methods
    which may be overridden by subclasses to support
    encryption and decryption. The encrypted payload is stored in base64
    format.
    cCs"tjjtjjj|jS(s
        The path to the file where passwords are stored. This property
        may be overridden by the subclass or at the instance level.
        (R,tpathRJtkeyringtutilR%t	data_roottfilename(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt	file_pathEscCsdS(s2The filename used to store the passwords.
        N((R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRMscCsdS(sEncrypt the password.
        N((RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pytencryptSscCsdS(sDecrypt the password.
        N((Rtpassword_encrypted((s3/usr/lib/python2.7/dist-packages/keyring/backend.pytdecryptYscCsdS(s6Convert older keyrings to the current format.
        N((Rtkeyring_password((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt_migrate_scCsStjjtjjd|j}|j}tjjj	||d|_
dS(Nt~cSsdS(N(R	(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt<lambda>is(R,RRJt
expanduserRRRRt
loc_compatt
relocate_filet_relocate_file(Rtold_locationtnew_location((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRds$	cCs|jt|}t|}tj}tjj|jr`|j|j	|jnyC|j
||j}tj
|}|j|jd}Wn#tjtjfk
rd}nX|S(s)Read the password from the file.
        sutf-8N(Rtescape_for_initConfigParsertRawConfigParserR,RtexistsRRtreadtgetRZtbase64tdecodestringRtdecodet
NoOptionErrortNoSectionErrorR	(RR
Rtconfigtpassword_base64RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRks


cCs|jt|}t|}|j|jd}tj}tjj|j	rn|j
|j	ntj|j
}|j|s|j|n|j||||jt|j	d}|j|dS(s(Write the password in the file.
        sutf-8twN(RRRRZRRR,RRRRRtencodestringRthas_sectiontadd_sectiontsett_ensure_file_pathtopentwrite(RR
RRRRRtconfig_file((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs

cCsctjj|j}|r>tjj|r>tj|ntj|tjtj	Btj
BdS(sensure the storage path existsN(R,RtdirnameRtisdirtmakedirstchmodtstattS_IWRITEtS_IREADtS_IEXEC(Rtstorage_root((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRsN(RRRRtNonDataPropertyRRtabstractpropertyRRRRR	RRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR;s			tUncryptedFileKeyringcBs/eZdZdZdZdZdZRS(sUncrypted File Keyringskeyring_pass.cfgcCs|S(s-Directly return the password itself.
        ((RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRscCs|S(s,Directly return encrypted password.
        ((RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRscCsdS(s<Applicable for all platforms, but do not recommend.
        i((R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs(RRRRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs
		tCryptedFileKeyringcBseZdZdZdZdZdZejdZ	dZ
dZdZd	Z
d
ZdZdZd
ZddZdZdZRS(sPyCrypto File Keyringi t0scrypted_pass.cfgcCsay=tdtdtdts6tdnd}Wnttfk
r\d}nX|S(s9Applicable for all platforms, but not recommend"
        sCrypto.Cipher.AESsCrypto.Protocol.KDFs
Crypto.Randoms/JSON implementation needed (install simplejson)ii(R+tjsonR2R(Rtstatus((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs




cCs*|jr|jn
|j|jS(N(t_check_filet_unlockt
_init_filetkeyring_key(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs

cCszxstrutjd}tjd}||krItjjdqnd|jkrqtjjdqn|SWdS(Ns,Please set a password for your new keyring: sPlease confirm the password: s#Error: Your passwords didn't match
RBs'Error: blank passwords aren't allowed.
(R9tgetpassR$tstderrRtstrip(RRtconfirm((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt_get_new_passwords		cCs&|j|_|jddddS(sP
        Initialize a new password file and set the reference password.
        skeyring-settingspassword referencespassword reference valueN(RRR(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRscCstjj|jstS|jtj}|j|jy |j	t
dt
dWntjtjfk
rtSXt
S(sS
        Check if the file exists and has the expected password reference.
        skeyring-settingspassword reference(R,RRRRRRRRRRRRR9(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs
	cCshtjd|_y(|jdd}|dks9tWn'tk
rc|jtdnXdS(sd
        Unlock this keyring by getting the password for the keyring from the
        user.
        s-Please enter password for encrypted keyring: skeyring-settingspassword referencespassword reference valuesIncorrect PasswordN(RRRR2t_lockt
ValueError(Rtref_pw((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs

cCs
|`dS(s<
        Remove the keyring key from this instance.
        N(R(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRscCsWdddd}ddlm}|||d|j}|j||j |j|S(sK
        Create the cipher object to encrypt or decrypt a payload.
        iicsJddl}ddl}ddlm}ddlmmddlm}|j	ddkrmd}	n	d}	|	|}|dkrfd	}n|d
}
d}xt|
|krA||||jd|}}
x:t
|dD](}|||
}
}|||}qW|
|7}
|d}qW|
| S(
Ni(tb(tSHAtHMAC(tstrxoriicSs-t|tr|jdSdj|SdS(Nslatin-1RB(RXRYRZRJ(ts((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyttobytes$s
cSs=t|tr|St|tr/|jdSt|SdS(Nslatin-1(RXtbytesRKRZ(R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR*s

csj||jS(N(tnewtdigest(tpR(tSHA1R(s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR5sRBis>I(R$tstructtCrypto.Util.py3compatRtCrypto.HashRRtCrypto.Util.strxorRtversion_infoR	R1tpacktxrange(RtsalttdkLentcounttprfR$RRRRR~titUt	previousUtjtt((RRs3/usr/lib/python2.7/dist-packages/keyring/backend.pytPBKDF2s*		#
i(tAESRN(R	t
Crypto.CipherRt
block_sizeRtMODE_CFB(RRRtIVRRtpw((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt_create_ciphers&c
Csddlm}||j}ddlm}||j}|j|j||}|jd|}td|d|d|}x%|D]}	||	j	d||	<qWt
j|S(	Ni(tget_random_bytes(Rspw:RRRR(t
Crypto.RandomRRRRRRRtdictRZRtdumps(
RRRRRRtcipherRtdataR~((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyREs
cCstj|}x%|D]}||jd||<qW|j|j|d|d}|j|d}|jdst|dS(NRRRRspw:i(RtloadsRRRRt
startswithR2(RRRR~Rt	plaintext((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRTs

cCs|j||j|dS(s?
        Convert older keyrings to the current format.
        N(t"_CryptedFileKeyring__convert_0_9_0t"_CryptedFileKeyring__convert_0_9_1(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR_s
cCst|j}t|}WdQXy,g|D]}|jd^q.\}}Wntk
rddSXdGH||j }||j}|dkrtjd}n|j|||}	t	j	|	j
|}
tj}y|j
|
Wn0tjk
rtjjdtdnX||_tj|j|jddd	x|jD]x}xo|j|D]^}
|j||
jd
}tjjj|}tjjj|
}
|j||
|qnWqXWdGHdS(sN
        Convert keyring from the 0.9.1 format to the current format.
        NRs)Keyring from 0.9.1 detected. Upgrading...s,Please input your password for the keyring: s Wrong password for the keyring.
sWrong passwordskeyring-settingspassword referencespassword reference valuesutf-8sFile upgraded successfully(RRtlistRt	ExceptionRR	RRtStringIORRRtreadfptErrorR$RRRRR,tremoveRtsectionstoptionsRRRRtunescape(RRtft
encoded_linestlinetheadRRRRRRR
R4R((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt__convert_0_9_1fs>,


	cCsd}d}y0tj}|j|j|j||Wntk
rPdSXdGHddl}|dkrtjd}n|j||}|j|||krt	j
jdtdn||_
|j||t|jd	}|j|WdQX|jdd
dddlm}||jt||j|j}	x|jD]}
x|j|
D]}|j|	|jd
|j}|j|
|jd}
tjjj|
}
tjjj|}|j|
}|j|
||quWq_WdGHdS(sb
        Convert keyring from the 0.9.0 and earlier format to the current
        format.
        skeyring-settingscrypted-passwordNs4Keyring from 0.9.0 or earlier detected. Upgrading...is,Please input your password for the keyring: s Wrong password for the keyring.
sWrong passwordRspassword referencespassword reference value(RtRsFile upgraded successfully( RRRRRRtcryptR	RR$RRRRt
remove_optionRRRRRR1tpad_charRRRRRRRRRR(RRtKEYRING_SETTINGtCRYPTED_PASSWORDRRthashedRRRR
R4Rt
password_ct
password_p((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt__convert_0_9_0sJ
	N(RRRRRRRRRRRRRRRRRRR	RRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs"				
				/			0tWin32CryptoKeyringcBs8eZdZdZdZdZdZdZRS(sWin32 Cryptography Keyringswincrypto_pass.cfgcCsQtt|jyddlm}||_Wntk
rLd|_nXdS(Ni(twin32_crypto(tsuperRRR"Rt
crypt_handlerRR	(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs

cCs1t}|dkrdS|dkr)dSdSdS(s@Recommended when other Windows backends are unavailable
        itfileiiN(tselect_windows_backendR	(Rtrecommended((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs	cCs|jj|S(s1Encrypt the password using the CryptAPI.
        (RR(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRscCs|jj|S(s1Decrypt the password using the CryptAPI.
        (RR(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs(RRRRRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs				tWinVaultKeyringcBseeZdZdZdZedZdZdZdZ	dZ
dZd	ZRS(
s
    WinVaultKeyring stores encrypted passwords using the Windows Credential
    Manager.

    Requires pywin32

    This backend does some gymnastics to simulate multi-user support,
    which WinVault doesn't support natively. See
    https://bitbucket.org/kang/python-keyring-lib/issue/47/winvaultkeyring-only-ever-returns-last#comment-731977
    for details on the implementation, but here's the gist:

    Passwords are stored under the service name unless there is a collision
    (another password with the same service name but different user name),
    in which case the previous password is moved into a compound name:
    {username}@{service}
    cCsbtt|jy.ddl}ddl}||_||_Wntk
r]d|_nXdS(Ni(RRRt
pywintypest	win32credRR	(RRR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs	

cCs1t}|dkrdS|dkr)dSdSdS(s6Default Windows backend, when it is available
        itcrediiN(RR	(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR
s	cCsdtS(Nu%(username)s@%(service)s(tvars(RR
((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt_compound_namescCse|j|}|s&|d|krD|j|j||}n|sNdS|d}|jdS(NtUserNametCredentialBlobsutf-16(t
_get_passwordRR	R(RR
Rtrestblob((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs
cCsjy%|jjd|jjd|}Wn>|jjk
re}|jdkr_|jdkr_dSnX|S(NtTypet
TargetNameitCredRead(RR#tCRED_TYPE_GENERICRterrortwinerrortfuncnameR	(RttargetRR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR$s
cCsq|j|}|rT|d}|j||}|j|||djdn|j||t|dS(NRRsutf-16(RRt
_set_passwordRRY(RR
RRtexisting_pwtexisting_usernameR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR0s
c
CsPtd|jjd|d|d|ddd|jj}|jj|ddS(	NR!R"RRtCommentsStored using python-keyringtPersisti(RRR$tCRED_PERSIST_ENTERPRISEt	CredWrite(RR(RRt
credential((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR):scCsb|j||}xI||fD];}|j|}|r|d|kr|j|qqWdS(NR(RRt_delete_password(RR
RtcompoundR(R*((s3/usr/lib/python2.7/dist-packages/keyring/backend.pytdelete_passwordCs
cCs#|jjd|jjd|dS(NR!R"(Rt
CredDeleteR$(RR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR1Js(
RRRRRtstaticmethodRRRRR)R3R1(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs	
				
			tWin32CryptoRegistrycBs2eZdZdZdZdZdZRS(sWin32CryptoRegistry is a keyring which use Windows CryptAPI to encrypt
    the user's passwords and store them under registry keys
    cCs[tt|jy'ddlm}td||_Wntk
rVd|_nXdS(Ni(Rt_winreg(	RR6RR"RR+RRR	(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRTs


cCs1t}|dkrdS|dkr)dSdSdS(sReturn if this keyring supports current enviroment.
        -1: not applicable
         0: suitable
         1: recommended
        itregiiN(RR	(RR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR^s	cCsddlm}m}m}yQd|}|||}|||d}tj|}	|jj|	}
Wntk
rd}
nX|
S(s5Get password of the username for the service
        i(tHKEY_CURRENT_USERtOpenKeytQueryValueExsSoftware\%s\KeyringiN(
R7R9R:R;RRRRtEnvironmentErrorR	(RR
RR9R:R;R~thkeyRRR((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRls


cCsp|jj|}tj|}ddlm}m}m}m}	||d|}
||
|d|	|dS(s+Write the password to the registry
        i(R9t	CreateKeyt
SetValueExtREG_SZsSoftware\%s\KeyringiN(	RRRRR7R9R>R?R@(RR
RRRRR9R>R?R@R=((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR}s
"(RRRRRRR(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyR6Ps
	
		cCstjdkrdStj\}}}}}y.tdtd||fdkr[dSWntk
ronXy.tdtd||fd
krd
SWntk
rnXytddSWntk
rnXdS(NtntRRiiRskeyring.backends.win32_cryptoR7iR8R(ii(ii(R,tnameR	R$tgetwindowsversionR+R(tmajortminortbuildR%ttext((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyRs.







c	CsOtdkrKtttttttt	t
g	antS(s/Return the list of all keyrings in the lib
    N(t_all_keyringR	R R&RxRRRR6RR:(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pytget_all_keyrings(1RRR,RR$RRRtkeyring.util.escapeRRRtkeyring.utilRtkeyring.util.platformtkeyring.util.loc_compattkeyring.py25compatt
py25compatRRRRtobjectRRR R&R:R	RcRwtPyKDE4.kdeuiRdtPyQt4RfRRRzR9RxRRRRRR6RRHRI(((s3/usr/lib/python2.7/dist-packages/keyring/backend.pyt<module>sP/
3E#

h$a: