/* * Find certificate matching a key */ PKCS11_CERT *PKCS11_find_certificate(PKCS11_KEY * key) { PKCS11_KEY_private *kpriv; PKCS11_CERT_private *cpriv; PKCS11_CERT *cert; unsigned int n, count; kpriv = PRIVKEY(key); if (PKCS11_enumerate_certs(KEY2TOKEN(key), &cert, &count)) return NULL; for (n = 0; n < count; n++, cert++) { cpriv = PRIVCERT(cert); if (cpriv->id_len == kpriv->id_len && !memcmp(cpriv->id, kpriv->id, kpriv->id_len)) return cert; } return NULL; }
/* * Find key matching a certificate */ PKCS11_KEY *pkcs11_find_key(PKCS11_CERT *cert) { PKCS11_CERT_private *cpriv; PKCS11_KEY_private *kpriv; PKCS11_KEY *keys; unsigned int n, count; cpriv = PRIVCERT(cert); if (PKCS11_enumerate_keys(CERT2TOKEN(cert), &keys, &count)) return NULL; for (n = 0; n < count; n++) { kpriv = PRIVKEY(&keys[n]); if (cpriv->id_len == kpriv->id_len && !memcmp(cpriv->id, kpriv->id, cpriv->id_len)) return &keys[n]; } return NULL; }