Changelog


This page serves as a centralized hub, bringing a dynamic chronological overview that showcases the progress and updates across all Keypop components repositories.
DateComponent
2024-04-12Keypop Calypso Crypto Legacysam Java Api0.5.0

Changed

  • Java source and target levels 1.6 -> 1.8

Upgraded

  • Gradle 6.8.3 -> 7.6.4

Added

  • GetDataTag to enumerate all output data types.
  • KeyPairContainer interface to contain a key pair.
  • CardCertificateComputationData interface to contain input/output data for the “PSO Compute Certificate” command.
  • New methods added to FreeTransactionManager:
    • prepareGetData(GetDataTag tag) to schedule the execution of a “Get Data” command for the specified tag.
    • prepareGenerateCardAsymmetricKeyPair(KeyPairContainer keyPairContainer) to schedule the execution of “Card Generate Asymmetric Key Pair” command.
    • prepareComputeCardCertificate(CardCertificateComputationData data) to schedule the execution of a “PSO Compute Certificate” command.
  • New methods added to LegacySamApiFactory:
    • createKeyPairContainer() to create a new instance of KeyPairContainer.
    • createCardCertificateComputationData() to create a new instance of CardCertificateComputationData.
  • New method added to LegacySam:
    • getCaCertificate() to get the CA certificate retrieved from the SAM as a 384-byte byte array.
2024-04-12Keypop Calypso Card Java Api2.1.0

Changed

  • Java source and target levels 1.6 -> 1.8

Upgraded

  • Gradle 6.8.3 -> 7.6.4
  • Keypop Reader API 2.0.0 -> 2.0.1 (code source not impacted)

Added

  • Support for PKI cards
    • New APIs dedicated to the card personalization:
      • added PutDataTag enum
      • added preparePutData(PutDataTag tag, byte[] data) method to TransactionManager
      • added prepareGenerateAsymmetricKeyPair() method to TransactionManager
      • added CARD_PUBLIC_KEY, CARD_CERTIFICATE, CA_CERTIFICATE entries to GetDataTag enum
      • added getCardPublicKey(), getCardCertificate(), getCaCertificate() methods to CalypsoCard
    • New APIs/SPIs dedicated to the card secure transaction in PKI mode:
      • added SPIs to operate the involved certificates with an external library: PcaCertificate, CaCertificate, CaCertificateParser, CardCertificate, CardCertificateParser
      • added AsymmetricCryptoSecuritySetting interface
      • added createAsymmetricCryptoSecuritySetting(...) method to CalypsoCardApiFactory
      • added SecurePkiModeTransactionManager interface
      • added createSecurePkiModeTransactionManager(...) method to CalypsoCardApiFactory
      • added InvalidCertificateException
2024-04-12Keypop Calypso Crypto Asymmetric Java Api0.2.0

Changed

  • Update design
  • Java source and target levels 1.6 -> 1.8

Upgraded

  • Gradle 6.8.3 -> 7.6.4
2024-04-12Keypop Calypso Crypto Symmetric Java Api0.1.1

Changed

  • Java source and target levels 1.6 -> 1.8

Upgraded

  • Gradle 6.8.3 -> 7.6.4
2024-04-12Keypop Card Java Api2.0.1

Changed

  • Java source and target levels 1.6 -> 1.8

Upgraded

  • Gradle 6.8.3 -> 7.6.4
2024-04-12Keypop Reader Java Api2.0.1

Changed

  • Java source and target levels 1.6 -> 1.8

Upgraded

  • Gradle 6.8.3 -> 7.6.4
2024-01-10Keypop Calypso Crypto Legacysam Java Api0.4.0

Added

  • LegacySamStaticUnlockDataProviderSpi, an SPI to provide SAM unlock data in static mode.
  • LegacySamDynamicUnlockDataProviderSpi, an SPI to provide SAM unlock data in dynamic mode.
  • New methods added to LegacySamSelectionExtension:
    • setStaticUnlockDataProvider(LegacySamStaticUnlockDataProviderSpi unlockDataProvider) sets the unlock data provider for the static mode when the card reader becomes available at a later stage.
    • setStaticUnlockDataProvider(LegacySamStaticUnlockDataProviderSpi unlockDataProvider, CardReader targetSamReader) sets the unlock data provider and the target SAM reader for the static mode when the target SAM reader is initially available.
    • setDynamicUnlockDataProvider(LegacySamDynamicUnlockDataProviderSpi unlockDataProvider) sets the unlock data provider for the dynamic mode when the card reader becomes available at a later stage.
    • setDynamicUnlockDataProvider(LegacySamDynamicUnlockDataProviderSpi unlockDataProvider, CardReader targetSamReader) sets the unlock data provider and the target SAM reader for the dynamic mode when the target SAM reader is initially available.

