- /* public exponent e */
- exponent.len = (pgp_length(&packet, 2) + 7) / BITS_PER_BYTE;
- exponent.ptr = packet.ptr;
- if (exponent.len > packet.len)
- {
- DBG1("OpenPGP public key blob too short for exponent");
- goto end;
+ DBG2("L3 - %s:", pubkeyObjects[objectID].name);
+ object.len = pgp_length(&packet, 2);
+
+ if (object.len == PGP_INVALID_LENGTH)
+ {
+ DBG1("OpenPGP length is invalid");
+ goto end;
+ }
+ object.len = (object.len + 7) / BITS_PER_BYTE;
+ if (object.len > packet.len)
+ {
+ DBG1("OpenPGP field is too short");
+ goto end;
+ }
+ object.ptr = packet.ptr;
+ packet.ptr += object.len;
+ packet.len -= object.len;
+ DBG4("%B", &object);
+
+ switch (objectID)
+ {
+ case PUB_KEY_MODULUS:
+ mpz_import(this->n, object.len, 1, 1, 1, 0, object.ptr);
+ break;
+ case PUB_KEY_EXPONENT:
+ mpz_import(this->e, object.len, 1, 1, 1, 0, object.ptr);
+ break;
+ }