static onak_status_t onak_parse_key_material(struct openpgp_packet *pk,
struct onak_key_material *key)
{
- int i, len, ofs;
+ int len, ofs;
enum onak_oid oid;
mpz_t x, y;
onak_status_t ret = ONAK_E_OK;
return ret;
}
-onak_status_t onak_check_hash_sig(struct openpgp_publickey *sigkey,
+onak_status_t onak_check_hash_sig(struct openpgp_packet *sigkey,
struct openpgp_packet *sig,
uint8_t *hash,
uint8_t hashtype)
struct dsa_signature dsasig;
uint8_t sigkeytype;
uint8_t edsig[64];
- uint64_t keyid;
int len, ofs;
+ size_t count;
mpz_t s;
- ret = onak_parse_key_material(sigkey->publickey, &pubkey);
+ ret = onak_parse_key_material(sigkey, &pubkey);
if (ret != ONAK_E_OK) {
return ret;
}
MPI_TO_MPZ(sig, dsasig.r);
if (ret == ONAK_E_OK)
MPI_TO_MPZ(sig, dsasig.s);
- mpz_export(edsig, NULL, 1, 1, 0, 0, dsasig.r);
- mpz_export(&edsig[32], NULL, 1, 1, 0, 0, dsasig.s);
+ mpz_export(edsig, &count, 1, 1, 0, 0, dsasig.r);
+ if (count < 32) {
+ memmove(&edsig[32 - count], edsig, count);
+ while (count < 32) {
+ count++;
+ edsig[32 - count] = 0;
+ }
+ }
+ mpz_export(&edsig[32], &count, 1, 1, 0, 0, dsasig.s);
+ if (count < 32) {
+ memmove(&edsig[32 - count], edsig, count);
+ while (count < 32) {
+ count++;
+ edsig[32 - count] = 0;
+ }
+ }
break;
case OPENPGP_PKALGO_RSA:
case OPENPGP_PKALGO_RSA_SIGN:
uint8_t keyheader[5];
uint8_t packetheader[5];
uint8_t trailer[10];
- int i;
uint64_t keyid;
onak_status_t res;