Fixed

  • The allowed length for unlocking data in static mode is 16 bytes only as expected by the SAM (setUnlockData method).
2023-11-27Keypop Calypso Crypto Legacysam Java Api0.3.0

⚠️ The project has been migrated from the Calypsonet Terminal Calypso Crypto Legacy SAM API GitHub repository.

Added

  • LegacySamApiFactory centralizes the methods used to create instances of the various interfaces of the API.
  • CardTransactionLegacySamExtension extends the SPI CardTransactionCryptoExtension provided by “Keypop Calypso Card API” to extends a card transaction with specific SAM features (e.g. signature computation, etc.).
  • New methods added to LegacySamSelectionExtension:
    • setUnlockData(String unlockData, LegacySam.ProductType productType) sets the unlock data to be used to unlock a SAM C1 (8 or 16 bytes) and schedules the execution of the “Unlock data” command in the first position.
    • prepareReadSystemKeyParameters(SystemKeyType systemKeyType) schedules the execution of a “Read Key Parameters” command for a system key.
    • prepareReadCounterStatus(int counterNumber) schedules the execution of a “Read Event Counter” and “Read Ceiling” commands to read the status of a counter.
    • prepareReadAllCountersStatus() schedules the execution of a “Read Event Counter” and “Read Ceiling” commands to read the status of all counters.
  • New method added to LegacySam:
    • getCounterIncrementAccess(int counterNumber) returns the counter increment access mode.

Changed

  • The project license is now “MIT License” (previously “Eclipse Public License 2.0”).
  • CI: The Gradle plugin org.eclipse.keyple:keyple-gradle:0.2.+ has been replaced by org.eclipse.keypop:keypop-gradle:0.1.+.
  • Renamed:
    • Artifact org.calypsonet.terminal:calypsonet-terminal-calypso-crypto-legacysam-java-api -> org.eclipse.keypop:keypop-calypso-crypto-legacysam-java-api
    • Package org.eclipse.keypop.calypso.card.crypto.legacysam -> org.eclipse.keypop.calypso.crypto.legacysam
    • Interface LegacySamSelection -> LegacySamSelectionExtension
    • Interface LSSecuritySetting -> SecuritySetting
    • Interface LSFreeTransactionManager -> FreeTransactionManager
    • Interface LSAsyncTransactionCreatorManager -> AsyncTransactionCreatorManager
    • Interface LSAsyncTransactionExecutorManager -> AsyncTransactionExecutorManager
    • Interface LSRevocationServiceSpi -> LegacySamRevocationServiceSpi
  • All legacy factories were merged into a single factory LegacySamApiFactory:
    • LegacySamSelectionFactory
    • LSTransactionManagerFactory
    • LSSecuritySettingFactory
    • LSCardTransactionCryptoExtensionFactory
    • LSCommandDataFactory
  • Method signature refactored:
    • LSWriteTransactionManager.prepareWriteCounterConfiguration(int counterNumber, int ceilingValue, boolean isManualCounterIncrementAuthorized) -> WriteTransactionManager.prepareWriteCounterConfiguration(int counterNumber, int ceilingValue, CounterIncrementAccess counterIncrementAccess). The enum CounterIncrementAccess has been created for this purpose.
    • TraceableSignatureComputationData.withSamTraceabilityMode(int offset, boolean usePartialSamSerialNumber) -> TraceableSignatureComputationData.withSamTraceabilityMode(int offset, SamTraceabilityMode samTraceabilityMode). The enum SamTraceabilityMode has been created for this purpose.
    • TraceableSignatureVerificationData.withSamTraceabilityMode(int offset, boolean isPartialSamSerialNumber, LSRevocationServiceSpi samRevocationService) -> TraceableSignatureComputationData.withSamTraceabilityMode(int offset, SamTraceabilityMode samTraceabilityMode, LegacySamRevocationServiceSpi samRevocationService). The enum SamTraceabilityMode has been created for this purpose.

Removed

  • The filterByProductType(LegacySam.ProductType productType) and filterBySerialNumber(String serialNumberRegex) methods of LegacySamSelection have been removed following the introduction of generic selection filters in the “Keypop Reader API”. Indeed, these two methods implemented filtering on power-on data, and it is now up to the implementation libraries to propose utility methods to recreate the regexes to be used for power-on data based on product type and/or serial number.
2023-11-27Keypop Calypso Card Java Api2.0.0

⚠️ The project has been migrated from the Calypsonet Terminal Calypso API GitHub repository.

