@@ -123,7 +123,6 @@ public class PKCS11Example {
123123
124124This example initializes the PKCS11 library, opens a session, and provides a menu-driven interface for various PKCS #11 operations.
125125
126- ### Detailed Examples
127126
128127### Detailed Examples
129128
@@ -282,7 +281,98 @@ The project is structured into several key components:
282281
283282### Class Diagrams
284283
285- (Insert class diagram here)
284+ ``` mermaid
285+ classDiagram
286+ class PKCS11Manager {
287+ -Pkcs11 pkcs11
288+ -Path libraryPath
289+ -String pin
290+ +PKCS11Manager(Path libraryPath, String pin)
291+ +openSession(int slotId): PKCS11Session
292+ +getPKCS11Token(): Pkcs11SignatureToken
293+ +close()
294+ }
295+ class PKCS11Session {
296+ -Pkcs11 pkcs11
297+ -NativeLong session
298+ -String pin
299+ +PKCS11Session(Pkcs11 pkcs11, String pin, int slotId)
300+ +resetSession()
301+ +logout()
302+ +close()
303+ }
304+ class PKCS11Initializer {
305+ +initializePkcs11(Path libraryPath): Pkcs11
306+ }
307+ class PKCS11Crypto {
308+ -initCrypto(Pkcs11 pkcs11, NativeLong session, NativeLong privateKeyHandle)
309+ +encryptData(byte[] dataToEncrypt, X509Certificate certificate): byte[]
310+ +decryptData(Pkcs11 pkcs11, NativeLong session, NativeLong privateKeyHandle, byte[] encryptedData): byte[]
311+ -decrypt(Pkcs11 pkcs11, NativeLong session, byte[] encryptedData): byte[]
312+ }
313+ class PKCS11Signer {
314+ -initSigning(Pkcs11 pkcs11, NativeLong session, NativeLong privateKeyHandle)
315+ +signMessage(Pkcs11 pkcs11, NativeLong session, NativeLong privateKeyHandle, byte[] message): byte[]
316+ +verifySignature(byte[] message, byte[] signature, X509Certificate certificate): boolean
317+ -sign(Pkcs11 pkcs11, NativeLong session, byte[] message): byte[]
318+ }
319+ class PKCS11Utils {
320+ +findPrivateKeysAndCertificates(Pkcs11 pkcs11, NativeLong session): List<KeyCertificatePair>
321+ +listSupportedAlgorithms(Pkcs11 pkcs11, NativeLong session, int slotID): List<SupportedAlgorithm>
322+ -findAllCertificates(Pkcs11 pkcs11, NativeLong session): Map<String, NativeLong>
323+ -findAllPrivateKeys(Pkcs11 pkcs11, NativeLong session): Map<String, NativeLong>
324+ -getCKA_ID(Pkcs11 pkcs11, NativeLong session, NativeLong objectHandle): String
325+ -getCertificate(Pkcs11 pkcs11, NativeLong session, NativeLong certHandle): X509Certificate
326+ -bytesToHex(byte[] bytes): String
327+ -getMechanismList(Pkcs11 pkcs11, NativeLong slotID): NativeLong[]
328+ -getMechanismName(long mechanismCode): String
329+ -getAlgorithmType(CK_MECHANISM_INFO mechanismInfo): SupportedAlgorithm.AlgorithmType
330+ }
331+ class KeyCertificatePair {
332+ -NativeLong keyHandle
333+ -X509Certificate certificate
334+ -String ckaId
335+ -CertificateInfo certificateInfo
336+ }
337+ class CertificateInfo {
338+ -String subject
339+ -String issuer
340+ -BigInteger serialNumber
341+ -byte[] signature
342+ -Date notBefore
343+ -Date notAfter
344+ -String sigAlgName
345+ -String sigAlgOID
346+ -byte[] tbsCertificate
347+ -int version
348+ -PublicKey publicKey
349+ -boolean[] issuerUniqueID
350+ -boolean[] subjectUniqueID
351+ -boolean[] keyUsage
352+ -List<String> extendedKeyUsage
353+ -int basicConstraints
354+ -Collection<List<?>> subjectAlternativeNames
355+ -Collection<List<?>> issuerAlternativeNames
356+ -byte[] encoded
357+ }
358+ class SupportedAlgorithm {
359+ -String name
360+ -String code
361+ -AlgorithmType type
362+ +enum AlgorithmType
363+ }
364+
365+ PKCS11Manager --> PKCS11Initializer : uses
366+ PKCS11Manager --> PKCS11Session : creates
367+ PKCS11Manager --> Pkcs11 : manages
368+ PKCS11Session --> Pkcs11 : uses
369+ PKCS11Crypto --> Pkcs11 : uses
370+ PKCS11Signer --> Pkcs11 : uses
371+ PKCS11Utils --> Pkcs11 : uses
372+ PKCS11Utils --> KeyCertificatePair : creates
373+ PKCS11Utils --> SupportedAlgorithm : creates
374+ KeyCertificatePair --> CertificateInfo : contains
375+ KeyCertificatePair --> X509Certificate : contains
286376
287377### Sequence Diagrams
288378
0 commit comments