Release Notes

What's New in Crescendo SDK 2.0

This version provides the following improvements with respect to the previous version:

Warning!

Breaking changes in Crescendo SDK

  • The PIVGetCertificate() function now returns the X509Certificate2 object instead of a string containing the PFX encoding of the certificate.

  • The PIVChangeDataObjectACR() and PIVChangePKISlotACR() functions now have ACRCoding enumeration values as input, instead of the hex-strings used previously.

New Features

  • Added support for macOS, with two limitations:

    • The interactive PIN window inside the CLI (the -p interactive parameter) is replaced with command-line PIN entry.

    • The advanced FIDO functionality on Crescendo Key V3 (any operation using the USB-HID communication protocol, i.e. the functions for registering or managing credentials) is currently not supported on macOS.

  • Added the usage of Access Control Rules (ACRs) for PIV data objects and keys for personalization and usage. All related PIV commands/functions now respect the set ACRs. Added the ACRCoding enumeration to describe all possible ACRs that can be set:

    • The functions PIVChangeDataObjectACR() and PIVChangePKISlotACR() (the piv-data-acr and piv-pki-acr CLI commands) now use the ACRCoding values, instead of string input.

    • The PIVGenerateKeyPair(), PIVPutPKI(), PIVDeleteKey(), PIVPutData(), PIVGetData(), PIVGetPersonalInfo(), PIVDeleteData(), PIVRawCryptoOperation(), PIVSignData(), PIVGetCertificate(), and PIVDeleteCertificate() functions now require authentication via PIN or XAUTH only when a corresponding ACR is set on a given data object or key.

    • The ListPIVProperties() function (the piv-props-get CLI command) now displays the ACRs as human-readable strings.

    • The ACRCoding enumeration also has the Unknown member to accommodate any values previously set on the data objects and keys. If ACRCoding.Unknown is encountered, default ACRs are used for personalization and usage.

  • Added a check that prevents users from generating a one-time password on an OATH slot that is configured with OATHModeName.OCRA, and vice versa; this prevents users from authenticating with OCRA on an OATH slot that is configured with anything else than OATHModeName.OCRA.

  • Added the -h parameter as an additional way to get help in CLI Tool.

  • Added the FIDOMDSMetadata property to PCSC.ReaderInfo that includes the description of the given device in FIDO Alliance Metadata Service (MDS). See the FIDO specification for more details on MDS.

  • Added basic exit codes to the CLI to indicate success or failure of the executed command. The 0 exit code indicates successful execution; any other code indicates failure. All available options are described in the documentation.

  • A Static Password can now be configured only on button-press slots for Crescendo Key V3. A Static Password cannot be programmatically generated on other slots than the button-press slots. This aligns the SDK functionality with the HID Crescendo Manager behavior.

  • Added the keyName parameter to PIVGenerateKeyPair (the piv-key-pair-gen CLI command) to allow specifying a custom key name during key pair generation, instead of the default value. If not specified, the default naming convention will be used (i.e., SDK_generated_key_<GUID>).

  • Added the new SHA224, SHA384, and MD5 hashing algorithms to the HashAlgoValues enumeration. This allows the use of PIVSignData with ECC-384 and the corresponding hash. Added additional checks to the OATH applet to ensure compatibility because OATH still supports only SHA1, SHA256, and SHA512.

  • Modified the return value of PIVGetCertificate—it now returns the X509Certificate2 object directly instead of a base64 encoded PFX representation of the certificate. This should lead to easier certificate handling in the SDK. No changes in CLI Tool were made; the --piv-cert-get command remains unchanged.

  • Fixed several typos in the CLI help and examples; several parameter descriptions were enhanced to provide greater clarity.

Bug Fixes

  • Added high-level parsing of CLI arguments to catch possible incorrect inputs, such as -newPIN instead of --newPIN. The -newPIN argument should not be valid, but previously it was successfully parsed as an -n argument with the value of ewPin. The CLI will now output an error message indicating the usage of an incorrect argument.

  • Fixed an issue in ConfigureOATHSlot (the otp-slot-configure CLI command) that prevented configuring an additional button-press slot on Crescendo Key V3 after one had already been configured.

  • Fixed a bug in DeleteOATHSlot (the otp-slot-delete CLI command) that failed to delete the corresponding section from the PSKC file.

  • Fixed parsing of FIDO properties on Crescendo C4000 FIPS devices. The SELECT response is now parsed correctly.

  • Fix a bug that required the use of SetPinDialog() before calling VerifyPin(). VerifyPin() can now be called anytime without specifying a PIN to check the status of PIN verification or to find out if the PIN is blocked.

  • Fix a bug where the SDK would throw an exception if authentication with either PIN or XAUTH failed. It now returns Result.Failure in a controlled manner.

  • Fixed parsing the AuthenticatorData class inside FIDODataStructures. Previously, the Extensions byte array was always null by mistake. If the Extensions field is present, it will now get correctly parsed and stored in the new Extensions class inside FIDODataStructures to offer a human-readable form of the FIDO extensions in addition to a raw byte array.