Added

  • CalypsoCardApiFactory centralizes the methods used to create instances of the various interfaces of the API.
  • Exception InvalidPinException to be thrown if an invalid PIN is provided by the user.
  • SPI CardTransactionCryptoExtension must be implemented by a crypto extension to extends a card transaction with specific crypto features (e.g. signature computation, etc.).
  • SPI SymmetricCryptoCardTransactionManagerFactory must be implemented by a symmetric crypto extension so that it can be associated with a card transaction requiring a symmetric cryptographic module to secure the transaction (e.g. Legacy SAM, Open SAM, etc.).
  • SPI AsymmetricCryptoCardTransactionManagerFactory must be implemented by an asymmetric crypto extension so that it can be associated with a card transaction requiring an asymmetric cryptographic module to secure the transaction (e.g. PKI).
  • Method SecureTransactionManager.getCryptoExtension(Class<E> cryptoExtensionClass) returns the CardTransactionCryptoExtension associated with the secure card transaction.

Changed

  • The project license is now “MIT License” (previously “Eclipse Public License 2.0”).
  • CI: The Gradle plugin org.eclipse.keyple:keyple-gradle:0.2.+ has been replaced by org.eclipse.keypop:keypop-gradle:0.1.+.
  • Renamed:
    • Artifact org.calypsonet.terminal:calypsonet-terminal-calypso-java-api -> org.eclipse.keypop:keypop-calypso-card-java-api
    • Package org.calypsonet.terminal.calypso -> org.eclipse.keypop.calypso.card
    • Class CalypsoApiProperties -> CalypsoCardApiProperties
    • Class SamIOException -> CryptoIOException
    • Interface CalypsoCardSelection -> CalypsoCardSelectionExtension
    • Interface CardSecuritySetting -> SymmetricCryptoSecuritySetting
    • Method initSamContextForNextTransaction() -> initCryptoContextForNextTransaction()
  • Method signature refactored:
    • processCommands(boolean closePhysicalChannel) -> processCommands(ChannelControl channelControl). The enum ChannelControl has been created for this purpose.
  • CalypsoCard extends now IsoSmartCard.
  • CardTransactionManager has been split into the followings interfaces:
    • FreeTransactionManager: Manager of card transactions requiring no cryptographic computation.
    • SecureRegularModeTransactionManager: Manager of card transactions secured by symmetric key cryptographic algorithms, compatible with all Regular Calypso products.
    • SecureExtendedModeTransactionManager: Manager of card transactions secured by symmetric key cryptographic algorithms, adding additional operations available only for “Calypso Prime Extended” products.
    • SecurePkiModeTransactionManager: Manager of card transactions secured by asymmetric key cryptographic algorithms, compatible only with “Calypso Prime PKI” products.

Removed

  • All elements related to the SAM have been removed and will be provided by specific symmetric crypto extensions:
    • CommonSecuritySetting
    • SamSecuritySetting
    • CalypsoSamSelection
    • CalypsoSam
    • SamTransactionManager
    • CommonSignatureComputationData
    • BasicSignatureComputationData
    • TraceableSignatureComputationData
    • CommonSignatureVerificationData
    • BasicSignatureVerificationData
    • TraceableSignatureVerificationData
    • SamRevocationServiceSpi
    • SamRevokedException
    • InvalidSignatureException
  • All deprecated and obsolete methods have been removed:
    • CalypsoCardSelection.filterByCardProtocol(String cardProtocol) (moved to the “Keypop Reader Java API”)
    • CalypsoCardSelection.filterByPowerOnData(String powerOnDataRegex) (moved to the “Keypop Reader Java API”)
    • CalypsoCardSelection.filterByDfName(byte[] aid) (moved to the “Keypop Reader Java API”)
    • CalypsoCardSelection.filterByDfName(String aid) (moved to the “Keypop Reader Java API”)
    • CalypsoCardSelection.setFileOccurrence(FileOccurrence fileOccurrence) (moved to the “Keypop Reader Java API”)
    • CalypsoCardSelection.setFileControlInformation(FileControlInformation fileControlInformation) (moved to the “Keypop Reader Java API”)
    • CalypsoCardSelection.addSuccessfulStatusWord(int statusWord)
    • CalypsoCardSelection.prepareSelectFile(byte[] lid)
    • CalypsoCardSelection.prepareReadRecordFile(byte sfi, int recordNumber)
    • CalypsoCard.getAllFiles()
    • CommonTransactionManager.getSecuritySetting()
    • CommonTransactionManager.prepareComputeSignature(CommonSignatureComputationData<?> data)
    • CommonTransactionManager.prepareVerifySignature(CommonSignatureVerificationData<?> data)
    • CommonTransactionManager.processCommands()
    • CardTransactionManager.getCardReader()
    • CardTransactionManager.getCalypsoCard()
    • CardTransactionManager.getCardSecuritySetting()
    • CardTransactionManager.prepareSelectFile(byte[] lid)
    • CardTransactionManager.prepareReadRecordFile(byte sfi, int recordNumber)
    • CardTransactionManager.prepareReadRecordFile(byte sfi, int firstRecordNumber, int numberOfRecords, int recordSize)
    • CardTransactionManager.prepareReadCounterFile(byte sfi, int countersNumber)
    • CardTransactionManager.prepareReleaseCardChannel()
    • CardTransactionManager.processCardCommands()
    • CardTransactionManager.processVerifyPin(byte[] pin)
    • CardTransactionManager.processChangePin(byte[] newPin)
    • CardTransactionManager.processChangeKey(int keyIndex, byte newKif, byte newKvc, byte issuerKif, byte issuerKvc)
    • CardTransactionManager.processOpening(WriteAccessLevel writeAccessLevel)
    • CardTransactionManager.processClosing()
    • CardTransactionManager.processCancel()
    • CardSecuritySetting.setSamResource(CardReader samReader, CalypsoSam calypsoSam)
