Commit Graph

831 Commits

Author SHA1 Message Date
Peter Hamilton b5a8739157 Add CryptographicUsageMask filtering support for Locate
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the object's
Cryptographic Usage Masks. Unit tests and integration tests have
been added to test and verify the correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support Cryptographic Usage Mask filtering. Simply use the
"--cryptographic-usage-mask" flag to specify one or more
Cryptographic Usage Mask enumeration values for the Locate script
to filter on.
2019-08-12 16:54:03 -04:00
Peter Hamilton 4a6a2eccc1 Add offset and maximum item filtering for the Locate operation
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects using the offset and maximum item
constraints. The offset constraint tells the server how many
matching items should be skipped before results are returned. The
maximum items constraint tells the server how many matching items
should be returned. Unit tests and integration tests have been
added to test and verify the correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support offset and maximum item filtering. Simply use the
"--offset-items" and "--maximum-items" flags to specify offset and
maximum item values for the Locate script to filter on.

Fixes #562
2019-08-09 17:13:20 -04:00
Peter Hamilton 4938f82772 Sort the Locate matched objects by their creation date
This change updates the PyKMIP server's support for the Locate
operation, sorting the matched objects found by Locate by their
initial date, newest objects first. This matches the KMIP
specification's definition for how Locate results should be
ordered.
2019-08-09 11:42:31 -04:00
Peter Hamilton c3c03e5091 Fix a bug with the debug logging for Initial Date filtering
This change fixes a bug in the server engine unit tests that
check the debug logs for Locate filtering on the Initial Date
attribute. Specifically, time.asctime does not use the default
'%d' notation for stringifying numerical day values. This change
updates the string notation to match the format produced by
time.asctime.

Impacts #572
2019-08-09 11:04:42 -04:00
Peter Hamilton 942d55cca9 Add OperationPolicyName filtering support for Locate
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the object's Operation
Policy Name. Unit tests and integration tests have been added to
test and verify the correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support Operation Policy Name filtering. Simply use the
"--operation-policy-name" flag to specify an Operation Policy Name
string value for the Locate script to filter on.
2019-08-01 09:06:09 -04:00
Peter Hamilton 9e95d14e08 Add UniqueIdentifier filtering support for the Locate operation
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the object's Unique
Identifier. Unit tests and integration tests have been added to
test and verify the correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support Unique Identifier filtering. Simply use the
"--unique-identifier" flag to specify a Unique Identifier string
value for the Locate script to filter on.
2019-07-31 16:30:47 -04:00
Peter Hamilton 8441bb4302 Add session encoding debug logging to the server
This change adds debug logging statements for the request and
response message encodings sent and received by the server
session. These provide direct visability into each message that
is handled by the server, facilitating debugging and correctness
checking. Given the content of these encodings may contain
sensitive information, debug logging should only be enabled when
testing or developing server features.
2019-07-31 15:03:08 -04:00
Peter Hamilton 6dcae13c5b Add CryptographicLength filtering support for the Locate operation
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the object's
Cryptographic Length. If an object's type does not support the
Cryptographic Length attribute, the object is not a match. Unit
tests and integration tests have been added to test and verify
the correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support Cryptographic Length filtering. Simply use the
"--cryptographic-length" flag to specify a Cryptographic Length
integer value for the Locate script to filter on.
2019-07-31 13:12:43 -04:00
Peter Hamilton bf518c8393 Add CryptographicAlgorithm filtering support for Locate
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the object's
Cryptographic Algorithm. If an object's type does not support the
Cryptographic Algorithm attribute, that object is not a match.
Unit tests and integration tests have been added to test and
verify the correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support Cryptographic Algorithm filtering. Simply use the
"--cryptographic-algorithm" flag to specify a Cryptographic
Algorithm enumeration for the Locate script to filter on.
2019-07-31 09:41:48 -04:00
Peter Hamilton d74b394261 Add ObjectType filtering support for the Locate operation
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the object's Object Type.
Unit tests and integration tests have been added to test and verify
the correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support Object Type filtering. Simply use the "--object-type" flag
to specify an Object Type enumeration for the Locate script to
filter on.
2019-07-30 18:08:46 -04:00
Peter Hamilton e5de55c0a8 Add State filtering support for the Locate operation
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the object's State. Unit
tests and integration tests have been added to test and verify the
correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support State filtering. Simply use the "--state" flag to specify
a State enumeration for the Locate script to filter on.
2019-07-26 18:10:20 -04:00
Peter Hamilton da284e932b Add InitialDate filtering support for the Locate operation
This change updates Locate operation support in the PyKMIP server,
allowing users to filter objects based on the objects InitialDate
attribute value. Specifying a single InitialDate attribute in the
Locate request will perform an exact match on objects; specifying
two InitialDate attributes will perform a ranged match. Unit tests
and integration tests have been added to test and verify the
correctness of this feature.

