Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
python3-dmapi / usr / lib / python3 / dist-packages / dmapi / __pycache__ / crypto.cpython-35.pyc
Size: Mime:


çáþ\«0ã@sºdZddlmZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
ddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlZddlZddlZddlmZddlmZddlmZddlm Z m!Z!ddlm"Z"ej#e$ƒZ%ej&j'Z'ddd„Z(ddd„Z)ddd„Z*ddd„Z+ddd„Z,dd„Z-dd „Z.d!d"„Z/d#d$d%„Z0d&d'„Z1d(d)„Z2d*d+„Z3d,d-„Z4d.d/„Z5d0d1„Z6d2d3„Z7d4d5„Z8d6d7„Z9d#d8d9„Z:d#d:d;„Z;d<d=„Z<d>d?„Z=d@dA„Z>ddBdC„Z?dDdE„Z@dS)FzzWrappers around standard crypto data elements.

Includes root and intermediate CAs, SSH key_pairs and x509 certificates.

é)Úabsolute_importN)Ú
exceptions)Úbackends)Úpadding)Úhashes)Ú
serialization)Úx509)Úprocessutils)Úlog)Úexcutils)Ú	fileutils)Úcontext)Údb)Ú	exception)Ú_Ú_LE)ÚutilscCs8tjjr.|r.tjjtjjd|ƒStjjS)NZprojects)ÚCONFÚcryptoÚuse_project_caÚosÚpathÚjoinÚca_path)Ú
project_id©rú./usr/lib/python3/dist-packages/dmapi/crypto.pyÚ	ca_folder*srcCstjjt|ƒtjjƒS)N)rrrrrrZca_file)rrrrr0srcCstjjt|ƒtjjƒS)N)rrrrrrÚkey_file)rrrrÚkey_path4srcCstjjt|ƒtjjƒS)N)rrrrrrÚcrl_file)rrrrÚcrl_path8sr!c	Csitjjsd}t|ƒ}tjj|ƒsBtjd|ƒ‚t	|dƒ}|j
ƒSWdQRXdS)NÚprojectÚr)rrrrrrÚexistsrZCryptoCAFileNotFoundÚopenÚread)rZca_file_pathÚcafilerrrÚfetch_ca<sr(cCsutƒ}tjjtƒƒsqtjjtjjtjjtƒddƒƒ}t	j
|ƒtjd|d|ƒdS)z Ensure the CA filesystem exists.ÚCAzgenrootca.shÚshÚcwdN)
rrrr$rÚabspathrÚdirnameÚ__file__rÚensure_treerÚexecute)Zca_dirZgenrootca_sh_pathrrrÚensure_ca_filesystemFs		'
r1cCsyà|jdƒ}tj|tjƒƒtj|jdƒdƒ}tj	tj
ƒtjƒƒ}|j|ƒ|jƒ}t
j|ƒ}tjr¢|jdƒ}djdd„t|ddd…|ddd…ƒDƒƒSWn*tk
rtjd	td
ƒƒ‚YnXdS)Nzutf-8ú éÚasciiú:css|]\}}||VqdS)Nr)Ú.0ÚaÚbrrrú	<genexpr>`sz'generate_fingerprint.<locals>.<genexpr>éÚreasonzfailed to generate fingerprint)ÚencoderÚload_ssh_public_keyrÚdefault_backendÚbase64Ú	b64decodeÚsplitrZHashÚMD5ÚupdateÚfinalizeÚbinasciiÚhexlifyÚsixÚPY3ÚdecoderÚzipÚ	ExceptionrÚInvalidKeypairr)Ú
public_keyÚ	pub_bytesZpub_dataÚdigestZmd5hashÚraw_fprrrÚgenerate_fingerprintQs
	A
	rQcCsy°t|tjƒr$|jdƒ}tj|tjƒƒ}tj	|j
tjƒƒƒ}tj
rr|jdƒ}djdd„t|ddd…|ddd…ƒDƒƒSWnMtttjfk
rÿ}z!tjdtd	ƒ|ƒ‚WYdd}~XnXdS)
Nzutf-8r4r5css|]\}}||VqdS)Nr)r6r7r8rrrr9osz,generate_x509_fingerprint.<locals>.<genexpr>r:r3r;z6failed to generate X509 fingerprint. Error message: %s)Ú
isinstancerGÚ	text_typer<rZload_pem_x509_certificaterr>rErFÚfingerprintrÚSHA1rHrIrrJÚ
ValueErrorÚ	TypeErrorÚErrorrrLr)Zpem_keyÚcertrPÚexrrrÚgenerate_x509_fingerprintfs	A		r[icCsltjj|ƒ}tjƒ}|j|ƒ|jƒ}d|jƒ|jƒf}t	|ƒ}|||fS)Nz%s %s Generated-by-Nova)
ÚparamikoZRSAKeyZgeneraterGÚStringIOZwrite_private_keyÚgetvalueÚget_nameZ
get_base64rQ)ÚbitsÚkeyZkeyoutÚprivate_keyrMrTrrrÚgenerate_key_pairvs
rcc	Csitjjsd}t|ƒ}tjj|ƒsBtjd|ƒ‚t	|dƒ}|j
ƒSWdQRXdS)zGet crl file for project.Nr"r#)rrrr!rrr$rZCryptoCRLFileNotFoundr%r&)rZ
crl_file_pathZcrlfilerrrÚ	fetch_crl€srdcCsÝt|ƒ}tjj|ƒs0tjd|ƒ‚t|dƒ}|jƒ}WdQRXy5tj	|dt
jƒƒ}|j|t
jƒƒSWnLtttjfk
rØ}z tjdtj|ƒƒ‚WYdd}~XnXdS)NrÚrbr;)rrrr$rÚProjectNotFoundr%r&rZload_pem_private_keyrr>ZdecryptrÚPKCS1v15rVrWrZUnsupportedAlgorithmZDecryptionFailurerGrS)rÚtextZprivate_key_fileÚfÚdataZpriv_keyÚexcrrrÚdecrypt_text‹srlcCs©t|tjƒr!|jdƒ}yA|jdƒ}tj|tjƒƒ}|j|t	j
ƒƒSWn@tk
r¤}z tj
dtj|ƒƒ‚WYdd}~XnXdS)z_Encrypt text with an ssh public key.

    If text is a Unicode string, encode it to UTF-8.
    zutf-8r;N)rRrGrSr<rr=rr>ZencryptrrgrKrZEncryptionFailure)Zssh_public_keyrhrNZpub_keyrkrrrÚssh_encrypt_text™srmcCs®y]tjddddd|dt|ƒƒtjddddddtjjdt|ƒƒWnJtk
rƒtjd	|ƒ‚Yn't	j
k
r©tjd	|ƒ‚YnXd
S)zRevoke a cert by file name.ÚopensslÚcaz-configz
./openssl.cnfz-revoker+z-gencrlz-outrN)rr0rrrr ÚOSErrorrrfr	ZProcessExecutionErrorZRevokeCertFailure)rÚ	file_namerrrÚrevoke_cert©s 
rrcCsBtjƒ}x/tj||ƒD]}t|d|dƒqWdS)zRevoke all user certs.rrqN)r
Úget_admin_contextrZcertificate_get_all_by_userrr)Úuser_idÚadminrYrrrÚrevoke_certs_by_user·srvcCsBtjƒ}x/tj||ƒD]}t|d|dƒqWdS)zRevoke all project certs.rrqN)r
rsrZcertificate_get_all_by_projectrr)rrurYrrrÚrevoke_certs_by_project¾srwcCsEtjƒ}x2tj|||ƒD]}t|d|dƒq"WdS)z!Revoke certs for user in project.rrqN)r
rsrZ'certificate_get_all_by_user_and_projectrr)rtrrurYrrrÚ revoke_certs_by_user_and_projectÇsrxcCstjj|tjƒfS)z%Helper to generate user cert subject.)rrZproject_cert_subjectrÚisotime)rrrrÚ_project_cert_subjectÏsrzcCstjj||tjƒfS)z%Helper to generate user cert subject.)rrZuser_cert_subjectrry)rtrrrrÚ_user_cert_subjectÔsr{cCs^t||ƒ}tjƒÔ}tjjtjj|dƒƒ}tjjtjj|dƒƒ}tjddd|t|ƒƒtjdddd|d|d	d
|ƒ
t	|ƒ}|j
ƒ}WdQRXt	|ƒ}|j
ƒ}	WdQRXWdQRXt|	|ƒ\}
}tjjt|ƒd|
ƒ}d
|d|d|i}
t
jtjƒ|
ƒ||fS)z-Generate and sign a cert for user in project.ztemp.keyztemp.csrrnZgenrsaz-outÚreqz-newz-keyz-batchz-subjNznewcerts/%s.pemrtrrq)r{rÚtempdirrrr,rr0Ústrr%r&Úsign_csrrrZcertificate_creater
rs)rtrr`ÚsubjectÚtmpdirÚkeyfileÚcsrfilerirbÚcsrÚserialZ
signed_csrÚfnamerYrrrÚgenerate_x509_certÚs$!!r‡cCsMd|}d|}tjƒ}tjjtjj|dƒƒ}tjjtjj|dƒƒ}t||ƒtjddddd	d
d|dd
|ddd|d|ddddƒ\}}tjdddd|ddd|ddƒ\}	}tj	|	ƒ}
t
|ƒ}tjr9|
j
dƒ}
|j
dƒ}WdQRX|
||fS)z:Generate a cert for passwordless auth for user in project.z/CN=%sz%s@localhostztemp.keyz	temp.confrnr|z-x509z-nodesz-daysZ3650z-configz-newkeyzrsa:%sz-outformZPEMz-keyoutz-subjz-extensionsZ
v3_req_clientÚbinaryTZpkcs12z-exportz-inkeyz	-passwordzpass:Z
process_inputr4zutf-8N)rr}rrr,rÚ_create_x509_openssl_configr0r?Ú	b64encoder[rGrHrI)rtr`r€Úupnrr‚ÚconffileZcertificateÚ_errÚoutrbrTrrrÚgenerate_winrm_x509_certòs,

!!
		rc
Cs4d}t|dƒ}|j||ƒWdQRXdS)Nz®distinguished_name  = req_distinguished_name
[req_distinguished_name]
[v3_req_client]
extendedKeyUsage = clientAuth
subjectAltName = otherName:1.3.6.1.4.1.311.20.2.3;UTF8:%s
Úw)r%Úwrite)rŒr‹ÚcontentÚfilerrrr‰sr‰cCsqtjjt|ƒƒsmtjjtjjtjjtƒddƒƒ}tj	d||t
|ƒdtƒƒdS)Nr)zgeninter.shr*r+)rrr$rr,rr-r.rr0rzr)rZgeninter_sh_pathrrrÚ_ensure_project_folders
	'r”cCs´t|ƒ}tjj|dƒ}tjj|dƒ}tjj|ƒrLdStd|dƒ\}}t|dƒ}|j|ƒWdQRXt|dƒ}|j|ƒWdQRXdS)Nz
server.keyz
server.crtzproject-vpnir)rrrrr$r‡r%r‘)rZproject_folderZkey_fnZcrt_fnrar„r‚ÚcrtfilerrrÚgenerate_vpn_files%sr–cCsEtjjsd}|s(t|tƒƒSt|ƒt|t|ƒƒS)N)rrrÚ	_sign_csrrr”)Úcsr_textrrrrr8s
rc
 Cs^tjƒK}tjj|dƒ}tjj|dƒ}y*t|dƒ}|j|ƒWdQRXWn9tk
ržtj	ƒt
jtdƒƒWdQRXYnXt
j
d|ƒtj|ƒtjdddd	|d
dd|d
|ƒ	tjddd|ddd
|ƒ\}}|jdƒdjƒ}t|dƒ}	||	jƒfSWdQRXWdQRXdS)Nzinbound.csrzoutbound.csrrzFailed to write inbound.csrzFlags path: %srnroz-batchz-outz-configz
./openssl.cnfz-infilesr+rz-inz-serialz-nooutú=r:r#)rr}rrrr%r‘ÚIOErrorrZsave_and_reraise_exceptionÚLOGrrÚdebugrr/r0Ú
rpartitionÚstripr&)
r˜rrZinboundZoutboundrƒrŽrr…r•rrrr—As$


r—)AÚ__doc__Ú
__future__rr?rErZcryptographyrZcryptography.hazmatrZ)cryptography.hazmat.primitives.asymmetricrZcryptography.hazmat.primitivesrrrZoslo_concurrencyr	Zoslo_logr
ÚloggingZ
oslo_utilsrrr\rGZ
dmapi.confÚdmapir
rrZ
dmapi.i18nrrrÚ	getLoggerÚ__name__r›Úconfrrrrr!r(r1rQr[rcrdrlrmrrrvrwrxrzr{r‡rr‰r”r–rr—rrrrÚ<module>sb