2023-11-27Keypop Calypso Crypto Asymmetric Java Api0.1.0
This is the initial release.
2023-11-27Keypop Calypso Crypto Symmetric Java Api0.1.0
This is the initial release.
2023-11-27Keypop Card Java Api2.0.0

⚠️ The project has been migrated from the Calypsonet Terminal Card API GitHub repository.

Changed

  • The project license is now “MIT License” (previously “Eclipse Public License 2.0”).
  • CI: The Gradle plugin org.eclipse.keyple:keyple-gradle:0.2.+ has been replaced by org.eclipse.keypop:keypop-gradle:0.1.+.
  • Renamed:
    • Artifact org.calypsonet.terminal:calypsonet-terminal-card-java-api -> org.eclipse.keypop:keypop-card-java-api
    • Package org.calypsonet.terminal.card -> org.eclipse.keypop.card
    • Interface CardSelectionSpi -> CardSelectionExtensionSpi
  • Moved:
    • Interface org.calypsonet.terminal.card.spi.ParseException -> org.eclipse.keypop.card.ParseException
    • Method CardSelectorSpi.getSuccessfulSelectionStatusWords() -> CardSelectionRequestSpi.getSuccessfulSelectionStatusWords()
  • The following exceptions classes are now marked as final:
    • ParseException
    • CardBrokenCommunicationException
    • ReaderBrokenCommunicationException
    • UnexpectedStatusWordException

Removed

  • Method CardSelectionRequestSpi.getCardSelector()
  • Interface CardSelectorSpi has been moved to the Keypop Reader Java API
2023-11-27Keypop Reader Java Api2.0.0

⚠️ The project has been migrated from the Calypsonet Terminal Reader API GitHub repository.

Added

  • ReaderApiFactory centralizes the methods used to create instances of the various interfaces of the API.
  • BasicCardSelector can be used to create generic card selection filters based on card communication protocol or power-on data.
  • IsoCardSelector lets you create ISO card selection filters based on card communication protocol and power-on data, as well as AIDs, and define selection strategies (e.g. first occurrence, FCI reading, etc.).
  • IsoSmartCard extends the SmartCard interface and provides access to data from the Select Application ISO command response.

Changed

  • The project license is now “MIT License” (previously “Eclipse Public License 2.0”).
  • CI: The Gradle plugin org.eclipse.keyple:keyple-gradle:0.2.+ has been replaced by org.eclipse.keypop:keypop-gradle:0.1.+.
  • Renamed:
    • Artifact org.calypsonet.terminal:calypsonet-terminal-reader-java-api -> org.eclipse.keypop:keypop-reader-java-api
    • Package org.calypsonet.terminal.reader -> org.eclipse.keypop.reader
    • Interface CardSelection -> CardSelectionExtension
  • Moved:
    • Method SmartCard.getSelectApplicationResponse() -> IsoSmartCard.getSelectApplicationResponse()
  • Method signature refactored:
    • CardSelectionManager.prepareSelection(CardSelection cardSelection) -> CardSelectionManager.prepareSelection(CardSelector<?> cardSelector, CardSelectionExtension cardSelectionExtension)
    • CardSelectionManager.scheduleCardSelectionScenario(ObservableCardReader observableCardReader, DetectionMode detectionMode, NotificationMode notificationMode) -> CardSelectionManager.scheduleCardSelectionScenario(ObservableCardReader observableCardReader, NotificationMode notificationMode)