Additionally, the Locate demo scripts have also been updated to
support InitialDate filtering. Simply use the "--initial-date"
flag to provide one or more InitialDate values to the Locate
script to filter on those dates.
2019-07-26 16:31:37 -04:00
Peter Hamilton ee037408cf PyKMIP - Release 0.9.1
This update is a bug fix release for PyKMIP 0.9, including the
following changes:

* Fix a bug with Locate attribute handling for KMIP 2.0 clients
2019-06-21 17:08:30 -04:00
Peter Hamilton e52de92418 Update the CHANGELOG in preparation for the 0.9.1 release 2019-06-21 16:19:15 -04:00
Peter Hamilton df93c2f6e4 Fix Locate attribute handling for KMIP 2.0 clients
This change loosens the constraints on including attributes in
Locate messages for KMIP 2.0 clients. An early version of the KMIP
2.0 specification made attributes a required field for the Locate
payloads, breaking backwards compatibility with earlier versions
of the specification. A newer version of KMIP 2.0 reverses this
change. The library has been updated to reflect this newer version
of the specification. All relevant Locate unit tests have been
modified or removed to reflect this change.

Fixes #556
2019-06-21 15:36:36 -04:00
Peter Hamilton 8d89f19521 Bump the library version to 0.10.dev1
This change updates the library version to the next dev version
and updates the changelog to reflect this.
2019-06-20 11:23:47 -04:00
Peter Hamilton f8c76105c9 PyKMIP - Release 0.9.0
This update includes a library wide upgrade to support KMIP 2.0
for all currently supported KMIP operations. Additional changes
include documentation improvements, testing upgrades, and various
quality of life enhancements:

* Add support for Python 3.7
* Add KMIP 2.0 enumerations
* Add a new OrderedEnum subclass to handle sortable enumerations
* Add KMIP 2.0-style attribute handling
* Add utilities to convert TemplateAttributes and Attributes
* Add utilities to handle bit mask style enumerations
* Add positional argument handling for pytest calls when using tox
* Update the library documentation to include KMIP 2.0 information
* Update client exception handling / logging to simplify debugging
* Update library logging defaults to log at INFO but support DEBUG
* Update the Travis CI configuration to support Ubuntu 16.04
* Update the Travis CI configuration to output logs on failures
* Update the server to support KMIP 1.3, 1.4, and 2.0
* Update the PyKMIP clients to support changing their KMIP version
* Update server session logging for authentication failures
* Update the PyKMIP object hierarchy to propagate the KMIP version
* Update the server TLS handshake handling to avoid thread hanging
* Update the Create and Register payloads to support KMIP 2.0
* Update the Locate and CreateKeyPair payloads to support KMIP 2.0
* Update the DeriveKey / GetAttributes payloads to support KMIP 2.0
* Update the GetAttributeList / Query payloads to support KMIP 2.0
* Update attribute policy to handle KMIP 2.0 deprecated attributes
* Remove escape sequences to comply with Python 3.6 deprecations
* Fix various deprecation warnings caused by dependency upgrades
* Fix a bug decoding revocation messages for the Revoke operation
* Fix a bug specifying the function list in the Query demo script
2019-06-18 13:08:35 -04:00
Peter Hamilton f1b57d21fc Fix a bug with how the server retrieves attributes under KMIP 2.0
This change fixes a bug in the server attribute handling logic
that manifests when attributes are deprecated and removed in KMIP
2.0. Now these attributes are effectively ignored for KMIP 2.0
messages, complying with the KMIP 2.0 specification.
2019-06-18 11:43:21 -04:00
Peter Hamilton 4ebaa6f501 Fix a bug with the function list in the Query demo 2019-06-18 10:58:02 -04:00
Peter Hamilton 8fb05bd848 Fully enable KMIP 2.0 support for the server
This changes adds all of the final core updates necessary to allow
KMIP 2.0 message encoding/decoding support for the PyKMIP server.
Request and responses now dynamically adjust the KMIP version they
encode/decode under based on the KMIP version included in their
header segments. Extra server logging has also been added to show
the KMIP version specified by the client request.

