Пример #1
0
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;
}
Пример #2
0
/* 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;
}