in kmsp11/operation/crypter_ops.cc [83:111]
absl::StatusOr<SignOp> NewSignOp(std::shared_ptr<Object> key,
const CK_MECHANISM* mechanism) {
switch (mechanism->mechanism) {
case CKM_ECDSA:
case CKM_ECDSA_SHA256:
case CKM_ECDSA_SHA384:
return NewEcdsaSigner(key, mechanism);
case CKM_RSA_PKCS:
case CKM_SHA256_RSA_PKCS:
case CKM_SHA512_RSA_PKCS:
if (!key->algorithm().digest_mechanism.has_value()) {
return NewRsaRawPkcs1Signer(key, mechanism);
}
return NewRsaPkcs1Signer(key, mechanism);
case CKM_RSA_PKCS_PSS:
case CKM_SHA256_RSA_PKCS_PSS:
case CKM_SHA512_RSA_PKCS_PSS:
return NewRsaPssSigner(key, mechanism);
case CKM_SHA_1_HMAC:
case CKM_SHA224_HMAC:
case CKM_SHA256_HMAC:
case CKM_SHA384_HMAC:
case CKM_SHA512_HMAC:
return NewHmacSigner(key, mechanism);
default:
return InvalidMechanismError(mechanism->mechanism, "sign",
SOURCE_LOCATION);
}
}