Message tests have been updated to reflect these changes.
2019-06-18 09:02:10 -04:00
Peter Hamilton 1c879e2f49 Fix a bug with revocation message decoding
This change fixes a bug with revocation message decoding that
would cause client and server failures if the revocation message
was included in a Revoke operation call. With this fix, the client
can now send a revocation message with a Revoke request and the
revocation will occur as expected.

A ProxyKmipClient demo script for the Revoke operation has been
included to help test Revoke functionality.

Finally, an argument ordering bug with the original KMIPProxy demo
Revoke script has also been fixed.

Fixes #546
2019-06-17 16:49:15 -04:00
Peter Hamilton 5ac0c5d6dd Update the documentation to prepare for the PyKMIP 0.9 release 2019-06-17 15:04:14 -04:00
Peter Hamilton 9fac723b2e Update the server to nominally support KMIP 2.0 2019-06-17 13:09:48 -04:00
Peter Hamilton ffe5d7a86c Updating the Register payloads to properly use protection masks
This change updates the Register payloads to properly use the new
ProtectionStorageMasks structure. Unit tests have been updated to
reflect this change.
2019-05-10 16:08:09 -04:00
Peter Hamilton bc4e4e38bd Updating the Create payloads to properly use protection masks
This change updates the Create payloads to properly use the new
ProtectionStorageMasks structure. Unit tests have been updated to
reflect this change.
2019-05-10 15:27:04 -04:00
Peter Hamilton 7280ccb1eb Update the CreateKeyPair payloads to support protection masks
This change updates the CreateKeyPair payloads to support the new
protection storage masks fields introduced in KMIP 2.0. The payload
unit tests have been updated to reflect these changes.
2019-05-10 14:20:53 -04:00
Peter Hamilton 3b7d9bc21f Update the ResponseHeader to support the server hashed password
This change updates the ResponseHeader to support the new server
hashed password field added in KMIP 2.0. Unit tests have been
added to cover the change.
2019-05-10 09:22:20 -04:00
Peter Hamilton 4a9690165a Update the RequestBatchItem to support the ephemeral field
This change updates the RequestBatchItem to support the new
ephemeral field added in KMIP 2.0. Unit tests have been added to
cover the change.
2019-05-09 12:23:13 -04:00
Peter Hamilton a7f05ab7be Temporarily pin bandit to 1.5.1
A recent regression in bandit 1.6.0 permits the scanning of test
files for vulnerabilities even when those files should be excluded
using the '-x' flag. This change temporarily pins bandit to 1.5.1
in test-requirements.txt to get around this issue in the short
term.

