Skip to content

Merge release 2.8.2 #192

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions AndroidDemo/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ android {

dependencies {

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'

implementation project(':android')
implementation project(':management')
Expand All @@ -56,27 +56,27 @@ dependencies {
implementation project(':piv')
implementation project(':support')

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2'

implementation 'androidx.core:core-ktx:1.15.0'
implementation 'androidx.fragment:fragment-ktx:1.8.5'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.core:core-ktx:1.16.0'
implementation 'androidx.fragment:fragment-ktx:1.8.8'
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.4.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.google.android.material:material:1.12.0'

// Lifecycle
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.2"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

// Navigation
def nav_version = '2.8.5'
def nav_version = '2.9.2'
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

implementation 'org.bouncycastle:bcpkix-jdk15to18:1.80'
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.81'

implementation 'com.github.tony19:logback-android:3.0.0'

Expand Down
2 changes: 1 addition & 1 deletion DesktopDemo/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
dependencies {
compileOnly 'com.google.code.findbugs:jsr305:3.0.2'

implementation 'ch.qos.logback:logback-classic:1.5.16'
implementation 'ch.qos.logback:logback-classic:1.5.18'

implementation project(':desktop')
implementation project(':oath')
Expand Down
23 changes: 23 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
@@ -1,3 +1,26 @@
* Version 2.8.2 (released 2025-07-24)
** core module:
- fixed SCP processing
** oath module:
- fixed parsing OATH URI where issuer contains ampersand character
** yubiotp module:
- fixed programming sequence update evaluation
** fido modules:
- added support for using SCP over CCID
- fixed largeBlob extension authenticator inputs naming
** test modules:
- added support for test device serial number allow list
** build system:
- migrated publishing to ossrh-staging-api service
* Version 2.8.1 (released 2025-05-28)
** core module:
- added support for Version Qualifier
- added support for using SmartCardConnection only with short APDUs
** fido module:
- fixed handling of allowList without existing credentials
** general:
- improved support of legacy Yubico devices
- the FUNCTION_NOT_SUPPORTED is now treated as ApplicationNotAvailableException
* Version 2.8.0 (released 2025-01-30)
** new
- updated targetSdk to 35
Expand Down
6 changes: 3 additions & 3 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {
}

android {
compileSdk 35
compileSdk 36

defaultConfig {
minSdkVersion 19
Expand Down Expand Up @@ -41,8 +41,8 @@ dependencies {

testImplementation project(':testing')
testImplementation 'androidx.test.ext:junit:1.2.1'
testImplementation 'org.robolectric:robolectric:4.12.1'
testImplementation 'org.mockito:mockito-core:5.17.0'
testImplementation 'org.robolectric:robolectric:4.15.1'
testImplementation 'org.mockito:mockito-core:5.18.0'

androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test:runner:1.6.2'
Expand Down
2 changes: 1 addition & 1 deletion android/publish.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ afterEvaluate {
repositories {
maven {
name 'sonatype'
url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
url "https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/"
credentials {
username = findProperty("sonatype.username")
password = findProperty("sonatype.password")
Expand Down
9 changes: 5 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@

buildscript {
ext {
kotlin_version = '2.1.20'
kotlin_version = '2.2.0'
}
repositories {
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.9.2'
classpath 'com.android.tools.build:gradle:8.11.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

plugins {
id 'maven-publish'
id 'com.diffplug.spotless' version "7.0.3" apply false
id 'com.diffplug.spotless' version "7.1.0" apply false
id 'project-convention-publishing'
}

allprojects {
Expand All @@ -35,7 +36,7 @@ allprojects {
}

subprojects {
version = '2.8.2-SNAPSHOT'
version = '2.8.3-SNAPSHOT'
ext.pomName = "Yubico YubiKit ${project.name.capitalize()}"


Expand Down
4 changes: 2 additions & 2 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ repositories {
}

dependencies {
implementation 'com.github.spotbugs.snom:spotbugs-gradle-plugin:6.1.7'
implementation 'com.android.tools.build:gradle:8.9.2'
implementation 'com.github.spotbugs.snom:spotbugs-gradle-plugin:6.2.2'
implementation 'com.android.tools.build:gradle:8.11.1'
}
53 changes: 53 additions & 0 deletions buildSrc/src/main/groovy/project-convention-publishing.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright (C) 2025 Yubico.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

// Custom task to notify Sonatype Central that the manual upload is complete.
tasks.register('finalizeCentralPublication') {
description = 'Notifies Sonatype Central that a manual publication is complete.'
group = 'publishing'

doLast {

// Retrieve credentials securely from gradle.properties or environment variables.
def sonatypeNamespace = 'com.yubico'
def sonatypeUserName = findProperty('sonatype.username')
def sonatypePassword = findProperty('sonatype.password')
def sonatypeBearerToken = "${sonatypeUserName}:${sonatypePassword}".bytes.encodeBase64().toString()

// Construct the API endpoint URL.
def url = new URI("https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/${sonatypeNamespace}").toURL()

logger.lifecycle("Finalizing publication by sending POST to ${url}")

// Open a connection and configure the POST request.
def connection = url.openConnection() as HttpURLConnection
connection.requestMethod = 'POST'
connection.setRequestProperty('Authorization', "Bearer ${sonatypeBearerToken}")
connection.setRequestProperty('User-Agent', "Gradle/${project.gradle.gradleVersion}")
connection.doOutput = true // Necessary for a POST request.

def responseCode = connection.responseCode
logger.lifecycle("Sonatype Central response: ${responseCode} ${connection.responseMessage}")

// Check if the request was successful. If not, fail the build.
if (!(responseCode in 200..299)) {
def errorStream = connection.errorStream?.text
throw new GradleException("Failed to finalize publication on Sonatype Central. Response: ${responseCode}. Body: ${errorStream}")
}

logger.lifecycle('Successfully finalized publication on Sonatype Central.')
}
}
10 changes: 6 additions & 4 deletions doc/publish.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
== Instructions for library publishing
Make sure that you have permissions to publish in Yubico's Sonatype group.
Make sure that you have permissions to publish in Yubico's Sonatype group. Generate User token at https://central.sonatype.com/account.

Make sure that you put your credentials into:

Expand Down Expand Up @@ -32,13 +32,15 @@ As a dry run, publish to your local Maven repository ($HOME/.m2/):

Run this command in Terminal to push to Sonatype staging repository:

./gradlew publish
./gradlew publish finalizeCentralPublication

Publishing can also be done for a single module:

./gradlew modulename:publish
./gradlew modulename:publish finalizeCentralPublication

When publishing to Sonatype you will need to log in to the staging repo to close and release.
Publish the deployment through https://central.sonatype.com/publishing.

For any OSSRH Staging API service issues visit https://ossrh-staging-api.central.sonatype.com/swagger-ui/#/ to review the repository.

When building release, gradle will by default execute signing tasks. When this is not desired, for
example during CI builds, it is possible to disable signing with `NO_GPG_SIGN` env variable set to `true`.
Expand Down
2 changes: 1 addition & 1 deletion fido/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ apply plugin: 'yubikit-java-library'
dependencies {
api project(':core')

testImplementation 'org.mockito:mockito-core:5.17.0'
testImplementation 'org.mockito:mockito-core:5.18.0'
implementation 'com.squareup.moshi:moshi:1.15.2'

}
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Fri May 02 19:11:45 CEST 2025
#Thu Jul 17 16:26:11 CEST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
4 changes: 2 additions & 2 deletions publish.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ publishing {
repositories {
maven {
name 'sonatype'
url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
url "https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/"
credentials {
username = findProperty("sonatype.username")
password = findProperty("sonatype.password")
}
}
}
}
}
2 changes: 1 addition & 1 deletion testing-android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

android {
compileSdk 35
compileSdk 36

defaultConfig {
minSdkVersion 19
Expand Down
8 changes: 4 additions & 4 deletions testing-desktop/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@ configurations {
}

dependencies {
implementation 'org.jetbrains:annotations:23.0.0'
implementation 'org.jetbrains:annotations:26.0.2'

implementation project(':desktop')
implementation project(':piv')
implementation project(':testing')

integrationTestImplementation 'junit:junit:4.13.2'
integrationTestImplementation 'ch.qos.logback:logback-classic:1.5.16'
integrationTestImplementation 'ch.qos.logback:logback-classic:1.5.18'

implementation 'org.bouncycastle:bcpkix-jdk15to18:1.80'
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.81'

integrationTestRuntimeOnly('org.junit.vintage:junit-vintage-engine:5.12.2')
integrationTestRuntimeOnly('org.junit.vintage:junit-vintage-engine:5.13.3')
}

java {
Expand Down
2 changes: 1 addition & 1 deletion testing/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ dependencies {

api 'junit:junit:4.13.2'

implementation 'org.bouncycastle:bcpkix-jdk15to18:1.80'
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.81'

implementation 'org.hamcrest:hamcrest:3.0'
implementation 'org.hamcrest:hamcrest-library:3.0'
Expand Down