示例#1
0
int DSA_check_signature(int *out_valid, const uint8_t *digest,
                        size_t digest_len, const uint8_t *sig, size_t sig_len,
                        const DSA *dsa) {
    DSA_SIG *s = NULL;
    int ret = 0;
    uint8_t *der = NULL;

    s = DSA_SIG_new();
    if (s == NULL) {
        goto err;
    }

    const uint8_t *sigp = sig;
    if (d2i_DSA_SIG(&s, &sigp, sig_len) == NULL || sigp != sig + sig_len) {
        goto err;
    }

    /* Ensure that the signature uses DER and doesn't have trailing garbage. */
    int der_len = i2d_DSA_SIG(s, &der);
    if (der_len < 0 || (size_t)der_len != sig_len || memcmp(sig, der, sig_len)) {
        goto err;
    }

    ret = DSA_do_check_signature(out_valid, digest, digest_len, s, dsa);

err:
    OPENSSL_free(der);
    DSA_SIG_free(s);
    return ret;
}
示例#2
0
文件: dsa.c 项目: RobinWuDev/Qt
int DSA_verify(int type, const uint8_t *digest, size_t digest_len,
               const uint8_t *sig, size_t sig_len, const DSA *dsa) {
  DSA_SIG *s = NULL;
  int ret = -1, valid;

  s = DSA_SIG_new();
  if (s == NULL) {
    goto err;
  }

  if (d2i_DSA_SIG(&s, &sig, sig_len) == NULL) {
    goto err;
  }

  if (!DSA_do_check_signature(&valid, digest, digest_len, s, dsa)) {
    goto err;
  }

  ret = valid;

err:
  if (s) {
    DSA_SIG_free(s);
  }
  return ret;
}
示例#3
0
int DSA_do_verify(const uint8_t *digest, size_t digest_len, DSA_SIG *sig,
                  const DSA *dsa) {
    int valid;
    if (!DSA_do_check_signature(&valid, digest, digest_len, sig, dsa)) {
        return -1;
    }
    return valid;
}
示例#4
0
文件: dsa.c 项目: RobinWuDev/Qt
int DSA_check_signature(int *out_valid, const uint8_t *digest,
                        size_t digest_len, const uint8_t *sig, size_t sig_len,
                        const DSA *dsa) {
  DSA_SIG *s = NULL;
  int ret = 0;

  s = DSA_SIG_new();
  if (s == NULL) {
    goto err;
  }

  if (d2i_DSA_SIG(&s, &sig, sig_len) == NULL) {
    goto err;
  }

  ret = DSA_do_check_signature(out_valid, digest, digest_len, s, dsa);

err:
  if (s) {
    DSA_SIG_free(s);
  }
  return ret;
}