This patch should be undone once bandit 1.6.1 is released, fixing
this issue.
2019-05-09 11:18:25 -04:00
Peter Hamilton cd16b20a6b Add support for the ProtectionStorageMasks structure
This change adds support for the ProtectionStorageMasks structure
which is a new addition in KMIP 2.0. A unit test suite has been
added for the new structure.
2019-05-03 16:48:07 -04:00
Peter Hamilton b4c3980da0 Update the Query payloads to rename Protection Storage Masks
This change makes a simple renaming update to the Query response
payload, correcting how Protection Storage Masks are used and
referenced. All related unit tests have been updated to reflect
this change.
2019-05-03 12:03:16 -04:00
Peter Hamilton a2712e7541 Update the Register payloads to support Protection Storage Masks
This change updates the Register payloads, adding support for
Protection Storage Masks which were added in KMIP 2.0. The
payload unit tests have been updated to reflect this change.
2019-05-03 09:35:42 -04:00
Peter Hamilton cc4c1775d1 Update the Create payloads to support Protection Storage Masks
This change updates the Create payloads, adding support for
Protection Storage Masks which were added in KMIP 2.0. The
payload unit tests have been updated to reflect this change.
2019-04-30 15:51:17 -04:00
Peter Hamilton b51c5b044b Update the Query payloads to support KMIP 2.0
This change updates the Query payloads to support KMIP 2.0, adding
in new response components including server default information
and storage protection masks. Unit tests have been added and
updated to cover these changes.
2019-04-23 18:33:15 -04:00
Peter Hamilton 314dd8761e Update the Query payloads
This change upgrades the Query payloads, fixing error messages,
comments, local variables, and internal payload structure to
bring Query support up to KMIP 1.4 standards, in addition to
compliance with the current payload format. The corresponding
unit test suite has been completely rewritten to reflect these
changes.

This change prepares the Query payloads for future updates to
support KMIP 2.0.
2019-04-23 10:00:46 -04:00
Peter Hamilton b968378eb8 Add the CapabilityInformation structure
This change adds the CapabilityInformation structure, a KMIP 1.3
addition that is used to specify details on capabilities supported
by a KMIP server. A unit test suite is included to cover the new
structure.
2019-04-19 14:06:33 -04:00
Peter Hamilton a778aa4224 Add the ValidationInformation structure
This change adds the ValidationInformation structure, a KMIP 1.3
addition that is used to specify details on formal validation
methods supported by a KMIP server. A unit test suite is included
to cover the new structure.
2019-04-19 08:37:10 -04:00
Peter Hamilton 44cd81d6d1 Update requirements and pin cryptography at 1.4+
This change updates requirements, pinning cryptography>=1.4. This
is due to the use of kbkdf in the server's cryptography engine,
which was not introduced until cryptography 1.4.

Fixes #525
2019-04-15 15:22:45 -04:00
Peter Hamilton b68312119f Add the ProfileInformation structure
This change adds the ProfileInformation structure, a KMIP 1.3
addition that is used to specify details for supported KMIP
profiles. A unit test suite is included to cover the new
structure.
2019-04-15 14:02:43 -04:00
Peter Hamilton 4b19fc81a3 Add the RNGParameters structure
This change adds the RNGParameters structure, a KMIP 1.3 addition
that is used to specify parameters and settings associated with a
specific random number generator. A unit test suite is included
to cover the new structure.
2019-04-12 17:29:25 -04:00
Peter Hamilton 01b724b4e2 Add the DefaultsInformation structure
This change adds the DefaultsInformation structure, a KMIP 2.0
addition that is used to specify default attribute values for
KMIP managed objects. A unit test suite is included to cover the
new structure.
2019-04-12 09:18:26 -04:00
Peter Hamilton dae68f7e46 Add the ObjectDefaults structure
This change adds the ObjectDefaults structure, a KMIP 2.0 addition
that is used to specify default attribute values for KMIP managed
objects. A unit test suite is included to cover the new structure.
2019-04-09 15:09:56 -04:00
Peter Hamilton 790abc85cb Update the GetAttributeList payloads to support KMIP 2.0
This change updates the GetAttributeList payloads to support KMIP
2.0 features, including swapping out Attribute Names for the
Attribute Reference structure in the response payload. Unit tests
have been added to cover these changes.
2019-04-05 15:07:18 -04:00
Peter Hamilton 05f4d7aef4 Update the GetAttributeList payloads
This change makes minor updates to the GetAttributeList payloads,
fixing error messages, comments, and local variable names to
comply with the current payload format. The corresponding unit
test suite has been updated to reflect these changes.

