static int rpmcdsaAvailablePubkey(pgpDig dig, int algo) { int rc = 0; /* assume available */ #ifdef REFERENCE rc = rpmgcAvailable(dig->impl, algo, gcry_pk_test_algo(algo)); #endif return rc; }
/* This function recognizes the KSP content. * This function sets the KMO error string. It returns -1 on failure. */ int kmocrypt_recognize_ksp2(struct kmocrypt_signature2 *self, kbuffer *buffer) { uint32_t header_len = 27; uint32_t subpackets_len; if (buffer->len < header_len) { kmo_seterror("KSP header too short"); return -1; } /* MAGIC */ kbuffer_read32(buffer); /* MAJOR */ self->major= kbuffer_read32(buffer); /* MINOR */ self->minor = kbuffer_read32(buffer); /* MEMBER ID */ self->mid = kbuffer_read64(buffer); /* HASH ALGO */ self->hash_algo = kbuffer_read8(buffer); if (gcry_md_test_algo(self->hash_algo)) { kmo_seterror("unsupported hash algorithm"); return -1; } /* SIG ALGO */ self->sig_algo = kbuffer_read8(buffer); if (gcry_pk_test_algo(self->sig_algo)) { kmo_seterror("unsupported signature algorithm"); return -1; } /* PACKAGING TYPE */ self->pkg_type = kbuffer_read8(buffer); if (self->pkg_type >= KMO_P_NB_TYPE) { kmo_seterror("invalid signature packet type"); return -1; } /* SUBPACKETS LENGTH */ subpackets_len = kbuffer_read32(buffer); if (! subpackets_len) { kmo_seterror("no subpacket in KSP"); return -1; } if (buffer->len < header_len + subpackets_len) { kmo_seterror("KSP subpacket section is too short"); return -1; } /* Recognize the subpackets. */ if (recognize_subpackets(self, buffer, subpackets_len)) { return -1; } /* Recognize the signature of the KSP, unless it's the encryption key. */ if (self->mid && recognize_ksp_signature(self, buffer, buffer->len - buffer->pos)) { return -1; } return 0; }