Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7367b5a
Add Ed (edwards curve), EdDSA (Ed25519/Ed448) and XDH (X25519/X448) i…
waltkb Feb 12, 2025
713a4a7
Add JDK implementation for Ed (edwards curve), EdDSA (Ed25519/Ed448) …
waltkb Feb 12, 2025
5c7dd76
Add new interfaces to JdkCryptographyProvider and format list
waltkb Feb 12, 2025
2c9c306
Updated .api definitions
waltkb Feb 13, 2025
83138af
Change package name for Ed
waltkb Feb 19, 2025
efb1b42
Replace mentions of secp256k1
waltkb Feb 19, 2025
aae570f
Add brainpool exclusion to support.kt
waltkb Apr 17, 2025
28ba084
Fix package names
waltkb Apr 17, 2025
c8488c9
address PR comments and add apple-native approaches
ariawisp Sep 4, 2025
c68be06
Address PR #105 review:
ariawisp Sep 4, 2025
059212f
Cleanup: remove temp JSONL and stray internal comments
ariawisp Sep 4, 2025
3d7885a
Remove WebCrypto engine detection machinery (Env files)
ariawisp Sep 4, 2025
0d2b4b1
JDK XDH: add RAW key format support via PKCS8/SPKI wrap/unwrap (X2551…
ariawisp Sep 4, 2025
a79fb64
Remove leftover implementation notes in CryptoKit EdDSA/XDH files
ariawisp Sep 4, 2025
9bb1ac2
Docs(CryptoKit): clarify that only Ed25519/X25519 are supported
ariawisp Sep 4, 2025
cf445fb
ASN.1 modules: add Edwards/Montgomery OIDs and use them across provid…
ariawisp Sep 4, 2025
6952a3d
OpenSSL EdDSA: reuse digest signature base with nullable hash (one-sh…
ariawisp Sep 4, 2025
c105f80
Tests: gate EdDSA/XDH on Default JDK to >=15 to reflect availability;…
ariawisp Sep 4, 2025
7eb984e
Apple/CryptoKit macOS tests: fix curve gating and ASN.1 decoding\n\n-…
ariawisp Sep 5, 2025
88bc7d3
base: add AccumulatingSignFunction/VerifyFunction and use in CryptoKi…
ariawisp Sep 5, 2025
47766f6
tests: split JDK gating — EdDSA since JDK 15, XDH since JDK 11
ariawisp Sep 5, 2025
bb4b569
tests: drop WebCrypto EdDSA/XDH skip rules; docs: add RFC links for E…
ariawisp Sep 5, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,12 @@ abstract class GenerateProviderTestsTask : DefaultTask() {
"EcdsaCompatibilityTest",
"EcdhCompatibilityTest",

// Edwards-family
"EdDsaTest",
"EdDsaCompatibilityTest",
"XdhTest",
"XdhCompatibilityTest",

"RsaOaepTest",
"RsaOaepCompatibilityTest",
"RsaPkcs1Test",
Expand Down
192 changes: 192 additions & 0 deletions cryptography-core/api/cryptography-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,102 @@ public final class dev/whyoleg/cryptography/algorithms/ECDSA$SignatureFormat : j
public static fun values ()[Ldev/whyoleg/cryptography/algorithms/ECDSA$SignatureFormat;
}

public abstract interface class dev/whyoleg/cryptography/algorithms/EdDSA : dev/whyoleg/cryptography/CryptographyAlgorithm {
public static final field Companion Ldev/whyoleg/cryptography/algorithms/EdDSA$Companion;
public fun getId ()Ldev/whyoleg/cryptography/CryptographyAlgorithmId;
public abstract fun keyPairGenerator (Ldev/whyoleg/cryptography/algorithms/EdDSA$Curve;)Ldev/whyoleg/cryptography/materials/key/KeyGenerator;
public abstract fun privateKeyDecoder (Ldev/whyoleg/cryptography/algorithms/EdDSA$Curve;)Ldev/whyoleg/cryptography/materials/key/KeyDecoder;
public abstract fun publicKeyDecoder (Ldev/whyoleg/cryptography/algorithms/EdDSA$Curve;)Ldev/whyoleg/cryptography/materials/key/KeyDecoder;
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$Companion : dev/whyoleg/cryptography/CryptographyAlgorithmId {
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$Curve : java/lang/Enum {
public static final field Ed25519 Ldev/whyoleg/cryptography/algorithms/EdDSA$Curve;
public static final field Ed448 Ldev/whyoleg/cryptography/algorithms/EdDSA$Curve;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Ldev/whyoleg/cryptography/algorithms/EdDSA$Curve;
public static fun values ()[Ldev/whyoleg/cryptography/algorithms/EdDSA$Curve;
}

public abstract interface class dev/whyoleg/cryptography/algorithms/EdDSA$KeyPair : dev/whyoleg/cryptography/materials/key/Key {
public abstract fun getPrivateKey ()Ldev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey;
public abstract fun getPublicKey ()Ldev/whyoleg/cryptography/algorithms/EdDSA$PublicKey;
}

public abstract interface class dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey : dev/whyoleg/cryptography/materials/key/EncodableKey {
public abstract fun signatureGenerator ()Ldev/whyoleg/cryptography/operations/SignatureGenerator;
}

public abstract class dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format : dev/whyoleg/cryptography/materials/key/KeyFormat {
public final fun toString ()Ljava/lang/String;
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$DER : dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$DER;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$JWK : dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$JWK;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$PEM : dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$PEM;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$RAW : dev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PrivateKey$Format$RAW;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public abstract interface class dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey : dev/whyoleg/cryptography/materials/key/EncodableKey {
public abstract fun signatureVerifier ()Ldev/whyoleg/cryptography/operations/SignatureVerifier;
}

public abstract class dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format : dev/whyoleg/cryptography/materials/key/KeyFormat {
public final fun toString ()Ljava/lang/String;
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$DER : dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$DER;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$JWK : dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$JWK;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$PEM : dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$PEM;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$RAW : dev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/EdDSA$PublicKey$Format$RAW;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public abstract interface class dev/whyoleg/cryptography/algorithms/HKDF : dev/whyoleg/cryptography/CryptographyAlgorithm {
public static final field Companion Ldev/whyoleg/cryptography/algorithms/HKDF$Companion;
public fun getId ()Ldev/whyoleg/cryptography/CryptographyAlgorithmId;
Expand Down Expand Up @@ -689,6 +785,102 @@ public final class dev/whyoleg/cryptography/algorithms/SHA512 : dev/whyoleg/cryp
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/SHA512;
}

public abstract interface class dev/whyoleg/cryptography/algorithms/XDH : dev/whyoleg/cryptography/CryptographyAlgorithm {
public static final field Companion Ldev/whyoleg/cryptography/algorithms/XDH$Companion;
public fun getId ()Ldev/whyoleg/cryptography/CryptographyAlgorithmId;
public abstract fun keyPairGenerator (Ldev/whyoleg/cryptography/algorithms/XDH$Curve;)Ldev/whyoleg/cryptography/materials/key/KeyGenerator;
public abstract fun privateKeyDecoder (Ldev/whyoleg/cryptography/algorithms/XDH$Curve;)Ldev/whyoleg/cryptography/materials/key/KeyDecoder;
public abstract fun publicKeyDecoder (Ldev/whyoleg/cryptography/algorithms/XDH$Curve;)Ldev/whyoleg/cryptography/materials/key/KeyDecoder;
}

public final class dev/whyoleg/cryptography/algorithms/XDH$Companion : dev/whyoleg/cryptography/CryptographyAlgorithmId {
}

public final class dev/whyoleg/cryptography/algorithms/XDH$Curve : java/lang/Enum {
public static final field X25519 Ldev/whyoleg/cryptography/algorithms/XDH$Curve;
public static final field X448 Ldev/whyoleg/cryptography/algorithms/XDH$Curve;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Ldev/whyoleg/cryptography/algorithms/XDH$Curve;
public static fun values ()[Ldev/whyoleg/cryptography/algorithms/XDH$Curve;
}

public abstract interface class dev/whyoleg/cryptography/algorithms/XDH$KeyPair : dev/whyoleg/cryptography/materials/key/Key {
public abstract fun getPrivateKey ()Ldev/whyoleg/cryptography/algorithms/XDH$PrivateKey;
public abstract fun getPublicKey ()Ldev/whyoleg/cryptography/algorithms/XDH$PublicKey;
}

public abstract interface class dev/whyoleg/cryptography/algorithms/XDH$PrivateKey : dev/whyoleg/cryptography/materials/key/EncodableKey {
public abstract fun sharedSecretGenerator ()Ldev/whyoleg/cryptography/operations/SharedSecretGenerator;
}

public abstract class dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format : dev/whyoleg/cryptography/materials/key/KeyFormat {
public final fun toString ()Ljava/lang/String;
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$DER : dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$DER;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$JWK : dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$JWK;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$PEM : dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$PEM;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$RAW : dev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PrivateKey$Format$RAW;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public abstract interface class dev/whyoleg/cryptography/algorithms/XDH$PublicKey : dev/whyoleg/cryptography/materials/key/EncodableKey {
public abstract fun sharedSecretGenerator ()Ldev/whyoleg/cryptography/operations/SharedSecretGenerator;
}

public abstract class dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format : dev/whyoleg/cryptography/materials/key/KeyFormat {
public final fun toString ()Ljava/lang/String;
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$DER : dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$DER;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$JWK : dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$JWK;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$PEM : dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$PEM;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$RAW : dev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format {
public static final field INSTANCE Ldev/whyoleg/cryptography/algorithms/XDH$PublicKey$Format$RAW;
public fun equals (Ljava/lang/Object;)Z
public fun getName ()Ljava/lang/String;
public fun hashCode ()I
}

public final class dev/whyoleg/cryptography/algorithms/symmetric/SymmetricKeySize {
public static final field Companion Ldev/whyoleg/cryptography/algorithms/symmetric/SymmetricKeySize$Companion;
public static final synthetic fun box-impl (I)Ldev/whyoleg/cryptography/algorithms/symmetric/SymmetricKeySize;
Expand Down
Loading