This change prepares the GetAttributeList payloads for future
updates to support KMIP 2.0.
2019-04-04 11:12:57 -04:00
Peter Hamilton 35b2381341 Add positional arguments to pytest calls in tox.ini
This change adds a posargs argument to the call to pytest that is
used when invoking unit tests for individual Python versions. This
allows developers to specify which tests or test suites they want
to invoke. For example, use the following to run the unit test
suites related to the GetAttributeList payloads for Python 2.7:

tox -r -e py27 -- -k TestGetAttributeList

Developers can still use tox to run the entire test suite, like
before:

tox -r -e py27
2019-04-04 09:52:07 -04:00
Peter Hamilton 0961687d66 Update the GetAttributes payloads to support KMIP 2.0
This change updates the GetAttributes payloads to support KMIP 2.0
features, including swapping out Attribute Names for the Attribute
Reference structure in the request payload and the Attribute list
for the Attributes structure in the response payload. Unit tests
have been added to cover these changes.
2019-03-29 15:36:00 -04:00
Peter Hamilton 568e87e89e Update the GetAttributes payloads
This change makes minor updates to the GetAttributes payloads,
fixing error messages, comments, and local variable names to
comply with the current payload format. The corresponding unit
test suite has been updated to reflect these changes.

This change prepares the GetAttributes payloads for future updates
to support KMIP 2.0.
2019-03-25 14:58:13 -04:00
Andrey Smirnov 42f36d080c Implement simple CLI for GET_ATTRIBUTES operation
Examples:

```
$ kmip/demos/pie/get_attributes.py -s ./vault-client.conf -i ca4a423c-d7a3-8771-028c-58feb78afca3 -a 'State' -a 'Object Type'
2019-03-25 19:28:25,868 - demo - INFO - Successfully retrieved 2 attributes:
2019-03-25 19:28:25,868 - demo - INFO - Attribute State: State.ACTIVE
2019-03-25 19:28:25,868 - demo - INFO - Attribute Object Type: ObjectType.SYMMETRIC_KEY
```

All attributes:

```
$ kmip/demos/pie/get_attributes.py -s ./vault-client.conf -i ca4a423c-d7a3-8771-028c-58feb78afca3
2019-03-25 19:28:29,985 - demo - INFO - Successfully retrieved 8 attributes:
2019-03-25 19:28:29,985 - demo - INFO - Attribute Unique Identifier: ca4a423c-d7a3-8771-028c-58feb78afca3
2019-03-25 19:28:29,985 - demo - INFO - Attribute Object Type: ObjectType.SYMMETRIC_KEY
2019-03-25 19:28:29,985 - demo - INFO - Attribute Cryptographic Algorithm: CryptographicAlgorithm.AES
2019-03-25 19:28:29,985 - demo - INFO - Attribute Cryptographic Length: 256
2019-03-25 19:28:29,985 - demo - INFO - Attribute Cryptographic Usage Mask: 12
2019-03-25 19:28:29,985 - demo - INFO - Attribute State: State.ACTIVE
2019-03-25 19:28:29,985 - demo - INFO - Attribute Initial Date: Mon Mar 25 14:28:44 2019
2019-03-25 19:28:29,985 - demo - INFO - Attribute Last Change Date: Mon Mar 25 14:28:44 2019
```
2019-03-25 13:44:27 -04:00
Peter Hamilton 86314b346a Add the AttributeReference structure
This change adds the AttributeReference structure, a KMIP 2.0
addition that is used by several attribute-related operations.
A unit test suite is included to cover the new structure.
2019-03-25 13:32:13 -04:00
Peter Hamilton 4ac7b5ed1c Update the DeriveKey payloads to support KMIP 2.0
This change updates the DeriveKey payloads to support KMIP 2.0
features, including swapping out TemplateAttributes for the new
Attributes structure in the request payload and removing all
attribute-related encodings from the response payload. Unit tests
have been added to cover these changes.
2019-03-22 12:39:09 -04:00