Hi Wei-Jun, As far as I know, public and private keys are different PKCS#11 objects, each one with a different CK_OBJECT_HANDLE. See for example how C_GenerateKeyPair [1] has two output parameters: CK_OBJECT_HANDLE_PTR phPublicKey amd CK_OBJECT_HANDLE_PTR phPrivateKey.
NSS uses CKA_PUBLIC_KEY_INFO only when wrapping [2] / unwrapping [3] (C_WrapKey / C_UnwrapKey) RSA-PSS keys (where it stores an ASN1-encoded SubjectPublicKeyInfo with the algorithm OID and the DER encoding of the public key). Here [4] is how SunPKCS11 proceeds after calling C_GenerateKeyPair, by creating two P11Key objects for each handle (P11PublicKey and P11PrivateKey). [1] https://docs.oasis-open.org/pkcs11/pkcs11-base/v3.0/pkcs11-base-v3.0.html#_Toc29976704 [2] https://github.com/nss-dev/nss/blob/NSS_3_101_RTM/lib/softoken/pkcs11c.c#L6038-L6039 [3] https://github.com/nss-dev/nss/blob/NSS_3_101_RTM/lib/softoken/pkcs11c.c#L6604-L6605 [4] https://github.com/openjdk/jdk/blob/jdk-25+1/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyPairGenerator.java#L424-L431 Regards, -- Francisco On 12/10/24 01:43, Wei-Jun Wang wrote: > Daniel suggested CKA_PUBLIC_KEY_INFO but it’s not available in NSS 3.101. > >> On Dec 9, 2024, at 08:07, Wei-Jun Wang <weijun.w...@oracle.com> wrote: >> >> Hi PKCS #11 gurus, >> >> DHKEM [1] requires a function >> >> Pk(skX): The KEM public key corresponding to the KEM private key skX. >> >> "The notation pk(skX), depending on its use and the KEM and its >> implementation, is either the computation of the public key using the >> private key, or just syntax expressing the retrieval of the public >> key, assuming it is stored along with the private key object." >> >> For the software side, I can calculate the public key [2] from the >> private key. How can I do this in PKCS #11? >> >> Thanks, >> Weijun >> >> [1] https://www.rfc-editor.org/rfc/rfc9180.html#name-notation >> [2] https://github.com/openjdk/jdk/blob/ >> adca97b659d725b0dd320322297dcbd1b443a047/src/java.base/share/classes/ >> sun/security/ec/ECPrivateKeyImpl.java#L209 >> >