Switch to python3
This commit is contained in:
parent
531041e89a
commit
9ba4b6a91a
5286 changed files with 677347 additions and 576888 deletions
|
|
@ -1,88 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import os, sys
|
||||
import ed25519
|
||||
from hashlib import sha256
|
||||
|
||||
def help():
|
||||
print """\
|
||||
Usage: (ed25519 version %s)
|
||||
|
||||
edsig generate [STEM]
|
||||
creates keypair, writes to 'STEM.signing.key' and 'STEM.verifying.key'
|
||||
default is to 'signing.key' and 'verifying.key'
|
||||
|
||||
edsig sign (signing.key|keyfile) message.file
|
||||
prints signature to stdout
|
||||
If message.file is "-", reads from stdin.
|
||||
|
||||
edsig verify (verifying.key|keyfile) message.file (signature|sigfile)
|
||||
prints 'good signature!' or raises exception
|
||||
If message.file is "-", reads from stdin.
|
||||
|
||||
Key-providing arguments can either be the key itself, or point to a file
|
||||
containing the key.
|
||||
""" % ed25519.__version__
|
||||
|
||||
def remove_prefix(prefix, s):
|
||||
if not s.startswith(prefix):
|
||||
raise ValueError("no prefix found")
|
||||
return s[len(prefix):]
|
||||
|
||||
def data_from_arg(arg, prefix, keylen, readable):
|
||||
if (readable
|
||||
and arg.startswith(prefix)
|
||||
and len(remove_prefix(prefix, arg))==keylen):
|
||||
return arg
|
||||
if os.path.isfile(arg):
|
||||
return open(arg,"r").read()
|
||||
raise ValueError("unable to get data from '%s'" % arg)
|
||||
|
||||
def message_rep(msg_arg):
|
||||
if msg_arg == "-":
|
||||
f = sys.stdin
|
||||
else:
|
||||
f = open(msg_arg, "rb")
|
||||
h = sha256()
|
||||
while True:
|
||||
data = f.read(16*1024)
|
||||
if not data:
|
||||
break
|
||||
h.update(data)
|
||||
return h.digest()
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
help()
|
||||
elif sys.argv[1] == "generate":
|
||||
sk,vk = ed25519.create_keypair()
|
||||
if len(sys.argv) > 2:
|
||||
sk_outfile = sys.argv[2]+".signing.key"
|
||||
vk_outfile = sys.argv[2]+".verifying.key"
|
||||
else:
|
||||
sk_outfile = "signing.key"
|
||||
vk_outfile = "verifying.key"
|
||||
sk_s = sk.to_seed(prefix="sign0-")
|
||||
vk_s = vk.to_ascii("verf0-", "base32")
|
||||
open(sk_outfile,"w").write(sk_s)
|
||||
open(vk_outfile,"w").write(vk_s+"\n")
|
||||
print "wrote private signing key to", sk_outfile
|
||||
print "write public verifying key to", vk_outfile
|
||||
elif sys.argv[1] == "sign":
|
||||
sk_arg = sys.argv[2]
|
||||
msg_arg = sys.argv[3]
|
||||
sk = ed25519.SigningKey(data_from_arg(sk_arg, "sign0-", 52, False),
|
||||
prefix="sign0-")
|
||||
sig = sk.sign(message_rep(msg_arg), prefix="sig0-", encoding="base32")
|
||||
print sig
|
||||
elif sys.argv[1] == "verify":
|
||||
vk_arg = sys.argv[2]
|
||||
msg_arg = sys.argv[3]
|
||||
sig_arg = sys.argv[4]
|
||||
vk = ed25519.VerifyingKey(data_from_arg(vk_arg, "verf0-", 52, True),
|
||||
prefix="verf0-", encoding="base32")
|
||||
sig = data_from_arg(sig_arg, "sig0-", 103, True)
|
||||
vk.verify(sig, message_rep(msg_arg),
|
||||
prefix="sig0-", encoding="base32") # could raise BadSignature
|
||||
print "good signature!"
|
||||
else:
|
||||
help()
|
||||
|
|
@ -1,364 +0,0 @@
|
|||
../sqlalchemy/log.py
|
||||
../sqlalchemy/inspection.py
|
||||
../sqlalchemy/interfaces.py
|
||||
../sqlalchemy/types.py
|
||||
../sqlalchemy/pool.py
|
||||
../sqlalchemy/__init__.py
|
||||
../sqlalchemy/schema.py
|
||||
../sqlalchemy/exc.py
|
||||
../sqlalchemy/events.py
|
||||
../sqlalchemy/processors.py
|
||||
../sqlalchemy/util/compat.py
|
||||
../sqlalchemy/util/deprecations.py
|
||||
../sqlalchemy/util/_collections.py
|
||||
../sqlalchemy/util/topological.py
|
||||
../sqlalchemy/util/queue.py
|
||||
../sqlalchemy/util/__init__.py
|
||||
../sqlalchemy/util/langhelpers.py
|
||||
../sqlalchemy/ext/horizontal_shard.py
|
||||
../sqlalchemy/ext/serializer.py
|
||||
../sqlalchemy/ext/automap.py
|
||||
../sqlalchemy/ext/associationproxy.py
|
||||
../sqlalchemy/ext/__init__.py
|
||||
../sqlalchemy/ext/hybrid.py
|
||||
../sqlalchemy/ext/mutable.py
|
||||
../sqlalchemy/ext/orderinglist.py
|
||||
../sqlalchemy/ext/compiler.py
|
||||
../sqlalchemy/ext/instrumentation.py
|
||||
../sqlalchemy/ext/declarative/api.py
|
||||
../sqlalchemy/ext/declarative/__init__.py
|
||||
../sqlalchemy/ext/declarative/base.py
|
||||
../sqlalchemy/ext/declarative/clsregistry.py
|
||||
../sqlalchemy/event/api.py
|
||||
../sqlalchemy/event/registry.py
|
||||
../sqlalchemy/event/__init__.py
|
||||
../sqlalchemy/event/legacy.py
|
||||
../sqlalchemy/event/base.py
|
||||
../sqlalchemy/event/attr.py
|
||||
../sqlalchemy/sql/type_api.py
|
||||
../sqlalchemy/sql/ddl.py
|
||||
../sqlalchemy/sql/selectable.py
|
||||
../sqlalchemy/sql/util.py
|
||||
../sqlalchemy/sql/sqltypes.py
|
||||
../sqlalchemy/sql/functions.py
|
||||
../sqlalchemy/sql/operators.py
|
||||
../sqlalchemy/sql/dml.py
|
||||
../sqlalchemy/sql/naming.py
|
||||
../sqlalchemy/sql/expression.py
|
||||
../sqlalchemy/sql/__init__.py
|
||||
../sqlalchemy/sql/schema.py
|
||||
../sqlalchemy/sql/base.py
|
||||
../sqlalchemy/sql/default_comparator.py
|
||||
../sqlalchemy/sql/visitors.py
|
||||
../sqlalchemy/sql/compiler.py
|
||||
../sqlalchemy/sql/elements.py
|
||||
../sqlalchemy/sql/annotation.py
|
||||
../sqlalchemy/engine/default.py
|
||||
../sqlalchemy/engine/url.py
|
||||
../sqlalchemy/engine/util.py
|
||||
../sqlalchemy/engine/interfaces.py
|
||||
../sqlalchemy/engine/result.py
|
||||
../sqlalchemy/engine/__init__.py
|
||||
../sqlalchemy/engine/base.py
|
||||
../sqlalchemy/engine/threadlocal.py
|
||||
../sqlalchemy/engine/reflection.py
|
||||
../sqlalchemy/engine/strategies.py
|
||||
../sqlalchemy/dialects/postgres.py
|
||||
../sqlalchemy/dialects/__init__.py
|
||||
../sqlalchemy/dialects/mysql/mysqlconnector.py
|
||||
../sqlalchemy/dialects/mysql/pymysql.py
|
||||
../sqlalchemy/dialects/mysql/cymysql.py
|
||||
../sqlalchemy/dialects/mysql/oursql.py
|
||||
../sqlalchemy/dialects/mysql/pyodbc.py
|
||||
../sqlalchemy/dialects/mysql/__init__.py
|
||||
../sqlalchemy/dialects/mysql/zxjdbc.py
|
||||
../sqlalchemy/dialects/mysql/base.py
|
||||
../sqlalchemy/dialects/mysql/gaerdbms.py
|
||||
../sqlalchemy/dialects/mysql/mysqldb.py
|
||||
../sqlalchemy/dialects/postgresql/pg8000.py
|
||||
../sqlalchemy/dialects/postgresql/hstore.py
|
||||
../sqlalchemy/dialects/postgresql/pypostgresql.py
|
||||
../sqlalchemy/dialects/postgresql/psycopg2.py
|
||||
../sqlalchemy/dialects/postgresql/ranges.py
|
||||
../sqlalchemy/dialects/postgresql/json.py
|
||||
../sqlalchemy/dialects/postgresql/__init__.py
|
||||
../sqlalchemy/dialects/postgresql/zxjdbc.py
|
||||
../sqlalchemy/dialects/postgresql/base.py
|
||||
../sqlalchemy/dialects/postgresql/constraints.py
|
||||
../sqlalchemy/dialects/sybase/pyodbc.py
|
||||
../sqlalchemy/dialects/sybase/__init__.py
|
||||
../sqlalchemy/dialects/sybase/base.py
|
||||
../sqlalchemy/dialects/sybase/mxodbc.py
|
||||
../sqlalchemy/dialects/sybase/pysybase.py
|
||||
../sqlalchemy/dialects/firebird/fdb.py
|
||||
../sqlalchemy/dialects/firebird/__init__.py
|
||||
../sqlalchemy/dialects/firebird/kinterbasdb.py
|
||||
../sqlalchemy/dialects/firebird/base.py
|
||||
../sqlalchemy/dialects/sqlite/pysqlite.py
|
||||
../sqlalchemy/dialects/sqlite/__init__.py
|
||||
../sqlalchemy/dialects/sqlite/base.py
|
||||
../sqlalchemy/dialects/mssql/information_schema.py
|
||||
../sqlalchemy/dialects/mssql/pymssql.py
|
||||
../sqlalchemy/dialects/mssql/adodbapi.py
|
||||
../sqlalchemy/dialects/mssql/pyodbc.py
|
||||
../sqlalchemy/dialects/mssql/__init__.py
|
||||
../sqlalchemy/dialects/mssql/zxjdbc.py
|
||||
../sqlalchemy/dialects/mssql/base.py
|
||||
../sqlalchemy/dialects/mssql/mxodbc.py
|
||||
../sqlalchemy/dialects/drizzle/__init__.py
|
||||
../sqlalchemy/dialects/drizzle/base.py
|
||||
../sqlalchemy/dialects/drizzle/mysqldb.py
|
||||
../sqlalchemy/dialects/oracle/cx_oracle.py
|
||||
../sqlalchemy/dialects/oracle/__init__.py
|
||||
../sqlalchemy/dialects/oracle/zxjdbc.py
|
||||
../sqlalchemy/dialects/oracle/base.py
|
||||
../sqlalchemy/testing/profiling.py
|
||||
../sqlalchemy/testing/warnings.py
|
||||
../sqlalchemy/testing/engines.py
|
||||
../sqlalchemy/testing/util.py
|
||||
../sqlalchemy/testing/entities.py
|
||||
../sqlalchemy/testing/mock.py
|
||||
../sqlalchemy/testing/exclusions.py
|
||||
../sqlalchemy/testing/assertions.py
|
||||
../sqlalchemy/testing/fixtures.py
|
||||
../sqlalchemy/testing/pickleable.py
|
||||
../sqlalchemy/testing/__init__.py
|
||||
../sqlalchemy/testing/schema.py
|
||||
../sqlalchemy/testing/runner.py
|
||||
../sqlalchemy/testing/config.py
|
||||
../sqlalchemy/testing/requirements.py
|
||||
../sqlalchemy/testing/assertsql.py
|
||||
../sqlalchemy/testing/plugin/pytestplugin.py
|
||||
../sqlalchemy/testing/plugin/plugin_base.py
|
||||
../sqlalchemy/testing/plugin/noseplugin.py
|
||||
../sqlalchemy/testing/plugin/__init__.py
|
||||
../sqlalchemy/testing/suite/test_types.py
|
||||
../sqlalchemy/testing/suite/test_select.py
|
||||
../sqlalchemy/testing/suite/test_ddl.py
|
||||
../sqlalchemy/testing/suite/test_reflection.py
|
||||
../sqlalchemy/testing/suite/test_sequence.py
|
||||
../sqlalchemy/testing/suite/__init__.py
|
||||
../sqlalchemy/testing/suite/test_results.py
|
||||
../sqlalchemy/testing/suite/test_insert.py
|
||||
../sqlalchemy/testing/suite/test_update_delete.py
|
||||
../sqlalchemy/orm/state.py
|
||||
../sqlalchemy/orm/session.py
|
||||
../sqlalchemy/orm/unitofwork.py
|
||||
../sqlalchemy/orm/properties.py
|
||||
../sqlalchemy/orm/collections.py
|
||||
../sqlalchemy/orm/identity.py
|
||||
../sqlalchemy/orm/util.py
|
||||
../sqlalchemy/orm/sync.py
|
||||
../sqlalchemy/orm/interfaces.py
|
||||
../sqlalchemy/orm/path_registry.py
|
||||
../sqlalchemy/orm/evaluator.py
|
||||
../sqlalchemy/orm/deprecated_interfaces.py
|
||||
../sqlalchemy/orm/mapper.py
|
||||
../sqlalchemy/orm/persistence.py
|
||||
../sqlalchemy/orm/dynamic.py
|
||||
../sqlalchemy/orm/__init__.py
|
||||
../sqlalchemy/orm/scoping.py
|
||||
../sqlalchemy/orm/descriptor_props.py
|
||||
../sqlalchemy/orm/loading.py
|
||||
../sqlalchemy/orm/base.py
|
||||
../sqlalchemy/orm/exc.py
|
||||
../sqlalchemy/orm/events.py
|
||||
../sqlalchemy/orm/strategies.py
|
||||
../sqlalchemy/orm/query.py
|
||||
../sqlalchemy/orm/dependency.py
|
||||
../sqlalchemy/orm/attributes.py
|
||||
../sqlalchemy/orm/relationships.py
|
||||
../sqlalchemy/orm/strategy_options.py
|
||||
../sqlalchemy/orm/instrumentation.py
|
||||
../sqlalchemy/connectors/pyodbc.py
|
||||
../sqlalchemy/connectors/__init__.py
|
||||
../sqlalchemy/connectors/zxJDBC.py
|
||||
../sqlalchemy/connectors/mysqldb.py
|
||||
../sqlalchemy/connectors/mxodbc.py
|
||||
../sqlalchemy/databases/__init__.py
|
||||
../sqlalchemy/log.pyc
|
||||
../sqlalchemy/inspection.pyc
|
||||
../sqlalchemy/interfaces.pyc
|
||||
../sqlalchemy/types.pyc
|
||||
../sqlalchemy/pool.pyc
|
||||
../sqlalchemy/__init__.pyc
|
||||
../sqlalchemy/schema.pyc
|
||||
../sqlalchemy/exc.pyc
|
||||
../sqlalchemy/events.pyc
|
||||
../sqlalchemy/processors.pyc
|
||||
../sqlalchemy/util/compat.pyc
|
||||
../sqlalchemy/util/deprecations.pyc
|
||||
../sqlalchemy/util/_collections.pyc
|
||||
../sqlalchemy/util/topological.pyc
|
||||
../sqlalchemy/util/queue.pyc
|
||||
../sqlalchemy/util/__init__.pyc
|
||||
../sqlalchemy/util/langhelpers.pyc
|
||||
../sqlalchemy/ext/horizontal_shard.pyc
|
||||
../sqlalchemy/ext/serializer.pyc
|
||||
../sqlalchemy/ext/automap.pyc
|
||||
../sqlalchemy/ext/associationproxy.pyc
|
||||
../sqlalchemy/ext/__init__.pyc
|
||||
../sqlalchemy/ext/hybrid.pyc
|
||||
../sqlalchemy/ext/mutable.pyc
|
||||
../sqlalchemy/ext/orderinglist.pyc
|
||||
../sqlalchemy/ext/compiler.pyc
|
||||
../sqlalchemy/ext/instrumentation.pyc
|
||||
../sqlalchemy/ext/declarative/api.pyc
|
||||
../sqlalchemy/ext/declarative/__init__.pyc
|
||||
../sqlalchemy/ext/declarative/base.pyc
|
||||
../sqlalchemy/ext/declarative/clsregistry.pyc
|
||||
../sqlalchemy/event/api.pyc
|
||||
../sqlalchemy/event/registry.pyc
|
||||
../sqlalchemy/event/__init__.pyc
|
||||
../sqlalchemy/event/legacy.pyc
|
||||
../sqlalchemy/event/base.pyc
|
||||
../sqlalchemy/event/attr.pyc
|
||||
../sqlalchemy/sql/type_api.pyc
|
||||
../sqlalchemy/sql/ddl.pyc
|
||||
../sqlalchemy/sql/selectable.pyc
|
||||
../sqlalchemy/sql/util.pyc
|
||||
../sqlalchemy/sql/sqltypes.pyc
|
||||
../sqlalchemy/sql/functions.pyc
|
||||
../sqlalchemy/sql/operators.pyc
|
||||
../sqlalchemy/sql/dml.pyc
|
||||
../sqlalchemy/sql/naming.pyc
|
||||
../sqlalchemy/sql/expression.pyc
|
||||
../sqlalchemy/sql/__init__.pyc
|
||||
../sqlalchemy/sql/schema.pyc
|
||||
../sqlalchemy/sql/base.pyc
|
||||
../sqlalchemy/sql/default_comparator.pyc
|
||||
../sqlalchemy/sql/visitors.pyc
|
||||
../sqlalchemy/sql/compiler.pyc
|
||||
../sqlalchemy/sql/elements.pyc
|
||||
../sqlalchemy/sql/annotation.pyc
|
||||
../sqlalchemy/engine/default.pyc
|
||||
../sqlalchemy/engine/url.pyc
|
||||
../sqlalchemy/engine/util.pyc
|
||||
../sqlalchemy/engine/interfaces.pyc
|
||||
../sqlalchemy/engine/result.pyc
|
||||
../sqlalchemy/engine/__init__.pyc
|
||||
../sqlalchemy/engine/base.pyc
|
||||
../sqlalchemy/engine/threadlocal.pyc
|
||||
../sqlalchemy/engine/reflection.pyc
|
||||
../sqlalchemy/engine/strategies.pyc
|
||||
../sqlalchemy/dialects/postgres.pyc
|
||||
../sqlalchemy/dialects/__init__.pyc
|
||||
../sqlalchemy/dialects/mysql/mysqlconnector.pyc
|
||||
../sqlalchemy/dialects/mysql/pymysql.pyc
|
||||
../sqlalchemy/dialects/mysql/cymysql.pyc
|
||||
../sqlalchemy/dialects/mysql/oursql.pyc
|
||||
../sqlalchemy/dialects/mysql/pyodbc.pyc
|
||||
../sqlalchemy/dialects/mysql/__init__.pyc
|
||||
../sqlalchemy/dialects/mysql/zxjdbc.pyc
|
||||
../sqlalchemy/dialects/mysql/base.pyc
|
||||
../sqlalchemy/dialects/mysql/gaerdbms.pyc
|
||||
../sqlalchemy/dialects/mysql/mysqldb.pyc
|
||||
../sqlalchemy/dialects/postgresql/pg8000.pyc
|
||||
../sqlalchemy/dialects/postgresql/hstore.pyc
|
||||
../sqlalchemy/dialects/postgresql/pypostgresql.pyc
|
||||
../sqlalchemy/dialects/postgresql/psycopg2.pyc
|
||||
../sqlalchemy/dialects/postgresql/ranges.pyc
|
||||
../sqlalchemy/dialects/postgresql/json.pyc
|
||||
../sqlalchemy/dialects/postgresql/__init__.pyc
|
||||
../sqlalchemy/dialects/postgresql/zxjdbc.pyc
|
||||
../sqlalchemy/dialects/postgresql/base.pyc
|
||||
../sqlalchemy/dialects/postgresql/constraints.pyc
|
||||
../sqlalchemy/dialects/sybase/pyodbc.pyc
|
||||
../sqlalchemy/dialects/sybase/__init__.pyc
|
||||
../sqlalchemy/dialects/sybase/base.pyc
|
||||
../sqlalchemy/dialects/sybase/mxodbc.pyc
|
||||
../sqlalchemy/dialects/sybase/pysybase.pyc
|
||||
../sqlalchemy/dialects/firebird/fdb.pyc
|
||||
../sqlalchemy/dialects/firebird/__init__.pyc
|
||||
../sqlalchemy/dialects/firebird/kinterbasdb.pyc
|
||||
../sqlalchemy/dialects/firebird/base.pyc
|
||||
../sqlalchemy/dialects/sqlite/pysqlite.pyc
|
||||
../sqlalchemy/dialects/sqlite/__init__.pyc
|
||||
../sqlalchemy/dialects/sqlite/base.pyc
|
||||
../sqlalchemy/dialects/mssql/information_schema.pyc
|
||||
../sqlalchemy/dialects/mssql/pymssql.pyc
|
||||
../sqlalchemy/dialects/mssql/adodbapi.pyc
|
||||
../sqlalchemy/dialects/mssql/pyodbc.pyc
|
||||
../sqlalchemy/dialects/mssql/__init__.pyc
|
||||
../sqlalchemy/dialects/mssql/zxjdbc.pyc
|
||||
../sqlalchemy/dialects/mssql/base.pyc
|
||||
../sqlalchemy/dialects/mssql/mxodbc.pyc
|
||||
../sqlalchemy/dialects/drizzle/__init__.pyc
|
||||
../sqlalchemy/dialects/drizzle/base.pyc
|
||||
../sqlalchemy/dialects/drizzle/mysqldb.pyc
|
||||
../sqlalchemy/dialects/oracle/cx_oracle.pyc
|
||||
../sqlalchemy/dialects/oracle/__init__.pyc
|
||||
../sqlalchemy/dialects/oracle/zxjdbc.pyc
|
||||
../sqlalchemy/dialects/oracle/base.pyc
|
||||
../sqlalchemy/testing/profiling.pyc
|
||||
../sqlalchemy/testing/warnings.pyc
|
||||
../sqlalchemy/testing/engines.pyc
|
||||
../sqlalchemy/testing/util.pyc
|
||||
../sqlalchemy/testing/entities.pyc
|
||||
../sqlalchemy/testing/mock.pyc
|
||||
../sqlalchemy/testing/exclusions.pyc
|
||||
../sqlalchemy/testing/assertions.pyc
|
||||
../sqlalchemy/testing/fixtures.pyc
|
||||
../sqlalchemy/testing/pickleable.pyc
|
||||
../sqlalchemy/testing/__init__.pyc
|
||||
../sqlalchemy/testing/schema.pyc
|
||||
../sqlalchemy/testing/runner.pyc
|
||||
../sqlalchemy/testing/config.pyc
|
||||
../sqlalchemy/testing/requirements.pyc
|
||||
../sqlalchemy/testing/assertsql.pyc
|
||||
../sqlalchemy/testing/plugin/pytestplugin.pyc
|
||||
../sqlalchemy/testing/plugin/plugin_base.pyc
|
||||
../sqlalchemy/testing/plugin/noseplugin.pyc
|
||||
../sqlalchemy/testing/plugin/__init__.pyc
|
||||
../sqlalchemy/testing/suite/test_types.pyc
|
||||
../sqlalchemy/testing/suite/test_select.pyc
|
||||
../sqlalchemy/testing/suite/test_ddl.pyc
|
||||
../sqlalchemy/testing/suite/test_reflection.pyc
|
||||
../sqlalchemy/testing/suite/test_sequence.pyc
|
||||
../sqlalchemy/testing/suite/__init__.pyc
|
||||
../sqlalchemy/testing/suite/test_results.pyc
|
||||
../sqlalchemy/testing/suite/test_insert.pyc
|
||||
../sqlalchemy/testing/suite/test_update_delete.pyc
|
||||
../sqlalchemy/orm/state.pyc
|
||||
../sqlalchemy/orm/session.pyc
|
||||
../sqlalchemy/orm/unitofwork.pyc
|
||||
../sqlalchemy/orm/properties.pyc
|
||||
../sqlalchemy/orm/collections.pyc
|
||||
../sqlalchemy/orm/identity.pyc
|
||||
../sqlalchemy/orm/util.pyc
|
||||
../sqlalchemy/orm/sync.pyc
|
||||
../sqlalchemy/orm/interfaces.pyc
|
||||
../sqlalchemy/orm/path_registry.pyc
|
||||
../sqlalchemy/orm/evaluator.pyc
|
||||
../sqlalchemy/orm/deprecated_interfaces.pyc
|
||||
../sqlalchemy/orm/mapper.pyc
|
||||
../sqlalchemy/orm/persistence.pyc
|
||||
../sqlalchemy/orm/dynamic.pyc
|
||||
../sqlalchemy/orm/__init__.pyc
|
||||
../sqlalchemy/orm/scoping.pyc
|
||||
../sqlalchemy/orm/descriptor_props.pyc
|
||||
../sqlalchemy/orm/loading.pyc
|
||||
../sqlalchemy/orm/base.pyc
|
||||
../sqlalchemy/orm/exc.pyc
|
||||
../sqlalchemy/orm/events.pyc
|
||||
../sqlalchemy/orm/strategies.pyc
|
||||
../sqlalchemy/orm/query.pyc
|
||||
../sqlalchemy/orm/dependency.pyc
|
||||
../sqlalchemy/orm/attributes.pyc
|
||||
../sqlalchemy/orm/relationships.pyc
|
||||
../sqlalchemy/orm/strategy_options.pyc
|
||||
../sqlalchemy/orm/instrumentation.pyc
|
||||
../sqlalchemy/connectors/pyodbc.pyc
|
||||
../sqlalchemy/connectors/__init__.pyc
|
||||
../sqlalchemy/connectors/zxJDBC.pyc
|
||||
../sqlalchemy/connectors/mysqldb.pyc
|
||||
../sqlalchemy/connectors/mxodbc.pyc
|
||||
../sqlalchemy/databases/__init__.pyc
|
||||
../sqlalchemy/cprocessors.so
|
||||
../sqlalchemy/cresultproxy.so
|
||||
../sqlalchemy/cutils.so
|
||||
./
|
||||
SOURCES.txt
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
top_level.txt
|
||||
Binary file not shown.
|
|
@ -1,32 +0,0 @@
|
|||
../cffi/api.py
|
||||
../cffi/vengine_gen.py
|
||||
../cffi/verifier.py
|
||||
../cffi/commontypes.py
|
||||
../cffi/cparser.py
|
||||
../cffi/__init__.py
|
||||
../cffi/backend_ctypes.py
|
||||
../cffi/gc_weakref.py
|
||||
../cffi/vengine_cpy.py
|
||||
../cffi/ffiplatform.py
|
||||
../cffi/model.py
|
||||
../cffi/lock.py
|
||||
../cffi/api.pyc
|
||||
../cffi/vengine_gen.pyc
|
||||
../cffi/verifier.pyc
|
||||
../cffi/commontypes.pyc
|
||||
../cffi/cparser.pyc
|
||||
../cffi/__init__.pyc
|
||||
../cffi/backend_ctypes.pyc
|
||||
../cffi/gc_weakref.pyc
|
||||
../cffi/vengine_cpy.pyc
|
||||
../cffi/ffiplatform.pyc
|
||||
../cffi/model.pyc
|
||||
../cffi/lock.pyc
|
||||
../_cffi_backend.so
|
||||
./
|
||||
requires.txt
|
||||
SOURCES.txt
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
not-zip-safe
|
||||
top_level.txt
|
||||
|
|
@ -1 +0,0 @@
|
|||
pycparser
|
||||
|
|
@ -1,196 +0,0 @@
|
|||
../cryptography/exceptions.py
|
||||
../cryptography/__init__.py
|
||||
../cryptography/fernet.py
|
||||
../cryptography/utils.py
|
||||
../cryptography/__about__.py
|
||||
../cryptography/hazmat/__init__.py
|
||||
../cryptography/hazmat/backends/multibackend.py
|
||||
../cryptography/hazmat/backends/interfaces.py
|
||||
../cryptography/hazmat/backends/__init__.py
|
||||
../cryptography/hazmat/primitives/hmac.py
|
||||
../cryptography/hazmat/primitives/hashes.py
|
||||
../cryptography/hazmat/primitives/cmac.py
|
||||
../cryptography/hazmat/primitives/interfaces.py
|
||||
../cryptography/hazmat/primitives/serialization.py
|
||||
../cryptography/hazmat/primitives/constant_time.py
|
||||
../cryptography/hazmat/primitives/__init__.py
|
||||
../cryptography/hazmat/primitives/padding.py
|
||||
../cryptography/hazmat/bindings/__init__.py
|
||||
../cryptography/hazmat/bindings/utils.py
|
||||
../cryptography/hazmat/backends/openssl/hmac.py
|
||||
../cryptography/hazmat/backends/openssl/rsa.py
|
||||
../cryptography/hazmat/backends/openssl/hashes.py
|
||||
../cryptography/hazmat/backends/openssl/cmac.py
|
||||
../cryptography/hazmat/backends/openssl/dsa.py
|
||||
../cryptography/hazmat/backends/openssl/__init__.py
|
||||
../cryptography/hazmat/backends/openssl/ciphers.py
|
||||
../cryptography/hazmat/backends/openssl/backend.py
|
||||
../cryptography/hazmat/backends/openssl/ec.py
|
||||
../cryptography/hazmat/backends/commoncrypto/hmac.py
|
||||
../cryptography/hazmat/backends/commoncrypto/hashes.py
|
||||
../cryptography/hazmat/backends/commoncrypto/__init__.py
|
||||
../cryptography/hazmat/backends/commoncrypto/ciphers.py
|
||||
../cryptography/hazmat/backends/commoncrypto/backend.py
|
||||
../cryptography/hazmat/primitives/twofactor/totp.py
|
||||
../cryptography/hazmat/primitives/twofactor/__init__.py
|
||||
../cryptography/hazmat/primitives/twofactor/hotp.py
|
||||
../cryptography/hazmat/primitives/kdf/__init__.py
|
||||
../cryptography/hazmat/primitives/kdf/pbkdf2.py
|
||||
../cryptography/hazmat/primitives/kdf/hkdf.py
|
||||
../cryptography/hazmat/primitives/asymmetric/rsa.py
|
||||
../cryptography/hazmat/primitives/asymmetric/dsa.py
|
||||
../cryptography/hazmat/primitives/asymmetric/__init__.py
|
||||
../cryptography/hazmat/primitives/asymmetric/padding.py
|
||||
../cryptography/hazmat/primitives/asymmetric/ec.py
|
||||
../cryptography/hazmat/primitives/ciphers/modes.py
|
||||
../cryptography/hazmat/primitives/ciphers/__init__.py
|
||||
../cryptography/hazmat/primitives/ciphers/base.py
|
||||
../cryptography/hazmat/primitives/ciphers/algorithms.py
|
||||
../cryptography/hazmat/bindings/openssl/conf.py
|
||||
../cryptography/hazmat/bindings/openssl/ssl.py
|
||||
../cryptography/hazmat/bindings/openssl/crypto.py
|
||||
../cryptography/hazmat/bindings/openssl/hmac.py
|
||||
../cryptography/hazmat/bindings/openssl/rsa.py
|
||||
../cryptography/hazmat/bindings/openssl/bio.py
|
||||
../cryptography/hazmat/bindings/openssl/binding.py
|
||||
../cryptography/hazmat/bindings/openssl/cmac.py
|
||||
../cryptography/hazmat/bindings/openssl/pem.py
|
||||
../cryptography/hazmat/bindings/openssl/rand.py
|
||||
../cryptography/hazmat/bindings/openssl/pkcs7.py
|
||||
../cryptography/hazmat/bindings/openssl/osrandom_engine.py
|
||||
../cryptography/hazmat/bindings/openssl/objects.py
|
||||
../cryptography/hazmat/bindings/openssl/x509.py
|
||||
../cryptography/hazmat/bindings/openssl/err.py
|
||||
../cryptography/hazmat/bindings/openssl/dsa.py
|
||||
../cryptography/hazmat/bindings/openssl/x509_vfy.py
|
||||
../cryptography/hazmat/bindings/openssl/dh.py
|
||||
../cryptography/hazmat/bindings/openssl/pkcs12.py
|
||||
../cryptography/hazmat/bindings/openssl/__init__.py
|
||||
../cryptography/hazmat/bindings/openssl/aes.py
|
||||
../cryptography/hazmat/bindings/openssl/bignum.py
|
||||
../cryptography/hazmat/bindings/openssl/x509name.py
|
||||
../cryptography/hazmat/bindings/openssl/asn1.py
|
||||
../cryptography/hazmat/bindings/openssl/cms.py
|
||||
../cryptography/hazmat/bindings/openssl/nid.py
|
||||
../cryptography/hazmat/bindings/openssl/ecdh.py
|
||||
../cryptography/hazmat/bindings/openssl/ecdsa.py
|
||||
../cryptography/hazmat/bindings/openssl/x509v3.py
|
||||
../cryptography/hazmat/bindings/openssl/evp.py
|
||||
../cryptography/hazmat/bindings/openssl/opensslv.py
|
||||
../cryptography/hazmat/bindings/openssl/engine.py
|
||||
../cryptography/hazmat/bindings/openssl/ec.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_cryptor.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/binding.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_key_derivation.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/seckey.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_hmac.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_digest.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/__init__.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/sectransform.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/secitem.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/secimport.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/cf.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/seckeychain.py
|
||||
../cryptography/exceptions.pyc
|
||||
../cryptography/__init__.pyc
|
||||
../cryptography/fernet.pyc
|
||||
../cryptography/utils.pyc
|
||||
../cryptography/__about__.pyc
|
||||
../cryptography/hazmat/__init__.pyc
|
||||
../cryptography/hazmat/backends/multibackend.pyc
|
||||
../cryptography/hazmat/backends/interfaces.pyc
|
||||
../cryptography/hazmat/backends/__init__.pyc
|
||||
../cryptography/hazmat/primitives/hmac.pyc
|
||||
../cryptography/hazmat/primitives/hashes.pyc
|
||||
../cryptography/hazmat/primitives/cmac.pyc
|
||||
../cryptography/hazmat/primitives/interfaces.pyc
|
||||
../cryptography/hazmat/primitives/serialization.pyc
|
||||
../cryptography/hazmat/primitives/constant_time.pyc
|
||||
../cryptography/hazmat/primitives/__init__.pyc
|
||||
../cryptography/hazmat/primitives/padding.pyc
|
||||
../cryptography/hazmat/bindings/__init__.pyc
|
||||
../cryptography/hazmat/bindings/utils.pyc
|
||||
../cryptography/hazmat/backends/openssl/hmac.pyc
|
||||
../cryptography/hazmat/backends/openssl/rsa.pyc
|
||||
../cryptography/hazmat/backends/openssl/hashes.pyc
|
||||
../cryptography/hazmat/backends/openssl/cmac.pyc
|
||||
../cryptography/hazmat/backends/openssl/dsa.pyc
|
||||
../cryptography/hazmat/backends/openssl/__init__.pyc
|
||||
../cryptography/hazmat/backends/openssl/ciphers.pyc
|
||||
../cryptography/hazmat/backends/openssl/backend.pyc
|
||||
../cryptography/hazmat/backends/openssl/ec.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/hmac.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/hashes.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/__init__.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/ciphers.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/backend.pyc
|
||||
../cryptography/hazmat/primitives/twofactor/totp.pyc
|
||||
../cryptography/hazmat/primitives/twofactor/__init__.pyc
|
||||
../cryptography/hazmat/primitives/twofactor/hotp.pyc
|
||||
../cryptography/hazmat/primitives/kdf/__init__.pyc
|
||||
../cryptography/hazmat/primitives/kdf/pbkdf2.pyc
|
||||
../cryptography/hazmat/primitives/kdf/hkdf.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/rsa.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/dsa.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/__init__.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/padding.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/ec.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/modes.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/__init__.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/base.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/algorithms.pyc
|
||||
../cryptography/hazmat/bindings/openssl/conf.pyc
|
||||
../cryptography/hazmat/bindings/openssl/ssl.pyc
|
||||
../cryptography/hazmat/bindings/openssl/crypto.pyc
|
||||
../cryptography/hazmat/bindings/openssl/hmac.pyc
|
||||
../cryptography/hazmat/bindings/openssl/rsa.pyc
|
||||
../cryptography/hazmat/bindings/openssl/bio.pyc
|
||||
../cryptography/hazmat/bindings/openssl/binding.pyc
|
||||
../cryptography/hazmat/bindings/openssl/cmac.pyc
|
||||
../cryptography/hazmat/bindings/openssl/pem.pyc
|
||||
../cryptography/hazmat/bindings/openssl/rand.pyc
|
||||
../cryptography/hazmat/bindings/openssl/pkcs7.pyc
|
||||
../cryptography/hazmat/bindings/openssl/osrandom_engine.pyc
|
||||
../cryptography/hazmat/bindings/openssl/objects.pyc
|
||||
../cryptography/hazmat/bindings/openssl/x509.pyc
|
||||
../cryptography/hazmat/bindings/openssl/err.pyc
|
||||
../cryptography/hazmat/bindings/openssl/dsa.pyc
|
||||
../cryptography/hazmat/bindings/openssl/x509_vfy.pyc
|
||||
../cryptography/hazmat/bindings/openssl/dh.pyc
|
||||
../cryptography/hazmat/bindings/openssl/pkcs12.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__init__.pyc
|
||||
../cryptography/hazmat/bindings/openssl/aes.pyc
|
||||
../cryptography/hazmat/bindings/openssl/bignum.pyc
|
||||
../cryptography/hazmat/bindings/openssl/x509name.pyc
|
||||
../cryptography/hazmat/bindings/openssl/asn1.pyc
|
||||
../cryptography/hazmat/bindings/openssl/cms.pyc
|
||||
../cryptography/hazmat/bindings/openssl/nid.pyc
|
||||
../cryptography/hazmat/bindings/openssl/ecdh.pyc
|
||||
../cryptography/hazmat/bindings/openssl/ecdsa.pyc
|
||||
../cryptography/hazmat/bindings/openssl/x509v3.pyc
|
||||
../cryptography/hazmat/bindings/openssl/evp.pyc
|
||||
../cryptography/hazmat/bindings/openssl/opensslv.pyc
|
||||
../cryptography/hazmat/bindings/openssl/engine.pyc
|
||||
../cryptography/hazmat/bindings/openssl/ec.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_cryptor.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/binding.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_key_derivation.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/seckey.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_hmac.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_digest.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__init__.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/sectransform.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/secitem.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/secimport.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/cf.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/seckeychain.pyc
|
||||
../cryptography/_Cryptography_cffi_4ed9e37dx4000d087.so
|
||||
../cryptography/_Cryptography_cffi_684bb40axf342507b.so
|
||||
../cryptography/_Cryptography_cffi_8f86901cxc1767c5a.so
|
||||
./
|
||||
requires.txt
|
||||
SOURCES.txt
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
not-zip-safe
|
||||
top_level.txt
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
cffi>=0.8
|
||||
six>=1.4.1
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
_Cryptography_cffi_684bb40axf342507b
|
||||
_Cryptography_cffi_4ed9e37dx4000d087
|
||||
cryptography
|
||||
_Cryptography_cffi_8f86901cxc1767c5a
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,15 +0,0 @@
|
|||
../ed25519/keys.py
|
||||
../ed25519/_version.py
|
||||
../ed25519/test_ed25519.py
|
||||
../ed25519/__init__.py
|
||||
../ed25519/keys.pyc
|
||||
../ed25519/_version.pyc
|
||||
../ed25519/test_ed25519.pyc
|
||||
../ed25519/__init__.pyc
|
||||
../ed25519/_ed25519.so
|
||||
./
|
||||
SOURCES.txt
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
top_level.txt
|
||||
../../../../bin/edsig
|
||||
Binary file not shown.
|
|
@ -1,30 +0,0 @@
|
|||
../OpenSSL/__init__.py
|
||||
../OpenSSL/tsafe.py
|
||||
../OpenSSL/rand.py
|
||||
../OpenSSL/crypto.py
|
||||
../OpenSSL/SSL.py
|
||||
../OpenSSL/version.py
|
||||
../OpenSSL/test/__init__.py
|
||||
../OpenSSL/test/util.py
|
||||
../OpenSSL/test/test_crypto.py
|
||||
../OpenSSL/test/test_rand.py
|
||||
../OpenSSL/test/test_ssl.py
|
||||
../OpenSSL/_util.py
|
||||
../OpenSSL/__init__.pyc
|
||||
../OpenSSL/tsafe.pyc
|
||||
../OpenSSL/rand.pyc
|
||||
../OpenSSL/crypto.pyc
|
||||
../OpenSSL/SSL.pyc
|
||||
../OpenSSL/version.pyc
|
||||
../OpenSSL/test/__init__.pyc
|
||||
../OpenSSL/test/util.pyc
|
||||
../OpenSSL/test/test_crypto.pyc
|
||||
../OpenSSL/test/test_rand.pyc
|
||||
../OpenSSL/test/test_ssl.pyc
|
||||
../OpenSSL/_util.pyc
|
||||
./
|
||||
requires.txt
|
||||
SOURCES.txt
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
top_level.txt
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
../pycparser/c_ast.py
|
||||
../pycparser/yacctab.py
|
||||
../pycparser/ast_transforms.py
|
||||
../pycparser/__init__.py
|
||||
../pycparser/plyparser.py
|
||||
../pycparser/c_lexer.py
|
||||
../pycparser/c_parser.py
|
||||
../pycparser/c_generator.py
|
||||
../pycparser/_ast_gen.py
|
||||
../pycparser/_build_tables.py
|
||||
../pycparser/lextab.py
|
||||
../pycparser/ply/ctokens.py
|
||||
../pycparser/ply/__init__.py
|
||||
../pycparser/ply/cpp.py
|
||||
../pycparser/ply/yacc.py
|
||||
../pycparser/ply/lex.py
|
||||
../pycparser/_c_ast.cfg
|
||||
../pycparser/c_ast.pyc
|
||||
../pycparser/yacctab.pyc
|
||||
../pycparser/ast_transforms.pyc
|
||||
../pycparser/__init__.pyc
|
||||
../pycparser/plyparser.pyc
|
||||
../pycparser/c_lexer.pyc
|
||||
../pycparser/c_parser.pyc
|
||||
../pycparser/c_generator.pyc
|
||||
../pycparser/_ast_gen.pyc
|
||||
../pycparser/_build_tables.pyc
|
||||
../pycparser/lextab.pyc
|
||||
../pycparser/ply/ctokens.pyc
|
||||
../pycparser/ply/__init__.pyc
|
||||
../pycparser/ply/cpp.pyc
|
||||
../pycparser/ply/yacc.pyc
|
||||
../pycparser/ply/lex.pyc
|
||||
./
|
||||
SOURCES.txt
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
top_level.txt
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
Metadata-Version: 1.1
|
||||
Name: six
|
||||
Version: 1.7.3
|
||||
Summary: Python 2 and 3 compatibility utilities
|
||||
Home-page: http://pypi.python.org/pypi/six/
|
||||
Author: Benjamin Peterson
|
||||
Author-email: benjamin@python.org
|
||||
License: MIT
|
||||
Description: Six is a Python 2 and 3 compatibility library. It provides utility functions
|
||||
for smoothing over the differences between the Python versions with the goal of
|
||||
writing Python code that is compatible on both Python versions. See the
|
||||
documentation for more information on what is provided.
|
||||
|
||||
Six supports every Python version since 2.5. It is contained in only one Python
|
||||
file, so it can be easily copied into your project. (The copyright and license
|
||||
notice must be retained.)
|
||||
|
||||
Online documentation is at http://pythonhosted.org/six/.
|
||||
|
||||
Bugs can be reported to http://bitbucket.org/gutworth/six. The code can also be
|
||||
found there.
|
||||
|
||||
For questions about six or porting in general, email the python-porting mailing
|
||||
list: http://mail.python.org/mailman/listinfo/python-porting
|
||||
|
||||
Platform: UNKNOWN
|
||||
Classifier: Programming Language :: Python :: 2
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Topic :: Software Development :: Libraries
|
||||
Classifier: Topic :: Utilities
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
CHANGES
|
||||
LICENSE
|
||||
MANIFEST.in
|
||||
README
|
||||
setup.cfg
|
||||
setup.py
|
||||
six.py
|
||||
test_six.py
|
||||
documentation/Makefile
|
||||
documentation/conf.py
|
||||
documentation/index.rst
|
||||
six.egg-info/PKG-INFO
|
||||
six.egg-info/SOURCES.txt
|
||||
six.egg-info/dependency_links.txt
|
||||
six.egg-info/top_level.txt
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
../six.py
|
||||
../six.pyc
|
||||
./
|
||||
SOURCES.txt
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
top_level.txt
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,114 +0,0 @@
|
|||
# mssql/information_schema.py
|
||||
# Copyright (C) 2005-2014 the SQLAlchemy authors and contributors <see AUTHORS file>
|
||||
#
|
||||
# This module is part of SQLAlchemy and is released under
|
||||
# the MIT License: http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
# TODO: should be using the sys. catalog with SQL Server, not information schema
|
||||
|
||||
from ... import Table, MetaData, Column
|
||||
from ...types import String, Unicode, UnicodeText, Integer, TypeDecorator
|
||||
from ... import cast
|
||||
from ... import util
|
||||
from ...sql import expression
|
||||
from ...ext.compiler import compiles
|
||||
|
||||
ischema = MetaData()
|
||||
|
||||
class CoerceUnicode(TypeDecorator):
|
||||
impl = Unicode
|
||||
|
||||
def process_bind_param(self, value, dialect):
|
||||
if util.py2k and isinstance(value, util.binary_type):
|
||||
value = value.decode(dialect.encoding)
|
||||
return value
|
||||
|
||||
def bind_expression(self, bindvalue):
|
||||
return _cast_on_2005(bindvalue)
|
||||
|
||||
class _cast_on_2005(expression.ColumnElement):
|
||||
def __init__(self, bindvalue):
|
||||
self.bindvalue = bindvalue
|
||||
|
||||
@compiles(_cast_on_2005)
|
||||
def _compile(element, compiler, **kw):
|
||||
from . import base
|
||||
if compiler.dialect.server_version_info < base.MS_2005_VERSION:
|
||||
return compiler.process(element.bindvalue, **kw)
|
||||
else:
|
||||
return compiler.process(cast(element.bindvalue, Unicode), **kw)
|
||||
|
||||
schemata = Table("SCHEMATA", ischema,
|
||||
Column("CATALOG_NAME", CoerceUnicode, key="catalog_name"),
|
||||
Column("SCHEMA_NAME", CoerceUnicode, key="schema_name"),
|
||||
Column("SCHEMA_OWNER", CoerceUnicode, key="schema_owner"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
||||
tables = Table("TABLES", ischema,
|
||||
Column("TABLE_CATALOG", CoerceUnicode, key="table_catalog"),
|
||||
Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"),
|
||||
Column("TABLE_NAME", CoerceUnicode, key="table_name"),
|
||||
Column("TABLE_TYPE", String(convert_unicode=True), key="table_type"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
||||
columns = Table("COLUMNS", ischema,
|
||||
Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"),
|
||||
Column("TABLE_NAME", CoerceUnicode, key="table_name"),
|
||||
Column("COLUMN_NAME", CoerceUnicode, key="column_name"),
|
||||
Column("IS_NULLABLE", Integer, key="is_nullable"),
|
||||
Column("DATA_TYPE", String, key="data_type"),
|
||||
Column("ORDINAL_POSITION", Integer, key="ordinal_position"),
|
||||
Column("CHARACTER_MAXIMUM_LENGTH", Integer, key="character_maximum_length"),
|
||||
Column("NUMERIC_PRECISION", Integer, key="numeric_precision"),
|
||||
Column("NUMERIC_SCALE", Integer, key="numeric_scale"),
|
||||
Column("COLUMN_DEFAULT", Integer, key="column_default"),
|
||||
Column("COLLATION_NAME", String, key="collation_name"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
||||
constraints = Table("TABLE_CONSTRAINTS", ischema,
|
||||
Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"),
|
||||
Column("TABLE_NAME", CoerceUnicode, key="table_name"),
|
||||
Column("CONSTRAINT_NAME", CoerceUnicode, key="constraint_name"),
|
||||
Column("CONSTRAINT_TYPE", String(convert_unicode=True), key="constraint_type"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
||||
column_constraints = Table("CONSTRAINT_COLUMN_USAGE", ischema,
|
||||
Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"),
|
||||
Column("TABLE_NAME", CoerceUnicode, key="table_name"),
|
||||
Column("COLUMN_NAME", CoerceUnicode, key="column_name"),
|
||||
Column("CONSTRAINT_NAME", CoerceUnicode, key="constraint_name"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
||||
key_constraints = Table("KEY_COLUMN_USAGE", ischema,
|
||||
Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"),
|
||||
Column("TABLE_NAME", CoerceUnicode, key="table_name"),
|
||||
Column("COLUMN_NAME", CoerceUnicode, key="column_name"),
|
||||
Column("CONSTRAINT_NAME", CoerceUnicode, key="constraint_name"),
|
||||
Column("ORDINAL_POSITION", Integer, key="ordinal_position"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
||||
ref_constraints = Table("REFERENTIAL_CONSTRAINTS", ischema,
|
||||
Column("CONSTRAINT_CATALOG", CoerceUnicode, key="constraint_catalog"),
|
||||
Column("CONSTRAINT_SCHEMA", CoerceUnicode, key="constraint_schema"),
|
||||
Column("CONSTRAINT_NAME", CoerceUnicode, key="constraint_name"),
|
||||
# TODO: is CATLOG misspelled ?
|
||||
Column("UNIQUE_CONSTRAINT_CATLOG", CoerceUnicode,
|
||||
key="unique_constraint_catalog"),
|
||||
|
||||
Column("UNIQUE_CONSTRAINT_SCHEMA", CoerceUnicode,
|
||||
key="unique_constraint_schema"),
|
||||
Column("UNIQUE_CONSTRAINT_NAME", CoerceUnicode,
|
||||
key="unique_constraint_name"),
|
||||
Column("MATCH_OPTION", String, key="match_option"),
|
||||
Column("UPDATE_RULE", String, key="update_rule"),
|
||||
Column("DELETE_RULE", String, key="delete_rule"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
||||
views = Table("VIEWS", ischema,
|
||||
Column("TABLE_CATALOG", CoerceUnicode, key="table_catalog"),
|
||||
Column("TABLE_SCHEMA", CoerceUnicode, key="table_schema"),
|
||||
Column("TABLE_NAME", CoerceUnicode, key="table_name"),
|
||||
Column("VIEW_DEFINITION", CoerceUnicode, key="view_definition"),
|
||||
Column("CHECK_OPTION", String, key="check_option"),
|
||||
Column("IS_UPDATABLE", String, key="is_updatable"),
|
||||
schema="INFORMATION_SCHEMA")
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
Metadata-Version: 1.1
|
||||
Name: SQLAlchemy
|
||||
Version: 0.9.4
|
||||
Version: 0.9.7
|
||||
Summary: Database Abstraction Library
|
||||
Home-page: http://www.sqlalchemy.org
|
||||
Author: Mike Bayer
|
||||
|
|
@ -49,6 +49,7 @@ doc/_modules/examples/inheritance/single.html
|
|||
doc/_modules/examples/join_conditions/cast.html
|
||||
doc/_modules/examples/join_conditions/threeway.html
|
||||
doc/_modules/examples/large_collection/large_collection.html
|
||||
doc/_modules/examples/materialized_paths/materialized_paths.html
|
||||
doc/_modules/examples/nested_sets/nested_sets.html
|
||||
doc/_modules/examples/postgis/postgis.html
|
||||
doc/_modules/examples/sharding/attribute_shard.html
|
||||
|
|
@ -58,91 +59,13 @@ doc/_modules/examples/versioned_rows/versioned_map.html
|
|||
doc/_modules/examples/versioned_rows/versioned_rows.html
|
||||
doc/_modules/examples/vertical/dictlike-polymorphic.html
|
||||
doc/_modules/examples/vertical/dictlike.html
|
||||
doc/_sources/contents.txt
|
||||
doc/_sources/copyright.txt
|
||||
doc/_sources/faq.txt
|
||||
doc/_sources/glossary.txt
|
||||
doc/_sources/index.txt
|
||||
doc/_sources/intro.txt
|
||||
doc/_sources/changelog/changelog_01.txt
|
||||
doc/_sources/changelog/changelog_02.txt
|
||||
doc/_sources/changelog/changelog_03.txt
|
||||
doc/_sources/changelog/changelog_04.txt
|
||||
doc/_sources/changelog/changelog_05.txt
|
||||
doc/_sources/changelog/changelog_06.txt
|
||||
doc/_sources/changelog/changelog_07.txt
|
||||
doc/_sources/changelog/changelog_08.txt
|
||||
doc/_sources/changelog/changelog_09.txt
|
||||
doc/_sources/changelog/index.txt
|
||||
doc/_sources/changelog/migration_04.txt
|
||||
doc/_sources/changelog/migration_05.txt
|
||||
doc/_sources/changelog/migration_06.txt
|
||||
doc/_sources/changelog/migration_07.txt
|
||||
doc/_sources/changelog/migration_08.txt
|
||||
doc/_sources/changelog/migration_09.txt
|
||||
doc/_sources/core/compiler.txt
|
||||
doc/_sources/core/connections.txt
|
||||
doc/_sources/core/constraints.txt
|
||||
doc/_sources/core/ddl.txt
|
||||
doc/_sources/core/defaults.txt
|
||||
doc/_sources/core/dml.txt
|
||||
doc/_sources/core/engines.txt
|
||||
doc/_sources/core/event.txt
|
||||
doc/_sources/core/events.txt
|
||||
doc/_sources/core/exceptions.txt
|
||||
doc/_sources/core/expression_api.txt
|
||||
doc/_sources/core/functions.txt
|
||||
doc/_sources/core/index.txt
|
||||
doc/_sources/core/inspection.txt
|
||||
doc/_sources/core/interfaces.txt
|
||||
doc/_sources/core/internals.txt
|
||||
doc/_sources/core/metadata.txt
|
||||
doc/_sources/core/pooling.txt
|
||||
doc/_sources/core/reflection.txt
|
||||
doc/_sources/core/schema.txt
|
||||
doc/_sources/core/selectable.txt
|
||||
doc/_sources/core/serializer.txt
|
||||
doc/_sources/core/sqlelement.txt
|
||||
doc/_sources/core/tutorial.txt
|
||||
doc/_sources/core/types.txt
|
||||
doc/_sources/dialects/drizzle.txt
|
||||
doc/_sources/dialects/firebird.txt
|
||||
doc/_sources/dialects/index.txt
|
||||
doc/_sources/dialects/mssql.txt
|
||||
doc/_sources/dialects/mysql.txt
|
||||
doc/_sources/dialects/oracle.txt
|
||||
doc/_sources/dialects/postgresql.txt
|
||||
doc/_sources/dialects/sqlite.txt
|
||||
doc/_sources/dialects/sybase.txt
|
||||
doc/_sources/orm/collections.txt
|
||||
doc/_sources/orm/deprecated.txt
|
||||
doc/_sources/orm/events.txt
|
||||
doc/_sources/orm/examples.txt
|
||||
doc/_sources/orm/exceptions.txt
|
||||
doc/_sources/orm/index.txt
|
||||
doc/_sources/orm/inheritance.txt
|
||||
doc/_sources/orm/internals.txt
|
||||
doc/_sources/orm/loading.txt
|
||||
doc/_sources/orm/mapper_config.txt
|
||||
doc/_sources/orm/query.txt
|
||||
doc/_sources/orm/relationships.txt
|
||||
doc/_sources/orm/session.txt
|
||||
doc/_sources/orm/tutorial.txt
|
||||
doc/_sources/orm/extensions/associationproxy.txt
|
||||
doc/_sources/orm/extensions/automap.txt
|
||||
doc/_sources/orm/extensions/declarative.txt
|
||||
doc/_sources/orm/extensions/horizontal_shard.txt
|
||||
doc/_sources/orm/extensions/hybrid.txt
|
||||
doc/_sources/orm/extensions/index.txt
|
||||
doc/_sources/orm/extensions/instrumentation.txt
|
||||
doc/_sources/orm/extensions/mutable.txt
|
||||
doc/_sources/orm/extensions/orderinglist.txt
|
||||
doc/_static/basic.css
|
||||
doc/_static/changelog.css
|
||||
doc/_static/comment-bright.png
|
||||
doc/_static/comment-close.png
|
||||
doc/_static/comment.png
|
||||
doc/_static/default.css
|
||||
doc/_static/detectmobile.js
|
||||
doc/_static/docs.css
|
||||
doc/_static/doctools.js
|
||||
doc/_static/down-pressed.png
|
||||
|
|
@ -252,6 +175,7 @@ doc/build/orm/extensions/index.rst
|
|||
doc/build/orm/extensions/instrumentation.rst
|
||||
doc/build/orm/extensions/mutable.rst
|
||||
doc/build/orm/extensions/orderinglist.rst
|
||||
doc/build/static/detectmobile.js
|
||||
doc/build/static/docs.css
|
||||
doc/build/static/init.js
|
||||
doc/build/templates/genindex.mako
|
||||
|
|
@ -378,6 +302,8 @@ examples/join_conditions/cast.py
|
|||
examples/join_conditions/threeway.py
|
||||
examples/large_collection/__init__.py
|
||||
examples/large_collection/large_collection.py
|
||||
examples/materialized_paths/__init__.py
|
||||
examples/materialized_paths/materialized_paths.py
|
||||
examples/nested_sets/__init__.py
|
||||
examples/nested_sets/nested_sets.py
|
||||
examples/postgis/__init__.py
|
||||
|
|
@ -547,6 +473,7 @@ lib/sqlalchemy/testing/__init__.py
|
|||
lib/sqlalchemy/testing/assertions.py
|
||||
lib/sqlalchemy/testing/assertsql.py
|
||||
lib/sqlalchemy/testing/config.py
|
||||
lib/sqlalchemy/testing/distutils_run.py
|
||||
lib/sqlalchemy/testing/engines.py
|
||||
lib/sqlalchemy/testing/entities.py
|
||||
lib/sqlalchemy/testing/exclusions.py
|
||||
|
|
@ -725,6 +652,7 @@ test/orm/inheritance/test_relationship.py
|
|||
test/orm/inheritance/test_selects.py
|
||||
test/orm/inheritance/test_single.py
|
||||
test/orm/inheritance/test_with_poly.py
|
||||
test/perf/invalidate_stresstest.py
|
||||
test/perf/orm2010.py
|
||||
test/sql/__init__.py
|
||||
test/sql/test_case_statement.py
|
||||
|
|
@ -0,0 +1,366 @@
|
|||
../sqlalchemy/interfaces.py
|
||||
../sqlalchemy/events.py
|
||||
../sqlalchemy/types.py
|
||||
../sqlalchemy/exc.py
|
||||
../sqlalchemy/schema.py
|
||||
../sqlalchemy/inspection.py
|
||||
../sqlalchemy/__init__.py
|
||||
../sqlalchemy/pool.py
|
||||
../sqlalchemy/processors.py
|
||||
../sqlalchemy/log.py
|
||||
../sqlalchemy/databases/__init__.py
|
||||
../sqlalchemy/testing/engines.py
|
||||
../sqlalchemy/testing/schema.py
|
||||
../sqlalchemy/testing/pickleable.py
|
||||
../sqlalchemy/testing/fixtures.py
|
||||
../sqlalchemy/testing/__init__.py
|
||||
../sqlalchemy/testing/assertsql.py
|
||||
../sqlalchemy/testing/config.py
|
||||
../sqlalchemy/testing/warnings.py
|
||||
../sqlalchemy/testing/distutils_run.py
|
||||
../sqlalchemy/testing/requirements.py
|
||||
../sqlalchemy/testing/runner.py
|
||||
../sqlalchemy/testing/assertions.py
|
||||
../sqlalchemy/testing/profiling.py
|
||||
../sqlalchemy/testing/mock.py
|
||||
../sqlalchemy/testing/exclusions.py
|
||||
../sqlalchemy/testing/util.py
|
||||
../sqlalchemy/testing/entities.py
|
||||
../sqlalchemy/testing/plugin/noseplugin.py
|
||||
../sqlalchemy/testing/plugin/__init__.py
|
||||
../sqlalchemy/testing/plugin/pytestplugin.py
|
||||
../sqlalchemy/testing/plugin/plugin_base.py
|
||||
../sqlalchemy/testing/suite/test_insert.py
|
||||
../sqlalchemy/testing/suite/test_results.py
|
||||
../sqlalchemy/testing/suite/__init__.py
|
||||
../sqlalchemy/testing/suite/test_select.py
|
||||
../sqlalchemy/testing/suite/test_sequence.py
|
||||
../sqlalchemy/testing/suite/test_types.py
|
||||
../sqlalchemy/testing/suite/test_update_delete.py
|
||||
../sqlalchemy/testing/suite/test_reflection.py
|
||||
../sqlalchemy/testing/suite/test_ddl.py
|
||||
../sqlalchemy/orm/persistence.py
|
||||
../sqlalchemy/orm/interfaces.py
|
||||
../sqlalchemy/orm/events.py
|
||||
../sqlalchemy/orm/path_registry.py
|
||||
../sqlalchemy/orm/descriptor_props.py
|
||||
../sqlalchemy/orm/identity.py
|
||||
../sqlalchemy/orm/evaluator.py
|
||||
../sqlalchemy/orm/exc.py
|
||||
../sqlalchemy/orm/base.py
|
||||
../sqlalchemy/orm/__init__.py
|
||||
../sqlalchemy/orm/properties.py
|
||||
../sqlalchemy/orm/relationships.py
|
||||
../sqlalchemy/orm/collections.py
|
||||
../sqlalchemy/orm/strategy_options.py
|
||||
../sqlalchemy/orm/dynamic.py
|
||||
../sqlalchemy/orm/attributes.py
|
||||
../sqlalchemy/orm/mapper.py
|
||||
../sqlalchemy/orm/state.py
|
||||
../sqlalchemy/orm/sync.py
|
||||
../sqlalchemy/orm/loading.py
|
||||
../sqlalchemy/orm/strategies.py
|
||||
../sqlalchemy/orm/unitofwork.py
|
||||
../sqlalchemy/orm/query.py
|
||||
../sqlalchemy/orm/instrumentation.py
|
||||
../sqlalchemy/orm/session.py
|
||||
../sqlalchemy/orm/deprecated_interfaces.py
|
||||
../sqlalchemy/orm/scoping.py
|
||||
../sqlalchemy/orm/dependency.py
|
||||
../sqlalchemy/orm/util.py
|
||||
../sqlalchemy/sql/default_comparator.py
|
||||
../sqlalchemy/sql/sqltypes.py
|
||||
../sqlalchemy/sql/functions.py
|
||||
../sqlalchemy/sql/base.py
|
||||
../sqlalchemy/sql/schema.py
|
||||
../sqlalchemy/sql/__init__.py
|
||||
../sqlalchemy/sql/ddl.py
|
||||
../sqlalchemy/sql/elements.py
|
||||
../sqlalchemy/sql/compiler.py
|
||||
../sqlalchemy/sql/annotation.py
|
||||
../sqlalchemy/sql/dml.py
|
||||
../sqlalchemy/sql/expression.py
|
||||
../sqlalchemy/sql/operators.py
|
||||
../sqlalchemy/sql/selectable.py
|
||||
../sqlalchemy/sql/visitors.py
|
||||
../sqlalchemy/sql/type_api.py
|
||||
../sqlalchemy/sql/naming.py
|
||||
../sqlalchemy/sql/util.py
|
||||
../sqlalchemy/ext/serializer.py
|
||||
../sqlalchemy/ext/associationproxy.py
|
||||
../sqlalchemy/ext/automap.py
|
||||
../sqlalchemy/ext/__init__.py
|
||||
../sqlalchemy/ext/hybrid.py
|
||||
../sqlalchemy/ext/compiler.py
|
||||
../sqlalchemy/ext/horizontal_shard.py
|
||||
../sqlalchemy/ext/orderinglist.py
|
||||
../sqlalchemy/ext/instrumentation.py
|
||||
../sqlalchemy/ext/mutable.py
|
||||
../sqlalchemy/ext/declarative/base.py
|
||||
../sqlalchemy/ext/declarative/__init__.py
|
||||
../sqlalchemy/ext/declarative/clsregistry.py
|
||||
../sqlalchemy/ext/declarative/api.py
|
||||
../sqlalchemy/util/langhelpers.py
|
||||
../sqlalchemy/util/queue.py
|
||||
../sqlalchemy/util/compat.py
|
||||
../sqlalchemy/util/__init__.py
|
||||
../sqlalchemy/util/deprecations.py
|
||||
../sqlalchemy/util/_collections.py
|
||||
../sqlalchemy/util/topological.py
|
||||
../sqlalchemy/connectors/mxodbc.py
|
||||
../sqlalchemy/connectors/__init__.py
|
||||
../sqlalchemy/connectors/pyodbc.py
|
||||
../sqlalchemy/connectors/mysqldb.py
|
||||
../sqlalchemy/connectors/zxJDBC.py
|
||||
../sqlalchemy/dialects/postgres.py
|
||||
../sqlalchemy/dialects/__init__.py
|
||||
../sqlalchemy/dialects/mssql/adodbapi.py
|
||||
../sqlalchemy/dialects/mssql/mxodbc.py
|
||||
../sqlalchemy/dialects/mssql/base.py
|
||||
../sqlalchemy/dialects/mssql/information_schema.py
|
||||
../sqlalchemy/dialects/mssql/__init__.py
|
||||
../sqlalchemy/dialects/mssql/pyodbc.py
|
||||
../sqlalchemy/dialects/mssql/zxjdbc.py
|
||||
../sqlalchemy/dialects/mssql/pymssql.py
|
||||
../sqlalchemy/dialects/postgresql/pg8000.py
|
||||
../sqlalchemy/dialects/postgresql/ranges.py
|
||||
../sqlalchemy/dialects/postgresql/base.py
|
||||
../sqlalchemy/dialects/postgresql/__init__.py
|
||||
../sqlalchemy/dialects/postgresql/zxjdbc.py
|
||||
../sqlalchemy/dialects/postgresql/json.py
|
||||
../sqlalchemy/dialects/postgresql/pypostgresql.py
|
||||
../sqlalchemy/dialects/postgresql/constraints.py
|
||||
../sqlalchemy/dialects/postgresql/hstore.py
|
||||
../sqlalchemy/dialects/postgresql/psycopg2.py
|
||||
../sqlalchemy/dialects/sybase/mxodbc.py
|
||||
../sqlalchemy/dialects/sybase/base.py
|
||||
../sqlalchemy/dialects/sybase/__init__.py
|
||||
../sqlalchemy/dialects/sybase/pyodbc.py
|
||||
../sqlalchemy/dialects/sybase/pysybase.py
|
||||
../sqlalchemy/dialects/drizzle/base.py
|
||||
../sqlalchemy/dialects/drizzle/__init__.py
|
||||
../sqlalchemy/dialects/drizzle/mysqldb.py
|
||||
../sqlalchemy/dialects/mysql/mysqlconnector.py
|
||||
../sqlalchemy/dialects/mysql/base.py
|
||||
../sqlalchemy/dialects/mysql/__init__.py
|
||||
../sqlalchemy/dialects/mysql/pyodbc.py
|
||||
../sqlalchemy/dialects/mysql/zxjdbc.py
|
||||
../sqlalchemy/dialects/mysql/oursql.py
|
||||
../sqlalchemy/dialects/mysql/pymysql.py
|
||||
../sqlalchemy/dialects/mysql/cymysql.py
|
||||
../sqlalchemy/dialects/mysql/gaerdbms.py
|
||||
../sqlalchemy/dialects/mysql/mysqldb.py
|
||||
../sqlalchemy/dialects/sqlite/base.py
|
||||
../sqlalchemy/dialects/sqlite/__init__.py
|
||||
../sqlalchemy/dialects/sqlite/pysqlite.py
|
||||
../sqlalchemy/dialects/firebird/base.py
|
||||
../sqlalchemy/dialects/firebird/__init__.py
|
||||
../sqlalchemy/dialects/firebird/fdb.py
|
||||
../sqlalchemy/dialects/firebird/kinterbasdb.py
|
||||
../sqlalchemy/dialects/oracle/base.py
|
||||
../sqlalchemy/dialects/oracle/__init__.py
|
||||
../sqlalchemy/dialects/oracle/zxjdbc.py
|
||||
../sqlalchemy/dialects/oracle/cx_oracle.py
|
||||
../sqlalchemy/engine/interfaces.py
|
||||
../sqlalchemy/engine/result.py
|
||||
../sqlalchemy/engine/base.py
|
||||
../sqlalchemy/engine/url.py
|
||||
../sqlalchemy/engine/threadlocal.py
|
||||
../sqlalchemy/engine/__init__.py
|
||||
../sqlalchemy/engine/default.py
|
||||
../sqlalchemy/engine/strategies.py
|
||||
../sqlalchemy/engine/reflection.py
|
||||
../sqlalchemy/engine/util.py
|
||||
../sqlalchemy/event/base.py
|
||||
../sqlalchemy/event/__init__.py
|
||||
../sqlalchemy/event/attr.py
|
||||
../sqlalchemy/event/registry.py
|
||||
../sqlalchemy/event/legacy.py
|
||||
../sqlalchemy/event/api.py
|
||||
../sqlalchemy/__pycache__/interfaces.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/events.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/types.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/exc.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/schema.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/inspection.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/pool.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/processors.cpython-34.pyc
|
||||
../sqlalchemy/__pycache__/log.cpython-34.pyc
|
||||
../sqlalchemy/databases/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/engines.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/schema.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/pickleable.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/fixtures.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/assertsql.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/config.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/warnings.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/distutils_run.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/requirements.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/runner.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/assertions.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/profiling.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/mock.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/exclusions.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/util.cpython-34.pyc
|
||||
../sqlalchemy/testing/__pycache__/entities.cpython-34.pyc
|
||||
../sqlalchemy/testing/plugin/__pycache__/noseplugin.cpython-34.pyc
|
||||
../sqlalchemy/testing/plugin/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/testing/plugin/__pycache__/pytestplugin.cpython-34.pyc
|
||||
../sqlalchemy/testing/plugin/__pycache__/plugin_base.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_insert.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_results.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_select.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_sequence.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_types.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_update_delete.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_reflection.cpython-34.pyc
|
||||
../sqlalchemy/testing/suite/__pycache__/test_ddl.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/persistence.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/interfaces.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/events.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/path_registry.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/descriptor_props.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/identity.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/evaluator.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/exc.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/properties.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/relationships.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/collections.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/strategy_options.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/dynamic.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/attributes.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/mapper.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/state.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/sync.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/loading.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/strategies.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/unitofwork.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/query.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/instrumentation.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/session.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/deprecated_interfaces.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/scoping.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/dependency.cpython-34.pyc
|
||||
../sqlalchemy/orm/__pycache__/util.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/default_comparator.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/sqltypes.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/functions.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/schema.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/ddl.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/elements.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/compiler.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/annotation.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/dml.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/expression.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/operators.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/selectable.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/visitors.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/type_api.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/naming.cpython-34.pyc
|
||||
../sqlalchemy/sql/__pycache__/util.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/serializer.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/associationproxy.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/automap.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/hybrid.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/compiler.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/horizontal_shard.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/orderinglist.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/instrumentation.cpython-34.pyc
|
||||
../sqlalchemy/ext/__pycache__/mutable.cpython-34.pyc
|
||||
../sqlalchemy/ext/declarative/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/ext/declarative/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/ext/declarative/__pycache__/clsregistry.cpython-34.pyc
|
||||
../sqlalchemy/ext/declarative/__pycache__/api.cpython-34.pyc
|
||||
../sqlalchemy/util/__pycache__/langhelpers.cpython-34.pyc
|
||||
../sqlalchemy/util/__pycache__/queue.cpython-34.pyc
|
||||
../sqlalchemy/util/__pycache__/compat.cpython-34.pyc
|
||||
../sqlalchemy/util/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/util/__pycache__/deprecations.cpython-34.pyc
|
||||
../sqlalchemy/util/__pycache__/_collections.cpython-34.pyc
|
||||
../sqlalchemy/util/__pycache__/topological.cpython-34.pyc
|
||||
../sqlalchemy/connectors/__pycache__/mxodbc.cpython-34.pyc
|
||||
../sqlalchemy/connectors/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/connectors/__pycache__/pyodbc.cpython-34.pyc
|
||||
../sqlalchemy/connectors/__pycache__/mysqldb.cpython-34.pyc
|
||||
../sqlalchemy/connectors/__pycache__/zxJDBC.cpython-34.pyc
|
||||
../sqlalchemy/dialects/__pycache__/postgres.cpython-34.pyc
|
||||
../sqlalchemy/dialects/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/adodbapi.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/mxodbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/information_schema.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/pyodbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/zxjdbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mssql/__pycache__/pymssql.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/pg8000.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/ranges.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/zxjdbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/json.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/pypostgresql.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/constraints.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/hstore.cpython-34.pyc
|
||||
../sqlalchemy/dialects/postgresql/__pycache__/psycopg2.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sybase/__pycache__/mxodbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sybase/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sybase/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sybase/__pycache__/pyodbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sybase/__pycache__/pysybase.cpython-34.pyc
|
||||
../sqlalchemy/dialects/drizzle/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/drizzle/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/drizzle/__pycache__/mysqldb.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/mysqlconnector.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/pyodbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/zxjdbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/oursql.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/pymysql.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/cymysql.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/gaerdbms.cpython-34.pyc
|
||||
../sqlalchemy/dialects/mysql/__pycache__/mysqldb.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sqlite/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sqlite/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/sqlite/__pycache__/pysqlite.cpython-34.pyc
|
||||
../sqlalchemy/dialects/firebird/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/firebird/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/firebird/__pycache__/fdb.cpython-34.pyc
|
||||
../sqlalchemy/dialects/firebird/__pycache__/kinterbasdb.cpython-34.pyc
|
||||
../sqlalchemy/dialects/oracle/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/dialects/oracle/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/dialects/oracle/__pycache__/zxjdbc.cpython-34.pyc
|
||||
../sqlalchemy/dialects/oracle/__pycache__/cx_oracle.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/interfaces.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/result.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/url.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/threadlocal.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/default.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/strategies.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/reflection.cpython-34.pyc
|
||||
../sqlalchemy/engine/__pycache__/util.cpython-34.pyc
|
||||
../sqlalchemy/event/__pycache__/base.cpython-34.pyc
|
||||
../sqlalchemy/event/__pycache__/__init__.cpython-34.pyc
|
||||
../sqlalchemy/event/__pycache__/attr.cpython-34.pyc
|
||||
../sqlalchemy/event/__pycache__/registry.cpython-34.pyc
|
||||
../sqlalchemy/event/__pycache__/legacy.cpython-34.pyc
|
||||
../sqlalchemy/event/__pycache__/api.cpython-34.pyc
|
||||
../sqlalchemy/cprocessors.cpython-34m.so
|
||||
../sqlalchemy/cresultproxy.cpython-34m.so
|
||||
../sqlalchemy/cutils.cpython-34m.so
|
||||
./
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
SOURCES.txt
|
||||
top_level.txt
|
||||
BIN
Linux_i686/lib/python3.4/site-packages/_cffi_backend.cpython-34m.so
Executable file
BIN
Linux_i686/lib/python3.4/site-packages/_cffi_backend.cpython-34m.so
Executable file
Binary file not shown.
|
|
@ -0,0 +1,16 @@
|
|||
try:
|
||||
import ast
|
||||
from _markerlib.markers import default_environment, compile, interpret
|
||||
except ImportError:
|
||||
if 'ast' in globals():
|
||||
raise
|
||||
def default_environment():
|
||||
return {}
|
||||
def compile(marker):
|
||||
def marker_fn(environment=None, override=None):
|
||||
# 'empty markers are True' heuristic won't install extra deps.
|
||||
return not marker.strip()
|
||||
marker_fn.__doc__ = marker
|
||||
return marker_fn
|
||||
def interpret(marker, environment=None, override=None):
|
||||
return compile(marker)()
|
||||
119
Linux_i686/lib/python3.4/site-packages/_markerlib/markers.py
Normal file
119
Linux_i686/lib/python3.4/site-packages/_markerlib/markers.py
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Interpret PEP 345 environment markers.
|
||||
|
||||
EXPR [in|==|!=|not in] EXPR [or|and] ...
|
||||
|
||||
where EXPR belongs to any of those:
|
||||
|
||||
python_version = '%s.%s' % (sys.version_info[0], sys.version_info[1])
|
||||
python_full_version = sys.version.split()[0]
|
||||
os.name = os.name
|
||||
sys.platform = sys.platform
|
||||
platform.version = platform.version()
|
||||
platform.machine = platform.machine()
|
||||
platform.python_implementation = platform.python_implementation()
|
||||
a free string, like '2.6', or 'win32'
|
||||
"""
|
||||
|
||||
__all__ = ['default_environment', 'compile', 'interpret']
|
||||
|
||||
import ast
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import weakref
|
||||
|
||||
_builtin_compile = compile
|
||||
|
||||
try:
|
||||
from platform import python_implementation
|
||||
except ImportError:
|
||||
if os.name == "java":
|
||||
# Jython 2.5 has ast module, but not platform.python_implementation() function.
|
||||
def python_implementation():
|
||||
return "Jython"
|
||||
else:
|
||||
raise
|
||||
|
||||
|
||||
# restricted set of variables
|
||||
_VARS = {'sys.platform': sys.platform,
|
||||
'python_version': '%s.%s' % sys.version_info[:2],
|
||||
# FIXME parsing sys.platform is not reliable, but there is no other
|
||||
# way to get e.g. 2.7.2+, and the PEP is defined with sys.version
|
||||
'python_full_version': sys.version.split(' ', 1)[0],
|
||||
'os.name': os.name,
|
||||
'platform.version': platform.version(),
|
||||
'platform.machine': platform.machine(),
|
||||
'platform.python_implementation': python_implementation(),
|
||||
'extra': None # wheel extension
|
||||
}
|
||||
|
||||
for var in list(_VARS.keys()):
|
||||
if '.' in var:
|
||||
_VARS[var.replace('.', '_')] = _VARS[var]
|
||||
|
||||
def default_environment():
|
||||
"""Return copy of default PEP 385 globals dictionary."""
|
||||
return dict(_VARS)
|
||||
|
||||
class ASTWhitelist(ast.NodeTransformer):
|
||||
def __init__(self, statement):
|
||||
self.statement = statement # for error messages
|
||||
|
||||
ALLOWED = (ast.Compare, ast.BoolOp, ast.Attribute, ast.Name, ast.Load, ast.Str)
|
||||
# Bool operations
|
||||
ALLOWED += (ast.And, ast.Or)
|
||||
# Comparison operations
|
||||
ALLOWED += (ast.Eq, ast.Gt, ast.GtE, ast.In, ast.Is, ast.IsNot, ast.Lt, ast.LtE, ast.NotEq, ast.NotIn)
|
||||
|
||||
def visit(self, node):
|
||||
"""Ensure statement only contains allowed nodes."""
|
||||
if not isinstance(node, self.ALLOWED):
|
||||
raise SyntaxError('Not allowed in environment markers.\n%s\n%s' %
|
||||
(self.statement,
|
||||
(' ' * node.col_offset) + '^'))
|
||||
return ast.NodeTransformer.visit(self, node)
|
||||
|
||||
def visit_Attribute(self, node):
|
||||
"""Flatten one level of attribute access."""
|
||||
new_node = ast.Name("%s.%s" % (node.value.id, node.attr), node.ctx)
|
||||
return ast.copy_location(new_node, node)
|
||||
|
||||
def parse_marker(marker):
|
||||
tree = ast.parse(marker, mode='eval')
|
||||
new_tree = ASTWhitelist(marker).generic_visit(tree)
|
||||
return new_tree
|
||||
|
||||
def compile_marker(parsed_marker):
|
||||
return _builtin_compile(parsed_marker, '<environment marker>', 'eval',
|
||||
dont_inherit=True)
|
||||
|
||||
_cache = weakref.WeakValueDictionary()
|
||||
|
||||
def compile(marker):
|
||||
"""Return compiled marker as a function accepting an environment dict."""
|
||||
try:
|
||||
return _cache[marker]
|
||||
except KeyError:
|
||||
pass
|
||||
if not marker.strip():
|
||||
def marker_fn(environment=None, override=None):
|
||||
""""""
|
||||
return True
|
||||
else:
|
||||
compiled_marker = compile_marker(parse_marker(marker))
|
||||
def marker_fn(environment=None, override=None):
|
||||
"""override updates environment"""
|
||||
if override is None:
|
||||
override = {}
|
||||
if environment is None:
|
||||
environment = default_environment()
|
||||
environment.update(override)
|
||||
return eval(compiled_marker, environment)
|
||||
marker_fn.__doc__ = marker
|
||||
_cache[marker] = marker_fn
|
||||
return _cache[marker]
|
||||
|
||||
def interpret(marker, environment=None):
|
||||
return compile(marker)(environment)
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
../cffi/lock.py
|
||||
../cffi/backend_ctypes.py
|
||||
../cffi/__init__.py
|
||||
../cffi/ffiplatform.py
|
||||
../cffi/vengine_gen.py
|
||||
../cffi/commontypes.py
|
||||
../cffi/vengine_cpy.py
|
||||
../cffi/api.py
|
||||
../cffi/gc_weakref.py
|
||||
../cffi/verifier.py
|
||||
../cffi/cparser.py
|
||||
../cffi/model.py
|
||||
../cffi/__pycache__/lock.cpython-34.pyc
|
||||
../cffi/__pycache__/backend_ctypes.cpython-34.pyc
|
||||
../cffi/__pycache__/__init__.cpython-34.pyc
|
||||
../cffi/__pycache__/ffiplatform.cpython-34.pyc
|
||||
../cffi/__pycache__/vengine_gen.cpython-34.pyc
|
||||
../cffi/__pycache__/commontypes.cpython-34.pyc
|
||||
../cffi/__pycache__/vengine_cpy.cpython-34.pyc
|
||||
../cffi/__pycache__/api.cpython-34.pyc
|
||||
../cffi/__pycache__/gc_weakref.cpython-34.pyc
|
||||
../cffi/__pycache__/verifier.cpython-34.pyc
|
||||
../cffi/__pycache__/cparser.cpython-34.pyc
|
||||
../cffi/__pycache__/model.cpython-34.pyc
|
||||
../_cffi_backend.cpython-34m.so
|
||||
./
|
||||
dependency_links.txt
|
||||
PKG-INFO
|
||||
SOURCES.txt
|
||||
not-zip-safe
|
||||
top_level.txt
|
||||
requires.txt
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
Metadata-Version: 1.1
|
||||
Name: cryptography
|
||||
Version: 0.5.4
|
||||
Version: 0.6
|
||||
Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers.
|
||||
Home-page: https://github.com/pyca/cryptography
|
||||
Author: The cryptography developers
|
||||
|
|
@ -13,6 +13,10 @@ Description: Cryptography
|
|||
:target: https://pypi.python.org/pypi/cryptography/
|
||||
:alt: Latest Version
|
||||
|
||||
.. image:: https://readthedocs.org/projects/cryptography/badge/?version=latest
|
||||
:target: https://cryptography.io
|
||||
:alt: Latest Docs
|
||||
|
||||
.. image:: https://travis-ci.org/pyca/cryptography.svg?branch=master
|
||||
:target: https://travis-ci.org/pyca/cryptography
|
||||
|
||||
|
|
@ -14,6 +14,7 @@ cryptography/utils.py
|
|||
cryptography.egg-info/PKG-INFO
|
||||
cryptography.egg-info/SOURCES.txt
|
||||
cryptography.egg-info/dependency_links.txt
|
||||
cryptography.egg-info/entry_points.txt
|
||||
cryptography.egg-info/not-zip-safe
|
||||
cryptography.egg-info/requires.txt
|
||||
cryptography.egg-info/top_level.txt
|
||||
|
|
@ -37,8 +38,7 @@ cryptography/hazmat/backends/openssl/hmac.py
|
|||
cryptography/hazmat/backends/openssl/rsa.py
|
||||
cryptography/hazmat/bindings/__init__.py
|
||||
cryptography/hazmat/bindings/utils.py
|
||||
cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_4ed9e37dx4000d087.c
|
||||
cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_d62b3d91x972e1c0b.c
|
||||
cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_3e31f141x4000d087.c
|
||||
cryptography/hazmat/bindings/commoncrypto/__init__.py
|
||||
cryptography/hazmat/bindings/commoncrypto/binding.py
|
||||
cryptography/hazmat/bindings/commoncrypto/cf.py
|
||||
|
|
@ -92,8 +92,8 @@ cryptography/hazmat/primitives/hmac.py
|
|||
cryptography/hazmat/primitives/interfaces.py
|
||||
cryptography/hazmat/primitives/padding.py
|
||||
cryptography/hazmat/primitives/serialization.py
|
||||
cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_684bb40axf342507b.c
|
||||
cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_8f86901cxc1767c5a.c
|
||||
cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_7ab3712bx4f158fee.c
|
||||
cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_dd416c1exc1767c5a.c
|
||||
cryptography/hazmat/primitives/asymmetric/__init__.py
|
||||
cryptography/hazmat/primitives/asymmetric/dsa.py
|
||||
cryptography/hazmat/primitives/asymmetric/ec.py
|
||||
|
|
@ -106,6 +106,8 @@ cryptography/hazmat/primitives/ciphers/modes.py
|
|||
cryptography/hazmat/primitives/kdf/__init__.py
|
||||
cryptography/hazmat/primitives/kdf/hkdf.py
|
||||
cryptography/hazmat/primitives/kdf/pbkdf2.py
|
||||
cryptography/hazmat/primitives/src/constant_time.c
|
||||
cryptography/hazmat/primitives/src/constant_time.h
|
||||
cryptography/hazmat/primitives/twofactor/__init__.py
|
||||
cryptography/hazmat/primitives/twofactor/hotp.py
|
||||
cryptography/hazmat/primitives/twofactor/totp.py
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
[cryptography.backends]
|
||||
openssl = cryptography.hazmat.backends.openssl:backend
|
||||
|
||||
|
|
@ -0,0 +1,202 @@
|
|||
../cryptography/utils.py
|
||||
../cryptography/__about__.py
|
||||
../cryptography/__init__.py
|
||||
../cryptography/exceptions.py
|
||||
../cryptography/fernet.py
|
||||
../cryptography/hazmat/__init__.py
|
||||
../cryptography/hazmat/bindings/utils.py
|
||||
../cryptography/hazmat/bindings/__init__.py
|
||||
../cryptography/hazmat/primitives/interfaces.py
|
||||
../cryptography/hazmat/primitives/constant_time.py
|
||||
../cryptography/hazmat/primitives/__init__.py
|
||||
../cryptography/hazmat/primitives/hashes.py
|
||||
../cryptography/hazmat/primitives/hmac.py
|
||||
../cryptography/hazmat/primitives/padding.py
|
||||
../cryptography/hazmat/primitives/serialization.py
|
||||
../cryptography/hazmat/primitives/cmac.py
|
||||
../cryptography/hazmat/backends/interfaces.py
|
||||
../cryptography/hazmat/backends/multibackend.py
|
||||
../cryptography/hazmat/backends/__init__.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/secimport.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_cryptor.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/seckeychain.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_hmac.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/__init__.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_key_derivation.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/sectransform.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/binding.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/common_digest.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/seckey.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/secitem.py
|
||||
../cryptography/hazmat/bindings/commoncrypto/cf.py
|
||||
../cryptography/hazmat/bindings/openssl/opensslv.py
|
||||
../cryptography/hazmat/bindings/openssl/ec.py
|
||||
../cryptography/hazmat/bindings/openssl/x509_vfy.py
|
||||
../cryptography/hazmat/bindings/openssl/aes.py
|
||||
../cryptography/hazmat/bindings/openssl/asn1.py
|
||||
../cryptography/hazmat/bindings/openssl/objects.py
|
||||
../cryptography/hazmat/bindings/openssl/dsa.py
|
||||
../cryptography/hazmat/bindings/openssl/x509name.py
|
||||
../cryptography/hazmat/bindings/openssl/osrandom_engine.py
|
||||
../cryptography/hazmat/bindings/openssl/rand.py
|
||||
../cryptography/hazmat/bindings/openssl/cms.py
|
||||
../cryptography/hazmat/bindings/openssl/engine.py
|
||||
../cryptography/hazmat/bindings/openssl/__init__.py
|
||||
../cryptography/hazmat/bindings/openssl/ssl.py
|
||||
../cryptography/hazmat/bindings/openssl/nid.py
|
||||
../cryptography/hazmat/bindings/openssl/x509v3.py
|
||||
../cryptography/hazmat/bindings/openssl/err.py
|
||||
../cryptography/hazmat/bindings/openssl/bio.py
|
||||
../cryptography/hazmat/bindings/openssl/ecdsa.py
|
||||
../cryptography/hazmat/bindings/openssl/pkcs7.py
|
||||
../cryptography/hazmat/bindings/openssl/bignum.py
|
||||
../cryptography/hazmat/bindings/openssl/binding.py
|
||||
../cryptography/hazmat/bindings/openssl/pem.py
|
||||
../cryptography/hazmat/bindings/openssl/rsa.py
|
||||
../cryptography/hazmat/bindings/openssl/hmac.py
|
||||
../cryptography/hazmat/bindings/openssl/conf.py
|
||||
../cryptography/hazmat/bindings/openssl/dh.py
|
||||
../cryptography/hazmat/bindings/openssl/x509.py
|
||||
../cryptography/hazmat/bindings/openssl/ecdh.py
|
||||
../cryptography/hazmat/bindings/openssl/evp.py
|
||||
../cryptography/hazmat/bindings/openssl/cmac.py
|
||||
../cryptography/hazmat/bindings/openssl/crypto.py
|
||||
../cryptography/hazmat/bindings/openssl/pkcs12.py
|
||||
../cryptography/hazmat/primitives/kdf/__init__.py
|
||||
../cryptography/hazmat/primitives/kdf/hkdf.py
|
||||
../cryptography/hazmat/primitives/kdf/pbkdf2.py
|
||||
../cryptography/hazmat/primitives/asymmetric/ec.py
|
||||
../cryptography/hazmat/primitives/asymmetric/dsa.py
|
||||
../cryptography/hazmat/primitives/asymmetric/__init__.py
|
||||
../cryptography/hazmat/primitives/asymmetric/rsa.py
|
||||
../cryptography/hazmat/primitives/asymmetric/padding.py
|
||||
../cryptography/hazmat/primitives/ciphers/base.py
|
||||
../cryptography/hazmat/primitives/ciphers/__init__.py
|
||||
../cryptography/hazmat/primitives/ciphers/modes.py
|
||||
../cryptography/hazmat/primitives/ciphers/algorithms.py
|
||||
../cryptography/hazmat/primitives/twofactor/__init__.py
|
||||
../cryptography/hazmat/primitives/twofactor/totp.py
|
||||
../cryptography/hazmat/primitives/twofactor/hotp.py
|
||||
../cryptography/hazmat/backends/commoncrypto/backend.py
|
||||
../cryptography/hazmat/backends/commoncrypto/__init__.py
|
||||
../cryptography/hazmat/backends/commoncrypto/hashes.py
|
||||
../cryptography/hazmat/backends/commoncrypto/hmac.py
|
||||
../cryptography/hazmat/backends/commoncrypto/ciphers.py
|
||||
../cryptography/hazmat/backends/openssl/ec.py
|
||||
../cryptography/hazmat/backends/openssl/dsa.py
|
||||
../cryptography/hazmat/backends/openssl/backend.py
|
||||
../cryptography/hazmat/backends/openssl/__init__.py
|
||||
../cryptography/hazmat/backends/openssl/hashes.py
|
||||
../cryptography/hazmat/backends/openssl/rsa.py
|
||||
../cryptography/hazmat/backends/openssl/hmac.py
|
||||
../cryptography/hazmat/backends/openssl/cmac.py
|
||||
../cryptography/hazmat/backends/openssl/ciphers.py
|
||||
../cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_3e31f141x4000d087.c
|
||||
../cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_7ab3712bx4f158fee.c
|
||||
../cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_dd416c1exc1767c5a.c
|
||||
../cryptography/hazmat/primitives/src/constant_time.c
|
||||
../cryptography/hazmat/primitives/src/constant_time.h
|
||||
../cryptography/__pycache__/utils.cpython-34.pyc
|
||||
../cryptography/__pycache__/__about__.cpython-34.pyc
|
||||
../cryptography/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/__pycache__/exceptions.cpython-34.pyc
|
||||
../cryptography/__pycache__/fernet.cpython-34.pyc
|
||||
../cryptography/hazmat/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/__pycache__/utils.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/interfaces.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/constant_time.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/hashes.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/hmac.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/padding.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/serialization.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/__pycache__/cmac.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/__pycache__/interfaces.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/__pycache__/multibackend.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/secimport.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/common_cryptor.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/seckeychain.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/common_hmac.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/common_key_derivation.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/sectransform.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/binding.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/common_digest.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/seckey.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/secitem.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/commoncrypto/__pycache__/cf.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/opensslv.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/ec.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/x509_vfy.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/aes.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/asn1.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/objects.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/dsa.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/x509name.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/osrandom_engine.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/rand.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/cms.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/engine.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/ssl.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/nid.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/x509v3.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/err.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/bio.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/ecdsa.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/pkcs7.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/bignum.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/pem.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/rsa.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/hmac.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/conf.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/dh.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/x509.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/ecdh.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/evp.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/cmac.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/crypto.cpython-34.pyc
|
||||
../cryptography/hazmat/bindings/openssl/__pycache__/pkcs12.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-34.pyc
|
||||
../cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/__pycache__/backend.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/__pycache__/hashes.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/__pycache__/hmac.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/commoncrypto/__pycache__/ciphers.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/dsa.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/hashes.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/hmac.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-34.pyc
|
||||
../cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-34.pyc
|
||||
../cryptography/_Cryptography_cffi_3e31f141x4000d087.cpython-34m.so
|
||||
../cryptography/_Cryptography_cffi_7ab3712bx4f158fee.cpython-34m.so
|
||||
../cryptography/_Cryptography_cffi_dd416c1exc1767c5a.cpython-34m.so
|
||||
./
|
||||
dependency_links.txt
|
||||
entry_points.txt
|
||||
PKG-INFO
|
||||
SOURCES.txt
|
||||
not-zip-safe
|
||||
top_level.txt
|
||||
requires.txt
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
cffi>=0.8
|
||||
six>=1.4.1
|
||||
setuptools
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
_Cryptography_cffi_7ab3712bx4f158fee
|
||||
_Cryptography_cffi_3e31f141x4000d087
|
||||
cryptography
|
||||
_Cryptography_cffi_dd416c1exc1767c5a
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -22,7 +22,7 @@ __summary__ = ("cryptography is a package which provides cryptographic recipes"
|
|||
" and primitives to Python developers.")
|
||||
__uri__ = "https://github.com/pyca/cryptography"
|
||||
|
||||
__version__ = "0.5.4"
|
||||
__version__ = "0.6"
|
||||
|
||||
__author__ = "The cryptography developers"
|
||||
__email__ = "cryptography-dev@python.org"
|
||||
|
|
@ -13,13 +13,9 @@
|
|||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
import pkg_resources
|
||||
|
||||
from cryptography.hazmat.backends.multibackend import MultiBackend
|
||||
from cryptography.hazmat.bindings.commoncrypto.binding import (
|
||||
Binding as CommonCryptoBinding
|
||||
)
|
||||
from cryptography.hazmat.bindings.openssl.binding import (
|
||||
Binding as OpenSSLBinding
|
||||
)
|
||||
|
||||
|
||||
_available_backends_list = None
|
||||
|
|
@ -29,19 +25,15 @@ def _available_backends():
|
|||
global _available_backends_list
|
||||
|
||||
if _available_backends_list is None:
|
||||
_available_backends_list = []
|
||||
|
||||
if CommonCryptoBinding.is_available():
|
||||
from cryptography.hazmat.backends import commoncrypto
|
||||
_available_backends_list.append(commoncrypto.backend)
|
||||
|
||||
if OpenSSLBinding.is_available():
|
||||
from cryptography.hazmat.backends import openssl
|
||||
_available_backends_list.append(openssl.backend)
|
||||
_available_backends_list = [
|
||||
backend.load(require=False)
|
||||
for backend in pkg_resources.iter_entry_points(
|
||||
"cryptography.backends"
|
||||
)
|
||||
]
|
||||
|
||||
return _available_backends_list
|
||||
|
||||
|
||||
_default_backend = None
|
||||
|
||||
|
||||
|
|
@ -151,6 +151,12 @@ class _GCMCipherContext(object):
|
|||
len(mode.initialization_vector)
|
||||
)
|
||||
self._backend._check_cipher_response(res)
|
||||
# CommonCrypto has a bug where calling update without at least one
|
||||
# call to authenticate_additional_data will result in null byte output
|
||||
# for ciphertext. The following empty byte string call prevents the
|
||||
# issue, which is present in at least 10.8 and 10.9.
|
||||
# Filed as rdar://18314544
|
||||
self.authenticate_additional_data(b"")
|
||||
|
||||
def update(self, data):
|
||||
buf = self._backend._ffi.new("unsigned char[]", len(data))
|
||||
|
|
@ -164,6 +170,12 @@ class _GCMCipherContext(object):
|
|||
return self._backend._ffi.buffer(buf)[:]
|
||||
|
||||
def finalize(self):
|
||||
# CommonCrypto has a yet another bug where you must make at least one
|
||||
# call to update. If you pass just AAD and call finalize without a call
|
||||
# to update you'll get null bytes for tag. The following update call
|
||||
# prevents this issue, which is present in at least 10.8 and 10.9.
|
||||
# Filed as rdar://18314580
|
||||
self.update(b"")
|
||||
tag_size = self._cipher.block_size // 8
|
||||
tag_buf = self._backend._ffi.new("unsigned char[]", tag_size)
|
||||
tag_len = self._backend._ffi.new("size_t *", tag_size)
|
||||
|
|
@ -70,6 +70,21 @@ class HMACBackend(object):
|
|||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class CMACBackend(object):
|
||||
@abc.abstractmethod
|
||||
def cmac_algorithm_supported(self, algorithm):
|
||||
"""
|
||||
Returns True if the block cipher is supported for CMAC by this backend
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def create_cmac_ctx(self, algorithm):
|
||||
"""
|
||||
Create a CMACContext for calculating a message authentication code.
|
||||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class PBKDF2HMACBackend(object):
|
||||
@abc.abstractmethod
|
||||
|
|
@ -221,41 +236,6 @@ class DSABackend(object):
|
|||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class TraditionalOpenSSLSerializationBackend(object):
|
||||
@abc.abstractmethod
|
||||
def load_traditional_openssl_pem_private_key(self, data, password):
|
||||
"""
|
||||
Load a private key from PEM encoded data, using password if the data
|
||||
is encrypted.
|
||||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class PKCS8SerializationBackend(object):
|
||||
@abc.abstractmethod
|
||||
def load_pkcs8_pem_private_key(self, data, password):
|
||||
"""
|
||||
Load a private key from PEM encoded data, using password if the data
|
||||
is encrypted.
|
||||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class CMACBackend(object):
|
||||
@abc.abstractmethod
|
||||
def cmac_algorithm_supported(self, algorithm):
|
||||
"""
|
||||
Returns True if the block cipher is supported for CMAC by this backend
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def create_cmac_ctx(self, algorithm):
|
||||
"""
|
||||
Create a CMACContext for calculating a message authentication code.
|
||||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class EllipticCurveBackend(object):
|
||||
@abc.abstractmethod
|
||||
|
|
@ -280,13 +260,49 @@ class EllipticCurveBackend(object):
|
|||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def elliptic_curve_public_key_from_numbers(self, numbers):
|
||||
def load_elliptic_curve_public_numbers(self, numbers):
|
||||
"""
|
||||
Return an EllipticCurvePublicKey provider using the given numbers.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def elliptic_curve_private_key_from_numbers(self, numbers):
|
||||
def load_elliptic_curve_private_numbers(self, numbers):
|
||||
"""
|
||||
Return an EllipticCurvePublicKey provider using the given numbers.
|
||||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class PEMSerializationBackend(object):
|
||||
@abc.abstractmethod
|
||||
def load_pem_private_key(self, data, password):
|
||||
"""
|
||||
Loads a private key from PEM encoded data, using the provided password
|
||||
if the data is encrypted.
|
||||
"""
|
||||
|
||||
@abc.abstractmethod
|
||||
def load_pem_public_key(self, data):
|
||||
"""
|
||||
Loads a public key from PEM encoded data.
|
||||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class TraditionalOpenSSLSerializationBackend(object):
|
||||
@abc.abstractmethod
|
||||
def load_traditional_openssl_pem_private_key(self, data, password):
|
||||
"""
|
||||
Load a private key from PEM encoded data, using password if the data
|
||||
is encrypted.
|
||||
"""
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class PKCS8SerializationBackend(object):
|
||||
@abc.abstractmethod
|
||||
def load_pkcs8_pem_private_key(self, data, password):
|
||||
"""
|
||||
Load a private key from PKCS8 encoded data, using password if the data
|
||||
is encrypted.
|
||||
"""
|
||||
|
|
@ -13,12 +13,15 @@
|
|||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
import warnings
|
||||
|
||||
from cryptography import utils
|
||||
from cryptography.exceptions import UnsupportedAlgorithm, _Reasons
|
||||
from cryptography.hazmat.backends.interfaces import (
|
||||
CMACBackend, CipherBackend, DSABackend, EllipticCurveBackend, HMACBackend,
|
||||
HashBackend, PBKDF2HMACBackend, PKCS8SerializationBackend,
|
||||
RSABackend, TraditionalOpenSSLSerializationBackend
|
||||
HashBackend, PBKDF2HMACBackend, PEMSerializationBackend,
|
||||
PKCS8SerializationBackend, RSABackend,
|
||||
TraditionalOpenSSLSerializationBackend
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -32,6 +35,7 @@ from cryptography.hazmat.backends.interfaces import (
|
|||
@utils.register_interface(TraditionalOpenSSLSerializationBackend)
|
||||
@utils.register_interface(DSABackend)
|
||||
@utils.register_interface(EllipticCurveBackend)
|
||||
@utils.register_interface(PEMSerializationBackend)
|
||||
class MultiBackend(object):
|
||||
name = "multibackend"
|
||||
|
||||
|
|
@ -239,6 +243,18 @@ class MultiBackend(object):
|
|||
raise UnsupportedAlgorithm("DSA is not supported by the backend.",
|
||||
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
|
||||
|
||||
def load_dsa_public_numbers(self, numbers):
|
||||
for b in self._filtered_backends(DSABackend):
|
||||
return b.load_dsa_public_numbers(numbers)
|
||||
raise UnsupportedAlgorithm("DSA is not supported by the backend.",
|
||||
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
|
||||
|
||||
def load_dsa_private_numbers(self, numbers):
|
||||
for b in self._filtered_backends(DSABackend):
|
||||
return b.load_dsa_private_numbers(numbers)
|
||||
raise UnsupportedAlgorithm("DSA is not supported by the backend.",
|
||||
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
|
||||
|
||||
def cmac_algorithm_supported(self, algorithm):
|
||||
return any(
|
||||
b.cmac_algorithm_supported(algorithm)
|
||||
|
|
@ -283,6 +299,12 @@ class MultiBackend(object):
|
|||
)
|
||||
|
||||
def elliptic_curve_private_key_from_numbers(self, numbers):
|
||||
warnings.warn(
|
||||
"elliptic_curve_private_key_from_numbers is deprecated and will "
|
||||
"be removed in a future version.",
|
||||
utils.DeprecatedIn06,
|
||||
stacklevel=2
|
||||
)
|
||||
for b in self._filtered_backends(EllipticCurveBackend):
|
||||
try:
|
||||
return b.elliptic_curve_private_key_from_numbers(numbers)
|
||||
|
|
@ -294,7 +316,25 @@ class MultiBackend(object):
|
|||
_Reasons.UNSUPPORTED_ELLIPTIC_CURVE
|
||||
)
|
||||
|
||||
def load_elliptic_curve_private_numbers(self, numbers):
|
||||
for b in self._filtered_backends(EllipticCurveBackend):
|
||||
try:
|
||||
return b.load_elliptic_curve_private_numbers(numbers)
|
||||
except UnsupportedAlgorithm:
|
||||
continue
|
||||
|
||||
raise UnsupportedAlgorithm(
|
||||
"This backend does not support this elliptic curve.",
|
||||
_Reasons.UNSUPPORTED_ELLIPTIC_CURVE
|
||||
)
|
||||
|
||||
def elliptic_curve_public_key_from_numbers(self, numbers):
|
||||
warnings.warn(
|
||||
"elliptic_curve_public_key_from_numbers is deprecated and will "
|
||||
"be removed in a future version.",
|
||||
utils.DeprecatedIn06,
|
||||
stacklevel=2
|
||||
)
|
||||
for b in self._filtered_backends(EllipticCurveBackend):
|
||||
try:
|
||||
return b.elliptic_curve_public_key_from_numbers(numbers)
|
||||
|
|
@ -306,6 +346,36 @@ class MultiBackend(object):
|
|||
_Reasons.UNSUPPORTED_ELLIPTIC_CURVE
|
||||
)
|
||||
|
||||
def load_elliptic_curve_public_numbers(self, numbers):
|
||||
for b in self._filtered_backends(EllipticCurveBackend):
|
||||
try:
|
||||
return b.load_elliptic_curve_public_numbers(numbers)
|
||||
except UnsupportedAlgorithm:
|
||||
continue
|
||||
|
||||
raise UnsupportedAlgorithm(
|
||||
"This backend does not support this elliptic curve.",
|
||||
_Reasons.UNSUPPORTED_ELLIPTIC_CURVE
|
||||
)
|
||||
|
||||
def load_pem_private_key(self, data, password):
|
||||
for b in self._filtered_backends(PEMSerializationBackend):
|
||||
return b.load_pem_private_key(data, password)
|
||||
|
||||
raise UnsupportedAlgorithm(
|
||||
"This backend does not support this key serialization.",
|
||||
_Reasons.UNSUPPORTED_SERIALIZATION
|
||||
)
|
||||
|
||||
def load_pem_public_key(self, data):
|
||||
for b in self._filtered_backends(PEMSerializationBackend):
|
||||
return b.load_pem_public_key(data)
|
||||
|
||||
raise UnsupportedAlgorithm(
|
||||
"This backend does not support this key serialization.",
|
||||
_Reasons.UNSUPPORTED_SERIALIZATION
|
||||
)
|
||||
|
||||
def load_pkcs8_pem_private_key(self, data, password):
|
||||
for b in self._filtered_backends(PKCS8SerializationBackend):
|
||||
return b.load_pkcs8_pem_private_key(data, password)
|
||||
|
|
@ -16,6 +16,7 @@ from __future__ import absolute_import, division, print_function
|
|||
import collections
|
||||
import itertools
|
||||
import warnings
|
||||
from contextlib import contextmanager
|
||||
|
||||
import six
|
||||
|
||||
|
|
@ -25,7 +26,8 @@ from cryptography.exceptions import (
|
|||
)
|
||||
from cryptography.hazmat.backends.interfaces import (
|
||||
CMACBackend, CipherBackend, DSABackend, EllipticCurveBackend, HMACBackend,
|
||||
HashBackend, PBKDF2HMACBackend, PKCS8SerializationBackend, RSABackend,
|
||||
HashBackend, PBKDF2HMACBackend, PEMSerializationBackend,
|
||||
PKCS8SerializationBackend, RSABackend,
|
||||
TraditionalOpenSSLSerializationBackend
|
||||
)
|
||||
from cryptography.hazmat.backends.openssl.ciphers import (
|
||||
|
|
@ -74,6 +76,7 @@ _OpenSSLError = collections.namedtuple("_OpenSSLError",
|
|||
@utils.register_interface(PKCS8SerializationBackend)
|
||||
@utils.register_interface(RSABackend)
|
||||
@utils.register_interface(TraditionalOpenSSLSerializationBackend)
|
||||
@utils.register_interface(PEMSerializationBackend)
|
||||
class Backend(object):
|
||||
"""
|
||||
OpenSSL API binding interfaces.
|
||||
|
|
@ -471,6 +474,39 @@ class Backend(object):
|
|||
assert dsa_cdata != self._ffi.NULL
|
||||
dsa_cdata = self._ffi.gc(dsa_cdata, self._lib.DSA_free)
|
||||
return _DSAPrivateKey(self, dsa_cdata)
|
||||
elif (self._lib.Cryptography_HAS_EC == 1 and
|
||||
type == self._lib.EVP_PKEY_EC):
|
||||
ec_cdata = self._lib.EVP_PKEY_get1_EC_KEY(evp_pkey)
|
||||
assert ec_cdata != self._ffi.NULL
|
||||
ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free)
|
||||
return _EllipticCurvePrivateKey(self, ec_cdata)
|
||||
else:
|
||||
raise UnsupportedAlgorithm("Unsupported key type.")
|
||||
|
||||
def _evp_pkey_to_public_key(self, evp_pkey):
|
||||
"""
|
||||
Return the appropriate type of PublicKey given an evp_pkey cdata
|
||||
pointer.
|
||||
"""
|
||||
|
||||
type = evp_pkey.type
|
||||
|
||||
if type == self._lib.EVP_PKEY_RSA:
|
||||
rsa_cdata = self._lib.EVP_PKEY_get1_RSA(evp_pkey)
|
||||
assert rsa_cdata != self._ffi.NULL
|
||||
rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free)
|
||||
return _RSAPublicKey(self, rsa_cdata)
|
||||
elif type == self._lib.EVP_PKEY_DSA:
|
||||
dsa_cdata = self._lib.EVP_PKEY_get1_DSA(evp_pkey)
|
||||
assert dsa_cdata != self._ffi.NULL
|
||||
dsa_cdata = self._ffi.gc(dsa_cdata, self._lib.DSA_free)
|
||||
return _DSAPublicKey(self, dsa_cdata)
|
||||
elif (self._lib.Cryptography_HAS_EC == 1 and
|
||||
type == self._lib.EVP_PKEY_EC):
|
||||
ec_cdata = self._lib.EVP_PKEY_get1_EC_KEY(evp_pkey)
|
||||
assert ec_cdata != self._ffi.NULL
|
||||
ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free)
|
||||
return _EllipticCurvePublicKey(self, ec_cdata)
|
||||
else:
|
||||
raise UnsupportedAlgorithm("Unsupported key type.")
|
||||
|
||||
|
|
@ -490,14 +526,24 @@ class Backend(object):
|
|||
def pem_password_cb(buf, size, writing, userdata):
|
||||
pem_password_cb.called += 1
|
||||
|
||||
if not password or len(password) >= size:
|
||||
if not password:
|
||||
pem_password_cb.exception = TypeError(
|
||||
"Password was not given but private key is encrypted."
|
||||
)
|
||||
return 0
|
||||
else:
|
||||
elif len(password) < size:
|
||||
pw_buf = self._ffi.buffer(buf, size)
|
||||
pw_buf[:len(password)] = password
|
||||
return len(password)
|
||||
else:
|
||||
pem_password_cb.exception = ValueError(
|
||||
"Passwords longer than {0} bytes are not supported "
|
||||
"by this backend.".format(size - 1)
|
||||
)
|
||||
return 0
|
||||
|
||||
pem_password_cb.called = 0
|
||||
pem_password_cb.exception = None
|
||||
|
||||
return (
|
||||
self._ffi.callback("int (char *, int, int, void *)",
|
||||
|
|
@ -760,18 +806,47 @@ class Backend(object):
|
|||
def create_cmac_ctx(self, algorithm):
|
||||
return _CMACContext(self, algorithm)
|
||||
|
||||
def load_traditional_openssl_pem_private_key(self, data, password):
|
||||
# OpenSSLs API for loading PKCS#8 certs can also load the traditional
|
||||
# format so we just use that for both of them.
|
||||
def load_pem_private_key(self, data, password):
|
||||
return self._load_key(
|
||||
self._lib.PEM_read_bio_PrivateKey,
|
||||
self._evp_pkey_to_private_key,
|
||||
data,
|
||||
password,
|
||||
)
|
||||
|
||||
return self.load_pkcs8_pem_private_key(data, password)
|
||||
def load_pem_public_key(self, data):
|
||||
return self._load_key(
|
||||
self._lib.PEM_read_bio_PUBKEY,
|
||||
self._evp_pkey_to_public_key,
|
||||
data,
|
||||
None,
|
||||
)
|
||||
|
||||
def load_traditional_openssl_pem_private_key(self, data, password):
|
||||
warnings.warn(
|
||||
"load_traditional_openssl_pem_private_key is deprecated and will "
|
||||
"be removed in a future version, use load_pem_private_key "
|
||||
"instead.",
|
||||
utils.DeprecatedIn06,
|
||||
stacklevel=2
|
||||
)
|
||||
return self.load_pem_private_key(data, password)
|
||||
|
||||
def load_pkcs8_pem_private_key(self, data, password):
|
||||
warnings.warn(
|
||||
"load_pkcs8_pem_private_key is deprecated and will be removed in a"
|
||||
" future version, use load_pem_private_key instead.",
|
||||
utils.DeprecatedIn06,
|
||||
stacklevel=2
|
||||
)
|
||||
return self.load_pem_private_key(data, password)
|
||||
|
||||
def _load_key(self, openssl_read_func, convert_func, data, password):
|
||||
mem_bio = self._bytes_to_bio(data)
|
||||
|
||||
password_callback, password_func = self._pem_password_cb(password)
|
||||
|
||||
evp_pkey = self._lib.PEM_read_bio_PrivateKey(
|
||||
evp_pkey = openssl_read_func(
|
||||
mem_bio.bio,
|
||||
self._ffi.NULL,
|
||||
password_callback,
|
||||
|
|
@ -779,74 +854,12 @@ class Backend(object):
|
|||
)
|
||||
|
||||
if evp_pkey == self._ffi.NULL:
|
||||
errors = self._consume_errors()
|
||||
if not errors:
|
||||
raise ValueError("Could not unserialize key data.")
|
||||
|
||||
if (
|
||||
errors[0][1:] == (
|
||||
self._lib.ERR_LIB_PEM,
|
||||
self._lib.PEM_F_PEM_DO_HEADER,
|
||||
self._lib.PEM_R_BAD_PASSWORD_READ
|
||||
)
|
||||
) or (
|
||||
errors[0][1:] == (
|
||||
self._lib.ERR_LIB_PEM,
|
||||
self._lib.PEM_F_PEM_READ_BIO_PRIVATEKEY,
|
||||
self._lib.PEM_R_BAD_PASSWORD_READ
|
||||
)
|
||||
):
|
||||
assert not password
|
||||
raise TypeError(
|
||||
"Password was not given but private key is encrypted.")
|
||||
|
||||
elif errors[0][1:] == (
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.EVP_F_EVP_DECRYPTFINAL_EX,
|
||||
self._lib.EVP_R_BAD_DECRYPT
|
||||
):
|
||||
raise ValueError(
|
||||
"Bad decrypt. Incorrect password?"
|
||||
)
|
||||
|
||||
elif errors[0][1:] in (
|
||||
(
|
||||
self._lib.ERR_LIB_PEM,
|
||||
self._lib.PEM_F_PEM_GET_EVP_CIPHER_INFO,
|
||||
self._lib.PEM_R_UNSUPPORTED_ENCRYPTION
|
||||
),
|
||||
|
||||
(
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.EVP_F_EVP_PBE_CIPHERINIT,
|
||||
self._lib.EVP_R_UNKNOWN_PBE_ALGORITHM
|
||||
)
|
||||
):
|
||||
raise UnsupportedAlgorithm(
|
||||
"PEM data is encrypted with an unsupported cipher",
|
||||
_Reasons.UNSUPPORTED_CIPHER
|
||||
)
|
||||
|
||||
elif any(
|
||||
error[1:] == (
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.EVP_F_EVP_PKCS82PKEY,
|
||||
self._lib.EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM
|
||||
)
|
||||
for error in errors
|
||||
):
|
||||
raise UnsupportedAlgorithm(
|
||||
"Unsupported public key algorithm.",
|
||||
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM
|
||||
)
|
||||
|
||||
if password_func.exception is not None:
|
||||
errors = self._consume_errors()
|
||||
assert errors
|
||||
raise password_func.exception
|
||||
else:
|
||||
assert errors[0][1] in (
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.ERR_LIB_PEM,
|
||||
self._lib.ERR_LIB_ASN1,
|
||||
)
|
||||
raise ValueError("Could not unserialize key data.")
|
||||
self._handle_key_loading_error()
|
||||
|
||||
evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free)
|
||||
|
||||
|
|
@ -859,7 +872,59 @@ class Backend(object):
|
|||
password is None
|
||||
)
|
||||
|
||||
return self._evp_pkey_to_private_key(evp_pkey)
|
||||
return convert_func(evp_pkey)
|
||||
|
||||
def _handle_key_loading_error(self):
|
||||
errors = self._consume_errors()
|
||||
|
||||
if not errors:
|
||||
raise ValueError("Could not unserialize key data.")
|
||||
|
||||
elif errors[0][1:] == (
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.EVP_F_EVP_DECRYPTFINAL_EX,
|
||||
self._lib.EVP_R_BAD_DECRYPT
|
||||
):
|
||||
raise ValueError("Bad decrypt. Incorrect password?")
|
||||
|
||||
elif errors[0][1:] in (
|
||||
(
|
||||
self._lib.ERR_LIB_PEM,
|
||||
self._lib.PEM_F_PEM_GET_EVP_CIPHER_INFO,
|
||||
self._lib.PEM_R_UNSUPPORTED_ENCRYPTION
|
||||
),
|
||||
|
||||
(
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.EVP_F_EVP_PBE_CIPHERINIT,
|
||||
self._lib.EVP_R_UNKNOWN_PBE_ALGORITHM
|
||||
)
|
||||
):
|
||||
raise UnsupportedAlgorithm(
|
||||
"PEM data is encrypted with an unsupported cipher",
|
||||
_Reasons.UNSUPPORTED_CIPHER
|
||||
)
|
||||
|
||||
elif any(
|
||||
error[1:] == (
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.EVP_F_EVP_PKCS82PKEY,
|
||||
self._lib.EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM
|
||||
)
|
||||
for error in errors
|
||||
):
|
||||
raise UnsupportedAlgorithm(
|
||||
"Unsupported public key algorithm.",
|
||||
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM
|
||||
)
|
||||
|
||||
else:
|
||||
assert errors[0][1] in (
|
||||
self._lib.ERR_LIB_EVP,
|
||||
self._lib.ERR_LIB_PEM,
|
||||
self._lib.ERR_LIB_ASN1,
|
||||
)
|
||||
raise ValueError("Could not unserialize key data.")
|
||||
|
||||
def elliptic_curve_supported(self, curve):
|
||||
if self._lib.Cryptography_HAS_EC != 1:
|
||||
|
|
@ -915,17 +980,17 @@ class Backend(object):
|
|||
if self.elliptic_curve_supported(curve):
|
||||
curve_nid = self._elliptic_curve_to_nid(curve)
|
||||
|
||||
ctx = self._lib.EC_KEY_new_by_curve_name(curve_nid)
|
||||
assert ctx != self._ffi.NULL
|
||||
ctx = self._ffi.gc(ctx, self._lib.EC_KEY_free)
|
||||
ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid)
|
||||
assert ec_cdata != self._ffi.NULL
|
||||
ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free)
|
||||
|
||||
res = self._lib.EC_KEY_generate_key(ctx)
|
||||
res = self._lib.EC_KEY_generate_key(ec_cdata)
|
||||
assert res == 1
|
||||
|
||||
res = self._lib.EC_KEY_check_key(ctx)
|
||||
res = self._lib.EC_KEY_check_key(ec_cdata)
|
||||
assert res == 1
|
||||
|
||||
return _EllipticCurvePrivateKey(self, ctx, curve)
|
||||
return _EllipticCurvePrivateKey(self, ec_cdata)
|
||||
else:
|
||||
raise UnsupportedAlgorithm(
|
||||
"Backend object does not support {0}.".format(curve.name),
|
||||
|
|
@ -933,35 +998,52 @@ class Backend(object):
|
|||
)
|
||||
|
||||
def elliptic_curve_private_key_from_numbers(self, numbers):
|
||||
warnings.warn(
|
||||
"elliptic_curve_private_key_from_numbers is deprecated and will "
|
||||
"be removed in a future version.",
|
||||
utils.DeprecatedIn06,
|
||||
stacklevel=2
|
||||
)
|
||||
return self.load_elliptic_curve_private_numbers(numbers)
|
||||
|
||||
def load_elliptic_curve_private_numbers(self, numbers):
|
||||
public = numbers.public_numbers
|
||||
|
||||
curve_nid = self._elliptic_curve_to_nid(public.curve)
|
||||
|
||||
ctx = self._lib.EC_KEY_new_by_curve_name(curve_nid)
|
||||
assert ctx != self._ffi.NULL
|
||||
ctx = self._ffi.gc(ctx, self._lib.EC_KEY_free)
|
||||
ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid)
|
||||
assert ec_cdata != self._ffi.NULL
|
||||
ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free)
|
||||
|
||||
ctx = self._ec_key_set_public_key_affine_coordinates(
|
||||
ctx, public.x, public.y)
|
||||
ec_cdata = self._ec_key_set_public_key_affine_coordinates(
|
||||
ec_cdata, public.x, public.y)
|
||||
|
||||
res = self._lib.EC_KEY_set_private_key(
|
||||
ctx, self._int_to_bn(numbers.private_value))
|
||||
ec_cdata, self._int_to_bn(numbers.private_value))
|
||||
assert res == 1
|
||||
|
||||
return _EllipticCurvePrivateKey(self, ctx,
|
||||
numbers.public_numbers.curve)
|
||||
return _EllipticCurvePrivateKey(self, ec_cdata)
|
||||
|
||||
def elliptic_curve_public_key_from_numbers(self, numbers):
|
||||
warnings.warn(
|
||||
"elliptic_curve_public_key_from_numbers is deprecated and will be "
|
||||
"removed in a future version.",
|
||||
utils.DeprecatedIn06,
|
||||
stacklevel=2
|
||||
)
|
||||
return self.load_elliptic_curve_public_numbers(numbers)
|
||||
|
||||
def load_elliptic_curve_public_numbers(self, numbers):
|
||||
curve_nid = self._elliptic_curve_to_nid(numbers.curve)
|
||||
|
||||
ctx = self._lib.EC_KEY_new_by_curve_name(curve_nid)
|
||||
assert ctx != self._ffi.NULL
|
||||
ctx = self._ffi.gc(ctx, self._lib.EC_KEY_free)
|
||||
ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid)
|
||||
assert ec_cdata != self._ffi.NULL
|
||||
ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free)
|
||||
|
||||
ctx = self._ec_key_set_public_key_affine_coordinates(
|
||||
ctx, numbers.x, numbers.y)
|
||||
ec_cdata = self._ec_key_set_public_key_affine_coordinates(
|
||||
ec_cdata, numbers.x, numbers.y)
|
||||
|
||||
return _EllipticCurvePublicKey(self, ctx, numbers.curve)
|
||||
return _EllipticCurvePublicKey(self, ec_cdata)
|
||||
|
||||
def _elliptic_curve_to_nid(self, curve):
|
||||
"""
|
||||
|
|
@ -983,43 +1065,36 @@ class Backend(object):
|
|||
)
|
||||
return curve_nid
|
||||
|
||||
def _ec_key_set_public_key_affine_coordinates(self, ctx, x, y):
|
||||
"""
|
||||
This is a port of EC_KEY_set_public_key_affine_coordinates that was
|
||||
added in 1.0.1.
|
||||
@contextmanager
|
||||
def _tmp_bn_ctx(self):
|
||||
bn_ctx = self._lib.BN_CTX_new()
|
||||
assert bn_ctx != self._ffi.NULL
|
||||
bn_ctx = self._ffi.gc(bn_ctx, self._lib.BN_CTX_free)
|
||||
self._lib.BN_CTX_start(bn_ctx)
|
||||
try:
|
||||
yield bn_ctx
|
||||
finally:
|
||||
self._lib.BN_CTX_end(bn_ctx)
|
||||
|
||||
Sets the public key point in the EC_KEY context to the affine x and y
|
||||
values.
|
||||
def _ec_key_determine_group_get_set_funcs(self, ctx):
|
||||
"""
|
||||
Given an EC_KEY determine the group and what methods are required to
|
||||
get/set point coordinates.
|
||||
"""
|
||||
|
||||
assert ctx != self._ffi.NULL
|
||||
|
||||
bn_x = self._int_to_bn(x)
|
||||
bn_y = self._int_to_bn(y)
|
||||
|
||||
nid_two_field = self._lib.OBJ_sn2nid(b"characteristic-two-field")
|
||||
assert nid_two_field != self._lib.NID_undef
|
||||
|
||||
bn_ctx = self._lib.BN_CTX_new()
|
||||
assert bn_ctx != self._ffi.NULL
|
||||
bn_ctx = self._ffi.gc(bn_ctx, self._lib.BN_CTX_free)
|
||||
|
||||
group = self._lib.EC_KEY_get0_group(ctx)
|
||||
assert group != self._ffi.NULL
|
||||
|
||||
point = self._lib.EC_POINT_new(group)
|
||||
assert point != self._ffi.NULL
|
||||
point = self._ffi.gc(point, self._lib.EC_POINT_free)
|
||||
|
||||
method = self._lib.EC_GROUP_method_of(group)
|
||||
assert method != self._ffi.NULL
|
||||
|
||||
nid = self._lib.EC_METHOD_get_field_type(method)
|
||||
assert nid != self._lib.NID_undef
|
||||
|
||||
check_x = self._lib.BN_CTX_get(bn_ctx)
|
||||
check_y = self._lib.BN_CTX_get(bn_ctx)
|
||||
|
||||
if nid == nid_two_field and self._lib.Cryptography_HAS_EC2M:
|
||||
set_func = self._lib.EC_POINT_set_affine_coordinates_GF2m
|
||||
get_func = self._lib.EC_POINT_get_affine_coordinates_GF2m
|
||||
|
|
@ -1029,17 +1104,43 @@ class Backend(object):
|
|||
|
||||
assert set_func and get_func
|
||||
|
||||
res = set_func(group, point, bn_x, bn_y, bn_ctx)
|
||||
assert res == 1
|
||||
return set_func, get_func, group
|
||||
|
||||
res = get_func(group, point, check_x, check_y, bn_ctx)
|
||||
assert res == 1
|
||||
def _ec_key_set_public_key_affine_coordinates(self, ctx, x, y):
|
||||
"""
|
||||
This is a port of EC_KEY_set_public_key_affine_coordinates that was
|
||||
added in 1.0.1.
|
||||
|
||||
assert (
|
||||
self._lib.BN_cmp(bn_x, check_x) == 0 and
|
||||
self._lib.BN_cmp(bn_y, check_y) == 0
|
||||
Sets the public key point in the EC_KEY context to the affine x and y
|
||||
values.
|
||||
"""
|
||||
|
||||
bn_x = self._int_to_bn(x)
|
||||
bn_y = self._int_to_bn(y)
|
||||
|
||||
set_func, get_func, group = (
|
||||
self._ec_key_determine_group_get_set_funcs(ctx)
|
||||
)
|
||||
|
||||
point = self._lib.EC_POINT_new(group)
|
||||
assert point != self._ffi.NULL
|
||||
point = self._ffi.gc(point, self._lib.EC_POINT_free)
|
||||
|
||||
with self._tmp_bn_ctx() as bn_ctx:
|
||||
check_x = self._lib.BN_CTX_get(bn_ctx)
|
||||
check_y = self._lib.BN_CTX_get(bn_ctx)
|
||||
|
||||
res = set_func(group, point, bn_x, bn_y, bn_ctx)
|
||||
assert res == 1
|
||||
|
||||
res = get_func(group, point, check_x, check_y, bn_ctx)
|
||||
assert res == 1
|
||||
|
||||
assert (
|
||||
self._lib.BN_cmp(bn_x, check_x) == 0 and
|
||||
self._lib.BN_cmp(bn_y, check_y) == 0
|
||||
)
|
||||
|
||||
res = self._lib.EC_KEY_set_public_key(ctx, point)
|
||||
assert res == 1
|
||||
|
||||
|
|
@ -128,6 +128,14 @@ class _CipherContext(object):
|
|||
return self._backend._ffi.buffer(buf)[:outlen[0]]
|
||||
|
||||
def finalize(self):
|
||||
# OpenSSL 1.0.1 on Ubuntu 12.04 (and possibly other distributions)
|
||||
# appears to have a bug where you must make at least one call to update
|
||||
# even if you are only using authenticate_additional_data or the
|
||||
# GCM tag will be wrong. An (empty) call to update resolves this
|
||||
# and is harmless for all other versions of OpenSSL.
|
||||
if isinstance(self._mode, GCM):
|
||||
self.update(b"")
|
||||
|
||||
buf = self._backend._ffi.new("unsigned char[]", self._block_size)
|
||||
outlen = self._backend._ffi.new("int *")
|
||||
res = self._backend._lib.EVP_CipherFinal_ex(self._ctx, buf, outlen)
|
||||
|
|
@ -24,6 +24,13 @@ from cryptography.hazmat.primitives.asymmetric import ec
|
|||
|
||||
|
||||
def _truncate_digest_for_ecdsa(ec_key_cdata, digest, backend):
|
||||
"""
|
||||
This function truncates digests that are longer than a given elliptic
|
||||
curve key's length so they can be signed. Since elliptic curve keys are
|
||||
much shorter than RSA keys many digests (e.g. SHA-512) may require
|
||||
truncation.
|
||||
"""
|
||||
|
||||
_lib = backend._lib
|
||||
_ffi = backend._ffi
|
||||
|
||||
|
|
@ -31,17 +38,14 @@ def _truncate_digest_for_ecdsa(ec_key_cdata, digest, backend):
|
|||
|
||||
group = _lib.EC_KEY_get0_group(ec_key_cdata)
|
||||
|
||||
bn_ctx = _lib.BN_CTX_new()
|
||||
assert bn_ctx != _ffi.NULL
|
||||
bn_ctx = _ffi.gc(bn_ctx, _lib.BN_CTX_free)
|
||||
with backend._tmp_bn_ctx() as bn_ctx:
|
||||
order = _lib.BN_CTX_get(bn_ctx)
|
||||
assert order != _ffi.NULL
|
||||
|
||||
order = _lib.BN_CTX_get(bn_ctx)
|
||||
assert order != _ffi.NULL
|
||||
res = _lib.EC_GROUP_get_order(group, order, bn_ctx)
|
||||
assert res == 1
|
||||
|
||||
res = _lib.EC_GROUP_get_order(group, order, bn_ctx)
|
||||
assert res == 1
|
||||
|
||||
order_bits = _lib.BN_num_bits(order)
|
||||
order_bits = _lib.BN_num_bits(order)
|
||||
|
||||
if 8 * digest_len > order_bits:
|
||||
digest_len = (order_bits + 7) // 8
|
||||
|
|
@ -59,6 +63,30 @@ def _truncate_digest_for_ecdsa(ec_key_cdata, digest, backend):
|
|||
return digest
|
||||
|
||||
|
||||
def _ec_key_curve_sn(backend, ec_key):
|
||||
group = backend._lib.EC_KEY_get0_group(ec_key)
|
||||
assert group != backend._ffi.NULL
|
||||
|
||||
nid = backend._lib.EC_GROUP_get_curve_name(group)
|
||||
assert nid != backend._lib.NID_undef
|
||||
|
||||
curve_name = backend._lib.OBJ_nid2sn(nid)
|
||||
assert curve_name != backend._ffi.NULL
|
||||
|
||||
sn = backend._ffi.string(curve_name).decode('ascii')
|
||||
return sn
|
||||
|
||||
|
||||
def _sn_to_elliptic_curve(backend, sn):
|
||||
try:
|
||||
return ec._CURVE_TYPES[sn]()
|
||||
except KeyError:
|
||||
raise UnsupportedAlgorithm(
|
||||
"{0} is not a supported elliptic curve".format(sn),
|
||||
_Reasons.UNSUPPORTED_ELLIPTIC_CURVE
|
||||
)
|
||||
|
||||
|
||||
@utils.register_interface(interfaces.AsymmetricSignatureContext)
|
||||
class _ECDSASignatureContext(object):
|
||||
def __init__(self, backend, private_key, algorithm):
|
||||
|
|
@ -125,12 +153,14 @@ class _ECDSAVerificationContext(object):
|
|||
return True
|
||||
|
||||
|
||||
@utils.register_interface(interfaces.EllipticCurvePrivateKey)
|
||||
@utils.register_interface(interfaces.EllipticCurvePrivateKeyWithNumbers)
|
||||
class _EllipticCurvePrivateKey(object):
|
||||
def __init__(self, backend, ec_key_cdata, curve):
|
||||
def __init__(self, backend, ec_key_cdata):
|
||||
self._backend = backend
|
||||
self._ec_key = ec_key_cdata
|
||||
self._curve = curve
|
||||
|
||||
sn = _ec_key_curve_sn(backend, ec_key_cdata)
|
||||
self._curve = _sn_to_elliptic_curve(backend, sn)
|
||||
|
||||
@property
|
||||
def curve(self):
|
||||
|
|
@ -165,16 +195,26 @@ class _EllipticCurvePrivateKey(object):
|
|||
assert res == 1
|
||||
|
||||
return _EllipticCurvePublicKey(
|
||||
self._backend, public_ec_key, self._curve
|
||||
self._backend, public_ec_key
|
||||
)
|
||||
|
||||
def private_numbers(self):
|
||||
bn = self._backend._lib.EC_KEY_get0_private_key(self._ec_key)
|
||||
private_value = self._backend._bn_to_int(bn)
|
||||
return ec.EllipticCurvePrivateNumbers(
|
||||
private_value=private_value,
|
||||
public_numbers=self.public_key().public_numbers()
|
||||
)
|
||||
|
||||
|
||||
@utils.register_interface(interfaces.EllipticCurvePublicKey)
|
||||
@utils.register_interface(interfaces.EllipticCurvePublicKeyWithNumbers)
|
||||
class _EllipticCurvePublicKey(object):
|
||||
def __init__(self, backend, ec_key_cdata, curve):
|
||||
def __init__(self, backend, ec_key_cdata):
|
||||
self._backend = backend
|
||||
self._ec_key = ec_key_cdata
|
||||
self._curve = curve
|
||||
|
||||
sn = _ec_key_curve_sn(backend, ec_key_cdata)
|
||||
self._curve = _sn_to_elliptic_curve(backend, sn)
|
||||
|
||||
@property
|
||||
def curve(self):
|
||||
|
|
@ -189,3 +229,26 @@ class _EllipticCurvePublicKey(object):
|
|||
raise UnsupportedAlgorithm(
|
||||
"Unsupported elliptic curve signature algorithm.",
|
||||
_Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM)
|
||||
|
||||
def public_numbers(self):
|
||||
set_func, get_func, group = (
|
||||
self._backend._ec_key_determine_group_get_set_funcs(self._ec_key)
|
||||
)
|
||||
point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key)
|
||||
assert point != self._backend._ffi.NULL
|
||||
|
||||
with self._backend._tmp_bn_ctx() as bn_ctx:
|
||||
bn_x = self._backend._lib.BN_CTX_get(bn_ctx)
|
||||
bn_y = self._backend._lib.BN_CTX_get(bn_ctx)
|
||||
|
||||
res = get_func(group, point, bn_x, bn_y, bn_ctx)
|
||||
assert res == 1
|
||||
|
||||
x = self._backend._bn_to_int(bn_x)
|
||||
y = self._backend._bn_to_int(bn_y)
|
||||
|
||||
return ec.EllipticCurvePublicNumbers(
|
||||
x=x,
|
||||
y=y,
|
||||
curve=self._curve
|
||||
)
|
||||
|
|
@ -30,10 +30,7 @@ from cryptography.hazmat.primitives.interfaces import (
|
|||
|
||||
|
||||
def _get_rsa_pss_salt_length(pss, key_size, digest_size):
|
||||
if pss._mgf._salt_length is not None:
|
||||
salt = pss._mgf._salt_length
|
||||
else:
|
||||
salt = pss._salt_length
|
||||
salt = pss._salt_length
|
||||
|
||||
if salt is MGF1.MAX_LENGTH or salt is PSS.MAX_LENGTH:
|
||||
# bit length - 1 per RFC 3447
|
||||
|
|
@ -46,6 +43,9 @@ def _get_rsa_pss_salt_length(pss, key_size, digest_size):
|
|||
|
||||
|
||||
def _enc_dec_rsa(backend, key, data, padding):
|
||||
if not isinstance(padding, interfaces.AsymmetricPadding):
|
||||
raise TypeError("Padding must be an instance of AsymmetricPadding.")
|
||||
|
||||
if isinstance(padding, PKCS1v15):
|
||||
padding_enum = backend._lib.RSA_PKCS1_PADDING
|
||||
elif isinstance(padding, OAEP):
|
||||
|
|
@ -13,9 +13,6 @@
|
|||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
import platform
|
||||
import sys
|
||||
|
||||
from cryptography.hazmat.bindings.utils import build_ffi
|
||||
|
||||
|
||||
|
|
@ -51,10 +48,7 @@ class Binding(object):
|
|||
cls.ffi, cls.lib = build_ffi(
|
||||
module_prefix=cls._module_prefix,
|
||||
modules=cls._modules,
|
||||
extra_link_args=["-framework", "Security"]
|
||||
extra_link_args=[
|
||||
"-framework", "Security", "-framework", "CoreFoundation"
|
||||
]
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def is_available(cls):
|
||||
return sys.platform == "darwin" and list(map(
|
||||
int, platform.mac_ver()[0].split("."))) >= [10, 8, 0]
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue